diff --git a/.env.example b/.env.example index ed8089ed7..8e5392a0d 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,19 @@ +# Image Tags +# ---------- + +TAG=dev + # Security # -------- + +# Please set these access keys to something random and unique. +# Note: For just testing, you can set them to the same value. + +# On Linux, you can generate a random key with: +# > openssl rand -base64 32 +# OR +# > tr -dc 'A-Za-z0-9+_/' AGENTS_API_KEY= COZO_AUTH_TOKEN= @@ -9,24 +23,33 @@ LITELLM_MASTER_KEY= LITELLM_SALT_KEY= LITELLM_REDIS_PASSWORD= -# Memory Store -# ----------- +# LLM Providers +# -------------- -# COZO_HOST=http://memory-store:9070 -# COZO_PORT=9070 -# COZO_ROCKSDB_DIR=cozo.db -# COZO_BACKUP_DIR=/backup -# COZO_MNT_DIR=/data +### Recommended LLM Providers -# Gateway -# ------ +# OPENAI_API_KEY= +# VOYAGE_API_KEY= -# GATEWAY_PORT=80 -# TRAEFIK_LOG_LEVEL=INFO +# HUGGING_FACE_HUB_TOKEN= +# ANTHROPIC_API_KEY= +# GROQ_API_KEY= +# CLOUDFLARE_API_KEY= +# CLOUDFLARE_ACCOUNT_ID= +# NVIDIA_NIM_API_KEY= +# GITHUB_API_KEY= +# GOOGLE_APPLICATION_CREDENTIALS=.keys/julep-vertexai-svc.json # Agents API # --------- +### Embedding Model +### > Set to either "voyage/voyage-3" or "Alibaba-NLP/gte-large-en-v1.5" +### > Use Alibaba-NLP/gte-large-en-v1.5 with local embedding server + +# EMBEDDING_MODEL_ID=voyage/voyage-3 +# EMBEDDING_MODEL_ID=Alibaba-NLP/gte-large-en-v1.5 + # AGENTS_API_HOSTNAME=localhost # AGENTS_API_PROTOCOL=http # AGENTS_API_KEY_HEADER_NAME=Authorization @@ -34,8 +57,25 @@ LITELLM_REDIS_PASSWORD= # TRUNCATE_EMBED_TEXT=true # WORKER_URL=temporal:7233 # AGENTS_API_DEBUG=false -# EMBEDDING_MODEL_ID=Alibaba-NLP/gte-large-en-v1.5 # NUM_GPUS=1 +# INTEGRATION_SERVICE_URL=http://integrations:8000 +# USE_BLOB_STORE_FOR_TEMPORAL=false +# BLOB_STORE_CUTOFF_KB=1024 + +# Memory Store +# ----------- + +# COZO_HOST=http://memory-store:9070 +# COZO_PORT=9070 +# COZO_ROCKSDB_DIR=cozo.db +# COZO_BACKUP_DIR=/backup +# COZO_MNT_DIR=/data + +# Gateway +# ------ + +# GATEWAY_PORT=80 +# TRAEFIK_LOG_LEVEL=INFO # Temporal # -------- @@ -55,16 +95,9 @@ LITELLM_REDIS_PASSWORD= # LITELLM_REDIS_HOST=litellm-redis # LITELLM_REDIS_PORT=6379 -# LLM Providers -# -------------- +# Blob Store +# ----------- -# OPENAI_API_KEY= -# HUGGING_FACE_HUB_TOKEN= -# ANTHROPIC_API_KEY= -# GROQ_API_KEY= -# CLOUDFLARE_API_KEY= -# CLOUDFLARE_ACCOUNT_ID= -# NVIDIA_NIM_API_KEY= -# GITHUB_API_KEY= -# VOYAGE_API_KEY= -# GOOGLE_APPLICATION_CREDENTIALS=.keys/julep-vertexai-svc.json +# S3_ENDPOINT=http://seaweedfs:8333 +# S3_ACCESS_KEY= +# S3_SECRET_KEY= \ No newline at end of file diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..21d3f63d5 --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,40 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [INSERT EMAIL ADDRESS]. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..95731b302 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,119 @@ +name: "🐛 Bug Report" +description: "Submit a bug report to help us improve" +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: We value your time and your efforts to submit this bug report is appreciated. 🙏 + + - type: textarea + id: description + validations: + required: true + attributes: + label: "📜 Description" + description: "A clear and concise description of what the bug is." + placeholder: "It bugs out when ..." + + - type: textarea + id: steps-to-reproduce + validations: + required: true + attributes: + label: "👟 Reproduction steps" + description: "How do you trigger this bug? Please walk us through it step by step." + placeholder: "1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error" + + - type: textarea + id: expected-behavior + validations: + required: true + attributes: + label: "👍 Expected behavior" + description: "What did you think should happen?" + placeholder: "It should ..." + + - type: textarea + id: actual-behavior + validations: + required: true + attributes: + label: "👎 Actual Behavior with Screenshots" + description: "What did actually happen? Add screenshots, if applicable." + placeholder: "It actually ..." + + - type: dropdown + id: operating-system + attributes: + label: "💻 Operating system" + description: "What OS is your app running on?" + options: + - Linux + - MacOS + - Windows + - Something else + validations: + required: true + + - type: dropdown + id: browsers + attributes: + label: What browsers are you seeing the problem on? + multiple: true + options: + - Firefox + - Chrome + - Safari + - Microsoft Edge + - Something else + + - type: textarea + id: additional-context + validations: + required: false + attributes: + label: "📃 Provide any additional context for the Bug." + description: "Add any other context about the problem here." + placeholder: "It actually ..." + + - type: textarea + id: logs + validations: + required: false + attributes: + label: 📖 Relevant log output + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell + + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "👀 Have you spent some time to check if this bug has been raised before?" + options: + - label: "I checked and didn't find similar issue" + required: true + + - type: dropdown + id: willing-to-submit-pr + attributes: + label: 🔗 Are you willing to submit PR? + description: This is absolutely not required, but we are happy to guide you in the contribution process. + options: # Added options key + - "Yes, I am willing to submit a PR!" + - "No" + validations: + required: false + + + - type: checkboxes + id: terms + attributes: + label: 🧑‍⚖️ Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/julep-ai/julep/blob/dev/.github/CODE_OF_CONDUCT.md) + options: + - label: I agree to follow this project's Code of Conduct + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..4e472d981 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Have Question? + url: https://discord.com/invite/JTSBGRZrzj + about: Join Official Discord server \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/docs_improvement.yml b/.github/ISSUE_TEMPLATE/docs_improvement.yml new file mode 100644 index 000000000..1654e3345 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs_improvement.yml @@ -0,0 +1,52 @@ +name: "📝 Docs Improvement" +description: "Suggest improvements or additions to the documentation" +title: "[Docs]: " +labels: ["documentation"] +assignees: [] +body: + - type: markdown + attributes: + value: Thanks for taking the time to help improve our documentation! Please provide the following details + + - type: input + id: current_section + attributes: + label: "Current Section" + description: "Which section of the documentation needs improvement?" + placeholder: "e.g., Installation Guide" + + - type: textarea + id: improvement_suggestion + attributes: + label: "Improvement Suggestion" + description: "Describe the improvement or addition you are suggesting." + placeholder: "e.g., Add more details about setting up the environment." + + - type: textarea + id: additional_context + attributes: + label: "Additional Context" + description: "Any additional context or information that might be helpful." + placeholder: "e.g., Links to related documentation, screenshots, etc." + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "👀 Have you spent some time to check if this issue has been raised before?" + options: + - label: "I checked and didn't find similar issue" + required: true + - type: dropdown + id: willing-to-submit-pr + attributes: + label: Are you willing to submit PR? + description: This is absolutely not required, but we are happy to guide you in the contribution process. + options: + - "Yes I am willing to submit a PR!" + - type: checkboxes + id: terms + attributes: + label: 🧑‍⚖️ Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/julep-ai/julep/blob/dev/.github/CODE_OF_CONDUCT.md) + options: + - label: I agree to follow this project's Code of Conduct + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..3d1286f78 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,62 @@ +name: 🚀 Feature +description: "Submit a proposal for a new feature" +title: "[Feature]: " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: We value your time and your efforts to submit this feature request is appreciated. 🙏 + - type: textarea + id: feature-description + validations: + required: true + attributes: + label: "🔖 Feature description" + description: "A clear and concise description of what the feature is." + placeholder: "You should add ..." + - type: textarea + id: pitch + validations: + required: true + attributes: + label: "🎤 Why is this feature needed ?" + description: "Please explain why this feature should be implemented and how it would be used. Add examples, if applicable." + placeholder: "In my use-case, ..." + - type: textarea + id: solution + validations: + required: true + attributes: + label: "✌️ How do you aim to achieve this?" + description: "A clear and concise description of what you want to happen." + placeholder: "I want this feature to, ..." + - type: textarea + id: alternative + validations: + required: false + attributes: + label: "🔄️ Additional Information" + description: "A clear and concise description of any alternative solutions or additional solutions you've considered." + placeholder: "I tried, ..." + - type: checkboxes + id: no-duplicate-issues + attributes: + label: "👀 Have you spent some time to check if this feature request has been raised before?" + options: + - label: "I checked and didn't find similar issue" + required: true + - type: dropdown + id: willing-to-submit-pr + attributes: + label: Are you willing to submit PR? + description: This is absolutely not required, but we are happy to guide you in the contribution process. + options: + - "Yes I am willing to submit a PR!" + - type: checkboxes + id: terms + attributes: + label: 🧑‍⚖️ Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/julep-ai/julep/blob/dev/.github/CODE_OF_CONDUCT.md) + options: + - label: I agree to follow this project's Code of Conduct + required: true \ No newline at end of file diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md new file mode 100644 index 000000000..a7d26253a --- /dev/null +++ b/.github/SUPPORT.md @@ -0,0 +1,62 @@ +# Support for Julep + +Welcome to the Julep support page! We're here to help you with any questions or issues you may encounter while using our platform. This document outlines the various ways you can get support and engage with our community. + +## Getting Help + +### Documentation + +Our comprehensive documentation is the first place to look for answers: + +- [Explore Docs](https://docs.julep.ai) + +Here you'll find detailed guides, API references, and tutorials to help you make the most of Julep. + +### Community Support + +Join our vibrant community to get help from other users and the Julep team: + +- [Discord](https://discord.com/invite/JTSBGRZrzj): Join our Discord server for real-time chat and support. +- [GitHub Discussions](https://github.com/julep-ai/julep/discussions): Ask questions, share ideas, and discuss Julep with other developers. + +### Social Media + +Follow us on social media for updates, tips, and community highlights: + +- [𝕏 (Twitter)](https://x.com/julep_ai) +- [LinkedIn](https://www.linkedin.com/company/julep-ai) + +## Reporting Issues + +If you encounter a bug or have a feature request, please open an issue on our GitHub repository: + +- [GitHub Issues](https://github.com/julep-ai/julep/issues) + +When reporting issues, please provide as much detail as possible, including: + +- Steps to reproduce the issue +- Expected behavior +- Actual behavior +- Any error messages or logs +- Your environment (Julep version, operating system, etc.) + +## Contributing + +We welcome contributions to Julep! If you're interested in contributing, please check out our: + +- [Contributing Guidelines](https://github.com/julep-ai/julep/blob/main/CONTRIBUTING.md) +- [Code of Conduct](https://github.com/julep-ai/julep/blob/main/CODE_OF_CONDUCT.md) + +## API Keys + +While we are in beta, you can reach out on [Discord](https://discord.com/invite/JTSBGRZrzj) to get your API key. + +## Staying Updated + +To stay informed about the latest updates, features, and community news: + +- Watch our [GitHub repository](https://github.com/julep-ai/julep) +- Follow us on [𝕏 (Twitter)](https://x.com/julep_ai) +- Join our [Discord](https://discord.com/invite/JTSBGRZrzj) for announcements + +Thank you for using Julep! We're excited to see what you build with our platform. diff --git a/.github/workflows/bake-push-to-hub.yml b/.github/workflows/bake-push-to-hub.yml new file mode 100644 index 000000000..e25436c5d --- /dev/null +++ b/.github/workflows/bake-push-to-hub.yml @@ -0,0 +1,45 @@ +name: Build and push images to docker hub on merge to dev +run-name: ${{ github.actor }} is building and pushing images to docker hub + +on: + push: + branches: + - "dev" + tags: + - "v*" + release: + types: [published, released, prereleased] + +jobs: + Bake-Push-Images: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: julepai + password: "${{ secrets.DOCKER_HUB_PASSWORD }}" + + - name: Build and push agent images + uses: docker/bake-action@v5 + with: + files: | + ./docker-bake.hcl + targets: agents-api + push: true + set: | + *.cache-from=type=gha + *.cache-to=type=gha,mode=max + env: + TAG: ${{ github.ref_name }} + GIT_SHA: ${{ github.sha }} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true diff --git a/.github/workflows/bandit-security-check-python-agents-api.yml b/.github/workflows/bandit-security-check-python-agents-api.yml new file mode 100644 index 000000000..b6d4e828d --- /dev/null +++ b/.github/workflows/bandit-security-check-python-agents-api.yml @@ -0,0 +1,24 @@ +name: Bandit security check python agents-api +run-name: ${{ github.actor }} is checking the security of the code + +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' + +jobs: + bandit_check: + name: bandit check security of python code in agents-api + runs-on: ubuntu-latest + + steps: + - uses: mdegis/bandit-action@v1.0.1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + path: "./agents-api/agents_api" + level: high + confidence: high + # exit_zero: true diff --git a/.github/workflows/changelog-ci.yml b/.github/workflows/changelog-ci.yml index 2a1ab6c30..ff99828a3 100644 --- a/.github/workflows/changelog-ci.yml +++ b/.github/workflows/changelog-ci.yml @@ -1,21 +1,24 @@ -name: Changelog CI +name: Changelog on release -# TODO: This is currently not working. Need to fix it on: - pull_request: - types: [ opened, synchronize ] + release: + types: [published] jobs: - build: + changelog: runs-on: ubuntu-latest steps: # Checks-out your repository - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: dev - - name: Run Changelog CI - uses: saadmk11/changelog-ci@v1.1.2 + # Generate changelog from release notes + - uses: rhysd/changelog-from-release/action@v3 with: - changelog_filename: CHANGELOG.md - # config_file: changelog-ci-config.json + file: CHANGELOG.md github_token: ${{ secrets.GITHUB_TOKEN }} + pull_request: true + \ No newline at end of file diff --git a/.github/workflows/docker-bake-on-pr.yml b/.github/workflows/docker-bake-on-pr.yml new file mode 100644 index 000000000..2e00f0929 --- /dev/null +++ b/.github/workflows/docker-bake-on-pr.yml @@ -0,0 +1,39 @@ +name: Bake images on PR +run-name: ${{ github.actor }} is baking images + +on: + pull_request: + +jobs: + Bake-Images: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: julepai + password: "${{ secrets.DOCKER_HUB_PASSWORD }}" + + - name: Bake images + uses: docker/bake-action@v5 + with: + files: | + ./docker-bake.hcl + targets: agents-api + push: false + set: | + *.cache-from=type=gha + *.cache-to=type=gha,mode=max + env: + TAG: pr-run-${{ github.run_number }}-${{ github.run_attempt }} + GIT_SHA: ${{ github.sha }} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} diff --git a/.github/workflows/doctoc-on-push.yml b/.github/workflows/doctoc-on-push.yml new file mode 100644 index 000000000..c0dfdf2c6 --- /dev/null +++ b/.github/workflows/doctoc-on-push.yml @@ -0,0 +1,14 @@ +on: push + +name: TOC Generator +jobs: + generateTOC: + name: TOC Generator + runs-on: ubuntu-latest + steps: + - uses: technote-space/toc-generator@v4 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAX_HEADER_LEVEL: 3 + TOC_TITLE: '

📖 Table of Contents

' + FOLDING: true diff --git a/.github/workflows/generate-docs.yml b/.github/workflows/generate-docs.yml deleted file mode 100644 index 9c6952e6e..000000000 --- a/.github/workflows/generate-docs.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: Generate docs on merge to dev -run-name: ${{ github.actor }} is generating documentation - -# TODO: This is currently not working. Need to fix it -on: - push: - branches: - - "dev" - - "main" - -jobs: - Generate-Docs-For-TS-SDK: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: "20.x" - - - name: Cache npm dependencies - uses: actions/cache@v4 - with: - path: sdks/ts/node_modules - key: ${{ runner.os }}-sdks-ts-npm-${{ hashFiles('sdks/ts/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-sdks-ts-npm- - - - name: Install npm dependencies - run: | - cd sdks/ts - npm ci - - - name: Generate docs - run: | - cd sdks/ts - npm run generate-docs - - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "doc(sdks/ts): Generate docs for sdks/ts (CI)" - branch: ${{ github.head_ref }} - - Generate-Docs-For-Python-SDK: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: "3.10" - - - name: Install and configure Poetry - uses: snok/install-poetry@v1 - - - name: Configure Poetry to use .venv - run: | - cd sdks/python - poetry config virtualenvs.in-project true - - - name: Cache Poetry virtualenv - uses: actions/cache@v4 - with: - path: sdks/python/.venv - key: ${{ runner.os }}-sdks-python-poetry-${{ hashFiles('sdks/python/poetry.lock') }} - restore-keys: | - ${{ runner.os }}-sdks-python-poetry- - - - name: Cache pytype - uses: actions/cache@v4 - with: - path: sdks/python/.pytype - key: ${{ runner.os }}-sdks-python-pytype-${{ hashFiles('sdks/python/**/*.py') }} - restore-keys: | - ${{ runner.os }}-sdks-python-pytype- - - - name: Install dependencies - run: | - cd sdks/python - poetry install - - - name: Generate docs - run: | - cd sdks/python - poetry run poe doc - - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "doc(sdks/python): Generate docs for sdks/python (CI)" - branch: ${{ github.head_ref }} - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true diff --git a/.github/workflows/latest-push-to-hub.yml b/.github/workflows/latest-push-to-hub.yml new file mode 100644 index 000000000..3853a8faa --- /dev/null +++ b/.github/workflows/latest-push-to-hub.yml @@ -0,0 +1,41 @@ +name: Build and push images to docker hub on merge to main +run-name: ${{ github.actor }} is building and pushing images to docker hub + +on: + push: + branches: + - "main" + +jobs: + Bake-Push-Images: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: julepai + password: "${{ secrets.DOCKER_HUB_PASSWORD }}" + + - name: Build and push agent images + uses: docker/bake-action@v5 + with: + files: | + ./docker-bake.hcl + targets: agents-api + push: true + set: | + *.cache-from=type=gha + *.cache-to=type=gha,mode=max + env: + TAG: latest + GIT_SHA: ${{ github.sha }} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} \ No newline at end of file diff --git a/.github/workflows/lint-agents-api-pr.yml b/.github/workflows/lint-agents-api-pr.yml new file mode 100644 index 000000000..3721a8b59 --- /dev/null +++ b/.github/workflows/lint-agents-api-pr.yml @@ -0,0 +1,57 @@ +name: Lint agents-api +run-name: ${{ github.actor }} is linting the code + +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' + +jobs: + Lint-And-Format: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + + - name: Configure Poetry to use .venv + run: | + cd agents-api + poetry config virtualenvs.in-project true + + - name: Cache Poetry virtualenv + uses: actions/cache@v4 + with: + path: agents-api/.venv + key: ${{ runner.os }}-agents-api-poetry-${{ hashFiles('agents-api/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-agents-api-poetry- + + - name: Install dependencies + run: | + cd agents-api + poetry install + + - name: Lint and format + run: | + cd agents-api + poetry run poe format + poetry run poe lint + + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "refactor: Lint agents-api (CI)" + branch: ${{ github.head_ref }} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/.github/workflows/lint-and-format.yml b/.github/workflows/lint-and-format.yml deleted file mode 100644 index 27cfa2d9e..000000000 --- a/.github/workflows/lint-and-format.yml +++ /dev/null @@ -1,110 +0,0 @@ -name: Lint and typecheck APIs and SDKs -run-name: ${{ github.actor }} is linting and typechecking the code - -# TODO: Fix CI github actions -# SCRUM-26 - -on: [pull_request] - -jobs: - Lint-And-Format: - runs-on: ubuntu-latest - - strategy: - matrix: - directory: [agents-api, sdks/python] - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: "3.10" - - - name: Install and configure Poetry - uses: snok/install-poetry@v1 - - - name: Configure Poetry to use .venv - run: | - cd ${{ matrix.directory }} - poetry config virtualenvs.in-project true - - - name: Cache Poetry virtualenv - uses: actions/cache@v4 - with: - path: ${{ matrix.directory }}/.venv - key: ${{ runner.os }}-${{ matrix.directory }}-poetry-${{ hashFiles(format('{0}/poetry.lock', matrix.directory)) }} - restore-keys: | - ${{ runner.os }}-${{ matrix.directory }}-poetry- - - - name: Cache pytype - uses: actions/cache@v4 - with: - path: ${{ matrix.directory }}/.pytype - key: ${{ runner.os }}-${{ matrix.directory }}-pytype-${{ hashFiles(format('{0}/**/*.py', matrix.directory)) }} - restore-keys: | - ${{ runner.os }}-${{ matrix.directory }}-pytype- - - - name: Install dependencies - run: | - cd ${{ matrix.directory }} - poetry install - - - name: Lint and format - run: | - cd ${{ matrix.directory }} - poetry run poe format - poetry run poe lint - - - name: Typecheck - run: | - cd ${{ matrix.directory }} - poetry run poe typecheck - - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "refactor: Lint ${{ matrix.directory }} (CI)" - branch: ${{ github.head_ref }} - - Lint-And-Format-TS-SDK: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: "20.x" - - - name: Cache npm dependencies - uses: actions/cache@v4 - with: - path: sdks/ts/node_modules - key: ${{ runner.os }}-sdks-ts-npm-${{ hashFiles('sdks/ts/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-sdks-ts-npm- - - - name: Install npm dependencies - run: | - cd sdks/ts - npm ci - - - name: Lint and format TypeScript SDK - run: | - cd sdks/ts - npm run format - - - name: Build TypeScript SDK - run: | - cd sdks/ts - npm run build - - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: "refactor: Lint sdks/ts (CI)" - branch: ${{ github.head_ref }} - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/.github/workflows/push-to-hub.yml b/.github/workflows/push-to-hub.yml deleted file mode 100644 index ee848d755..000000000 --- a/.github/workflows/push-to-hub.yml +++ /dev/null @@ -1,163 +0,0 @@ -name: Build and push images to docker hub on merge to dev -run-name: ${{ github.actor }} is building and pushing images to docker hub - -# TODO: This is currently not working. Need to fix it -on: - push: - branches: - - "dev" - - "main" - -jobs: - Build-Push-Agents-API-Image: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set branch name - id: variables - run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: julepai - password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - - - name: Build and push agent images - uses: docker/build-push-action@v4 - with: - context: ./agents-api - file: ./agents-api/Dockerfile - push: true - tags: julepai/agents-api:${{ steps.variables.outputs.branch_name }} - cache-from: type=gha - cache-to: type=gha,mode=max - - Build-Push-Migration-Image: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set branch name - id: variables - run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: julepai - password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - - - name: Build and push migration image - uses: docker/build-push-action@v4 - with: - context: ./agents-api - file: ./agents-api/Dockerfile.migration - push: true - tags: julepai/cozo-migrate:${{ steps.variables.outputs.branch_name }} - cache-from: type=gha - cache-to: type=gha,mode=max - - Build-Push-Temporal-Image: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set branch name - id: variables - run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: julepai - password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - - - name: Build and push temporal image - uses: docker/build-push-action@v4 - with: - context: ./agents-api - file: ./agents-api/Dockerfile.temporal - push: true - tags: julepai/temporal:${{ steps.variables.outputs.branch_name }} - cache-from: type=gha - cache-to: type=gha,mode=max - - Build-Push-Worker-Image: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set branch name - id: variables - run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: julepai - password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - - - name: Build and push worker image - uses: docker/build-push-action@v4 - with: - context: ./agents-api - file: ./agents-api/Dockerfile.worker - push: true - tags: julepai/worker:${{ steps.variables.outputs.branch_name }} - cache-from: type=gha - cache-to: type=gha,mode=max - - Build-Push-Other-Images: - runs-on: ubuntu-latest - strategy: - matrix: - service-directory: - - gateway - - memory-store - - steps: - - uses: actions/checkout@v4 - - - name: Set branch name - id: variables - run: echo "branch_name=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')" >> $GITHUB_OUTPUT - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: julepai - password: "${{ secrets.DOCKER_HUB_PASSWORD }}" - - - name: Build and push images - uses: docker/build-push-action@v4 - with: - context: ./${{ matrix.service-directory }} - push: true - tags: julepai/${{ matrix.service-directory }}:${{ steps.variables.outputs.branch_name }} - cache-from: type=gha - cache-to: type=gha,mode=max - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/.github/workflows/test-agents-api-pr.yml b/.github/workflows/test-agents-api-pr.yml new file mode 100644 index 000000000..95e676657 --- /dev/null +++ b/.github/workflows/test-agents-api-pr.yml @@ -0,0 +1,51 @@ +name: Test agents-api +run-name: ${{ github.actor }} is testing the code + +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' + +jobs: + Test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + + - name: Configure Poetry to use .venv + run: | + cd agents-api + poetry config virtualenvs.in-project true + + - name: Cache Poetry virtualenv + uses: actions/cache@v4 + with: + path: agents-api/.venv + key: ${{ runner.os }}-agents-api-poetry-${{ hashFiles('agents-api/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-agents-api-poetry- + + - name: Install dependencies + run: | + cd agents-api + poetry install + + - name: Run tests + run: | + cd agents-api + poetry run poe test --fail-limit 1 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/.github/workflows/translate-readme.yml b/.github/workflows/translate-readme.yml new file mode 100644 index 000000000..57a7c8ade --- /dev/null +++ b/.github/workflows/translate-readme.yml @@ -0,0 +1,38 @@ +name: Translate ReadME + +on: + push: + paths: + - "README.md" + +jobs: + readme-translator: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Setup Python v3.10.12 + uses: actions/setup-python@v5 + with: + python-version: "3.10.12" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install deep-translator git+https://github.com/Jwink3101/parmapper + + - name: Run translator script + run: python scripts/readme_translator.py + + - name: Commit changes + run: | + git config --global user.name 'github-actions[bot]' + git config --global user.email 'github-actions[bot]@users.noreply.github.com' + git add README-*.md + git commit -m "chore(readme): translate README.md" + + - name: Push changes + uses: ad-m/github-push-action@v0.6.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + branch: ${{ github.ref }} diff --git a/.github/workflows/typecheck-agents-api-pr.yml b/.github/workflows/typecheck-agents-api-pr.yml new file mode 100644 index 000000000..9fbc5d95c --- /dev/null +++ b/.github/workflows/typecheck-agents-api-pr.yml @@ -0,0 +1,59 @@ +name: Typecheck agents-api +run-name: ${{ github.actor }} is typechecking the code + +on: + pull_request: + paths: + - 'agents-api/**' + push: + paths: + - 'agents-api/**' + +jobs: + Typecheck: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + + - name: Configure Poetry to use .venv + run: | + cd agents-api + poetry config virtualenvs.in-project true + + - name: Cache Poetry virtualenv + uses: actions/cache@v4 + with: + path: agents-api/.venv + key: ${{ runner.os }}-agents-api-poetry-${{ hashFiles('agents-api/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-agents-api-poetry- + + - name: Cache pytype + uses: actions/cache@v4 + with: + path: agents-api/.pytype + key: ${{ runner.os }}-agents-api-pytype-${{ github.base_ref }} + restore-keys: | + ${{ runner.os }}-agents-api-pytype- + + - name: Install dependencies + run: | + cd agents-api + poetry install + + - name: Typecheck + run: | + cd agents-api + poetry run poe typecheck + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} diff --git a/.gitmodules b/.gitmodules index e69de29bb..0f808e530 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "sdks/node-sdk"] + path = sdks/node-sdk + url = https://github.com/julep-ai/node-sdk.git +[submodule "sdks/python-sdk"] + path = sdks/python-sdk + url = https://github.com/julep-ai/python-sdk.git diff --git a/CHANGELOG.md b/CHANGELOG.md index b4e401ad5..80bdebaed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,15 +1,288 @@ -# TODO: Update changelog -# SCRUM-29 + +# [v1.0.0-alpha1](https://github.com/julep-ai/julep/releases/tag/v1.0.0-alpha1) - 30 Sep 2024 -# Changelog +## What's Changed +* doc: v1.0 docs by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/527 +* feat: Update README social banner and bake-push-to-hub.yml by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/537 -All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +**Full Changelog**: https://github.com/julep-ai/julep/compare/v0.4.1...v1.0.0-alpha1 -## [Unreleased] +[Changes][v1.0.0-alpha1] -### Added -- v0.2 agents platform + +# [v0.4.1](https://github.com/julep-ai/julep/releases/tag/v0.4.1) - 28 Sep 2024 + +## What's Changed +* Update changelog for v0.4.0 by [@github-actions](https://github.com/github-actions) in https://github.com/julep-ai/julep/pull/531 +* fix: Bake on release as well by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/532 + +## New Contributors +* [@github-actions](https://github.com/github-actions) made their first contribution in https://github.com/julep-ai/julep/pull/531 + +**Full Changelog**: https://github.com/julep-ai/julep/compare/v0.4.0...v0.4.1 + +[Changes][v0.4.1] + + + +# [v0.4.0](https://github.com/julep-ai/julep/releases/tag/v0.4.0) - 28 Sep 2024 + +## What's Changed +* feat(agents-api): Add cozo migrations for tasks schema by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/349 +* feat(agents-api): updated openapi schema for tasks spec by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/350 +* Update README.md by [@ijindal1](https://github.com/ijindal1) in https://github.com/julep-ai/julep/pull/384 +* Update README.md by [@ijindal1](https://github.com/ijindal1) in https://github.com/julep-ai/julep/pull/385 +* feat(agents-api): cozo queries for tasks by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/352 +* fix(sdks/ts): Fixed bugs, updated sdk by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/390 +* feat(agents-api): Toy implementation of Tasks by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/391 +* feat(agents-api): Adaptive context (via recursive summarization) by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/306 +* chore(deps-dev): bump braces from 3.0.2 to 3.0.3 in /sdks/ts in the npm_and_yarn group across 1 directory by [@dependabot](https://github.com/dependabot) in https://github.com/julep-ai/julep/pull/394 +* v/0.3.9 by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/395 +* feat(tasks): Enable all fields of ExecutionInput by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/396 +* feat(tasks): Update execution transition relation by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/397 +* fix: Handle prompt too big error by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/401 +* feat(sdks/ts): Add adaptive context options to the SDK by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/404 +* feat(sdks/ts): Add runtime validations for TS SDK by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/425 +* refactor(agents-api): Rework routers to split routes into individual files by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/422 +* support for `Hermes-2-Theta-Llama-3-8B` as default OSS model by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/424 +* fix: Add exception handler for litellm API error by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/432 +* fix(openapi): Fix mistakes in openapi.yaml file by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/434 +* fix: Apply various small fixes to task execution logic by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/436 +* Codegen for all new typespec types by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/435 +* feat(agents-api): New chat context query and model by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/437 +* feat(agents-api): Add get_transition query by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/438 +* chore: Disable all the routes except of tasks and agents by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/439 +* fix(agents-api): Fix execution input query by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/440 +* f/wait for input step by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/441 +* feat(agents-api): Implement doc* models by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/442 +* Reimplement tests for queries and operations by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/443 +* feat(agents-api): Hybrid docs search by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/444 +* feat(agents-api): Add temporal workflow lookup relation and queries by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/446 +* feat: new routes for docs, users, search by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/445 +* feat(agents-api): Add litellm proxy to docker compose by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/448 +* fix(agents-api): Fixed tests for models and queries by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/449 +* creatorrr/f add missing tests by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/450 +* feat(agents-api): Add route tests by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/451 +* Add tests for docs routes by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/452 +* feat(agents-api): Preliminary implementation of session.chat by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/453 +* feat(agents-api): Make chat route tests pass by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/454 +* feat(agents-api): Add some workflow tests by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/456 +* fix(agents-api): Minor fix to tests by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/457 +* f/task tests by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/458 +* feat(agents-api): ALL TESTS PASS!! :D by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/459 +* feat: Add test for evaluate step by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/460 +* fix(agents-api): Fix typespec for foreach step and regenerate by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/461 +* fix(agents-api): Fix the typespec bug and regenerate by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/462 +* x/fix codec by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/463 +* feat(agents-api): Add YAML support by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/464 +* refactor(agents-api): Minor refactors to typespec types by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/465 +* fix(agents-api): Fix map reduce step and activity by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/466 +* fix(agents-api): Make the sample work by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/467 +* Dev tasks by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/447 +* fix: Build cozo-bin docker image directly from cozo repo by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/469 +* feat(memory-store): Add backup cronjob by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/470 +* fix: Fix deployment docker compose and move temporal into separate service by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/471 +* fix(agents-api): Fix prompt step by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/472 +* fix(agents-api): Fix task execution logic by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/473 +* Fix create agent tool by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/474 +* fix(agents-api): Fix bug in task-execution workflow and uuid-int-list-to-str fn by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/476 +* fix(agents-api): Fix prompt render, codec and task execution by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/478 +* fix(agents-api): Fix more render issues, execution logic by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/479 +* x/fix task execution by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/482 +* text-embeddings-inference-cpu temp fix for Apple Silicon CPUs by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/480 +* fix(agents-api): Fix task execution logical errors by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/483 +* feat(agents-api): Transitions stream SSE endpoint by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/485 +* feat(agents-api): Set/get steps based on workflow state by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/484 +* Scrum 22 [FIX] agents api list agent tools is returning an empty list by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/487 +* fix(agents-api,typespec): Fix chat/entry typespec models to include tool_calls by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/489 +* fix: Change log-step to a jinja template rather than a simpleeval expression by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/488 +* feat(agents-api): Add parallelism option to map-reduce step by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/490 +* fix: Fix import by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/494 +* misc fixes by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/495 +* build(deps): Bump the npm_and_yarn group across 2 directories with 2 updates by [@dependabot](https://github.com/dependabot) in https://github.com/julep-ai/julep/pull/493 +* hotfix: Apply a temp hotfix for sessions.chat by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/497 +* hotfix(agents-api): Fix session.situation not being rendered by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/499 +* feat: Add agent tools to completion data before sending to litellm in prompt by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/498 +* dev -> main by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/502 +* fix(agents-api): fix create_agent and create_or_update_agent query by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/503 +* fix(llm-proxy): Update docker image to main-v1.46.2 by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/504 +* Add custom api key support to chat endpoint by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/507 +* fix(agents-api): Fix doc recall using search by text by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/506 +* docs: update api.md by [@eltociear](https://github.com/eltociear) in https://github.com/julep-ai/julep/pull/508 +* fix: Get PostgreSQL settings via env vars by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/509 +* main <- dev by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/511 +* Vertex AI client by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/510 +* fix: Retry worker on runtime errors by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/512 +* dev -> main by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/514 +* Implement ToolCallStep & Fix transition after PromptStep by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/513 +* doc: Update README.md with announcement update by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/517 +* feat: Add basic support for integration tools to ToolStep by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/519 +* feat(integration-service): Add integrations service by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/520 +* feat(agents-api,integrations): Working integrations for tool-call step by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/521 +* fix(agents-api): Fix wait for input step by [@HamadaSalhab](https://github.com/HamadaSalhab) in https://github.com/julep-ai/julep/pull/522 +* feat(agents-api): Add support for reading setup args from metadata and Upgrade to python 3.12 by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/525 +* feat: Add docker bake builder by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/528 +* fix: Minor fix to docker bake github actions by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/529 +* feat: Add changelog from release notes by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/530 + +## New Contributors +* [@ijindal1](https://github.com/ijindal1) made their first contribution in https://github.com/julep-ai/julep/pull/384 +* [@HamadaSalhab](https://github.com/HamadaSalhab) made their first contribution in https://github.com/julep-ai/julep/pull/474 +* [@eltociear](https://github.com/eltociear) made their first contribution in https://github.com/julep-ai/julep/pull/508 + +**Full Changelog**: https://github.com/julep-ai/julep/compare/v0.3.4...v0.4.0 + +[Changes][v0.4.0] + + + +# [v0.3.4](https://github.com/julep-ai/julep/releases/tag/v0.3.4) - 31 May 2024 + +## What's Changed +* feat: Implement filtering by metadata by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/337 +* session.chat working without specifying user by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/338 +* feat: Cache generated responses by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/336 +* Add docs-text-embeddings-inference service to deploy/docker-compose.yml by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/339 +* add missing ports and volumes in deploy/docker-compose by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/341 +* feat: Add launching entry point by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/334 +* feat: Add an explicit platform declaration to the services in deploy/docker-compose.yml by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/342 +* [wip] feat(agents-api,sdks): multimodal support by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/343 +* fix(sdks/ts): Fix codegen issue by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/374 +* Version 0.3.4 by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/375 +* fix: Convert messages content to JSON by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/376 +* fix: Convert IDs to UUID before passing to query executing functions by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/377 +* fix(agents-api): fix fn calling and local deployment by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/378 +* feat: Improve typehints by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/379 + + +**Full Changelog**: https://github.com/julep-ai/julep/compare/v0.3.3...v0.3.4 + +[Changes][v0.3.4] + + + +# [v0.3.3](https://github.com/julep-ai/julep/releases/tag/v0.3.3) - 17 May 2024 + +## What's Changed +* fix: Add summarizer source type to the query by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/301 +* fix: Get summarization model form env var and create a corresponsing … by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/302 +* feat: Make docs content be splited by users by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/303 +* feat: litellm for multiple model support by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/304 +* use VALID_MODELS to support JULEP_MODELS by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/308 +* Agent creation fixes by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/309 +* feat: Add new agents docs embbeddings functionality by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/305 +* Fix docs search by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/311 +* Make embeddings asynchronous using temporal by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/332 +* feat: Add doc IDs to the session chat response by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/331 +* chore: Update SDKs by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/333 + + +**Full Changelog**: https://github.com/julep-ai/julep/compare/v0.3.2...v0.3.3 + +[Changes][v0.3.3] + + + +# [v0.3.2](https://github.com/julep-ai/julep/releases/tag/v0.3.2) - 27 Apr 2024 + +- Initial github release + +## What's Changed +* fix(python-sdk): temporarily remove async types by [@philipbalbas](https://github.com/philipbalbas) in https://github.com/julep-ai/julep/pull/196 +* fix: Set empty string as a default value for function description by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/195 +* feat: exception handling for api keys and models by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/197 +* feat: Create and push docker images to hub by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/198 +* fix: Sessions update by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/201 +* fix: Sessions update by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/202 +* feat(sdk): update tools by [@philipbalbas](https://github.com/philipbalbas) in https://github.com/julep-ai/julep/pull/206 +* fix: Merge agent and user metadata by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/204 +* fix: Display agent instructions by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/205 +* fix: Disable model-serving by default by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/207 +* fix: patch fix for function calling by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/203 +* remove model surgery notebooks by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/208 +* feat: Create github action changelog-ci.yml by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/209 +* Sweep: Add a detailed README.md in the memory-store/ directory by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/214 +* fix: Display agent instructions by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/216 +* Sweep: Add a detailed README.md in the examples/ directory by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/215 +* fix: Set metadata to an empty dict by default by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/217 +* Sweep: Update the docstrings and comments in sdks/ts/src/env.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/235 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/memory.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/236 +* Sweep: Update the docstrings and comments in sdks/ts/src/utils/invariant.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/237 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/agent.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/238 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/tool.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/239 +* Sweep: Update the docstrings and comments in sdks/ts/src/utils/isValidUuid4.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/240 +* Sweep: Update the docstrings and comments in sdks/ts/src/client.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/241 +* Sweep: Update the docstrings and comments in sdks/ts/src/utils/requestConstructor.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/242 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/base.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/243 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/user.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/244 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/session.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/245 +* Sweep: Update the docstrings and comments in sdks/ts/src/utils/openaiPatch.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/246 +* Sweep: Update the docstrings and comments in sdks/ts/src/managers/doc.ts to fix any issues and mismatch between the comment and associated code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/247 +* doc(sdks/ts): Generate documentation for the typescript SDK by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/248 +* Sweep: Update the docstrings and comments in sdks/python/julep/env.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/262 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/memory.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/271 +* Sweep: Update the docstrings and comments in sdks/python/julep/utils/openai_patch.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/270 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/base.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/263 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/types.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/269 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/utils.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/268 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/tool.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/267 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/doc.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/266 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/session.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/265 +* Sweep: Update the docstrings and comments in sdks/python/julep/managers/agent.py to fix any issues and mismatch between the comments present and surrounding code by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/264 +* refactor(agents-api): Add decorator to wrap cozo queries inside and execute by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/273 +* feat: update python sdk docs by [@philipbalbas](https://github.com/philipbalbas) in https://github.com/julep-ai/julep/pull/272 +* fix: Set default values for function description and parameters by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/274 +* feat(openapi): Update spec to include role=function + render_templates by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/276 +* docs: update SUMMARY.md by [@philipbalbas](https://github.com/philipbalbas) in https://github.com/julep-ai/julep/pull/281 +* chore(deps): bump fastapi from 0.109.2 to 0.110.1 in /agents-api in the pip group across 1 directory by [@dependabot](https://github.com/dependabot) in https://github.com/julep-ai/julep/pull/280 +* chore(deps): bump idna from 3.6 to 3.7 in /memory-store/backup by [@dependabot](https://github.com/dependabot) in https://github.com/julep-ai/julep/pull/278 +* chore(deps): bump follow-redirects from 1.15.5 to 1.15.6 in /sdks/ts by [@dependabot](https://github.com/dependabot) in https://github.com/julep-ai/julep/pull/277 +* F/update julep docs by [@philipbalbas](https://github.com/philipbalbas) in https://github.com/julep-ai/julep/pull/282 +* fix: Fix queries calls by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/283 +* Sweep: Create CONTRIBUTING.md based on README.md in the root / directory by [@sweep-ai](https://github.com/sweep-ai) in https://github.com/julep-ai/julep/pull/285 +* feat: added docker-compose.yml and .env.example for self-hosting by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/286 +* fix: Set default value for user's about text by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/287 +* fix: Update sessions with given IDs only by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/290 +* F/readme update by [@alt-glitch](https://github.com/alt-glitch) in https://github.com/julep-ai/julep/pull/291 +* feat: Truncate messages by [@whiterabbit1983](https://github.com/whiterabbit1983) in https://github.com/julep-ai/julep/pull/294 +* x/fix python sdk by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/296 +* feat(agents-api): Allow single instructions str for agents by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/297 +* fix: Session.user_id should be optional by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/298 +* feat(agents-api): Add jinja templates support by [@creatorrr](https://github.com/creatorrr) in https://github.com/julep-ai/julep/pull/300 + +## New Contributors +* [@dependabot](https://github.com/dependabot) made their first contribution in https://github.com/julep-ai/julep/pull/280 + +**Full Changelog**: https://github.com/julep-ai/julep/commits/v0.3.2 + +[Changes][v0.3.2] + + + +# [v0.3.0](https://github.com/julep-ai/julep/releases/tag/v0.3.0) - 27 Apr 2024 + + + +[Changes][v0.3.0] + + + +# [v0.2.12](https://github.com/julep-ai/julep/releases/tag/v0.2.12) - 27 Apr 2024 + + + +[Changes][v0.2.12] + + +[v1.0.0-alpha1]: https://github.com/julep-ai/julep/compare/v0.4.1...v1.0.0-alpha1 +[v0.4.1]: https://github.com/julep-ai/julep/compare/v0.4.0...v0.4.1 +[v0.4.0]: https://github.com/julep-ai/julep/compare/v0.3.4...v0.4.0 +[v0.3.4]: https://github.com/julep-ai/julep/compare/v0.3.3...v0.3.4 +[v0.3.3]: https://github.com/julep-ai/julep/compare/v0.3.2...v0.3.3 +[v0.3.2]: https://github.com/julep-ai/julep/compare/v0.3.0...v0.3.2 +[v0.3.0]: https://github.com/julep-ai/julep/compare/v0.2.12...v0.3.0 +[v0.2.12]: https://github.com/julep-ai/julep/tree/v0.2.12 + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7081a266d..a7cda8b06 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,6 +22,115 @@ To contribute code changes: Please ensure your code follows the existing style and passes all tests. +## Project Overview and Architecture + +### Key Components + +1. **agents-api**: The core API service for Julep. +2. **typespec**: API specifications and contracts. +3. **integrations-service**: Handles external integrations. +4. **embedding-service**: Manages text embeddings. +5. **memory-store**: Handles persistent storage. +6. **llm-proxy**: Proxy for language model interactions. +7. **scheduler**: Manages task scheduling. +8. **gateway**: API gateway and routing. +9. **monitoring**: System monitoring and metrics. + +### Technology Stack + +- **FastAPI**: Web framework for building APIs +- **TypeSpec**: API specification language +- **Cozo**: Database system +- **Temporal**: Workflow engine +- **Docker**: Containerization + +### Relationships Between Components + +The `agents-api` serves as the central component, interacting with most other services: +- It uses `typespec` definitions for API contracts. +- Communicates with `integrations-service` for external tool interactions. +- Utilizes `embedding-service` for text processing. +- Stores data in `memory-store`. +- Interacts with language models through `llm-proxy`. +- Uses `scheduler` for task management. +- All API requests pass through the `gateway`. +- `monitoring` observes the entire system. + +## Understanding the Codebase + +To get a comprehensive understanding of Julep, we recommend exploring the codebase in the following order: + +1. **Project Overview** + - Read `README.md` in the root directory + - Explore `docs/` for detailed documentation + +2. **System Architecture** + - Examine `docker-compose.yml` in the root directory + - Review `deploy/` directory for different deployment configurations + +3. **API Specifications** + - Learn about TypeSpec: https://typespec.io/docs/ + - Explore `typespec/` directory: + - Start with `common/` folder + - Review `main.tsp` + - Examine each module sequentially + +4. **Core API Implementation** + - Learn about FastAPI: https://fastapi.tiangolo.com/ + - Explore `agents-api/` directory: + - Review `README.md` for an overview + - Examine `routers/` for API endpoints + - Look into `models/` for data models + +5. **Database and Storage** + - Learn about Cozo: https://docs.cozodb.org/en/latest/tutorial.html + - Review `agents-api/README.md` for database schema + - Explore `agents-api/models/` for database queries + +6. **Workflow Management** + - Learn about Temporal: https://docs.temporal.io/develop/python + - Explore `agents-api/activities/` for individual workflow steps + - Review `agents-api/workflows/task_execution/` for main workflow logic + +7. **Testing** + - Examine `agents-api/tests/` for test cases + +8. **Additional Services** + - Explore other service directories (`integrations-service/`, `embedding-service/`, etc.) to understand their specific roles and implementations + +## Contributing Guidelines + +1. **Set Up Development Environment** + - Clone the repository + - Install Docker and Docker Compose + - Set up necessary API keys and environment variables + +2. **Choose an Area to Contribute** + - Check the issue tracker for open issues + - Look for "good first issue" labels for newcomers + +3. **Make Changes** + - Create a new branch for your changes + - Write clean, well-documented code + - Ensure your changes adhere to the project's coding standards + +4. **Test Your Changes** + - Run existing tests + - Add new tests for new functionality + - Ensure all tests pass before submitting your changes + +5. **Submit a Pull Request** + - Provide a clear description of your changes + - Reference any related issues + - Be prepared to respond to feedback and make adjustments + +6. **Code Review** + - Address any comments or suggestions from reviewers + - Make necessary changes and push updates to your branch + +7. **Merge** + - Once approved, your changes will be merged into the main branch + ### Documentation Improvements Improvements to documentation are always appreciated! If you see areas that could be clarified or expanded, feel free to make the changes and submit a pull request. @@ -30,4 +139,75 @@ Improvements to documentation are always appreciated! If you see areas that coul We'd love to hear your feedback and ideas for the project! Feel free to submit an issue or contact the maintainers directly to share your thoughts. Your input is very valuable in shaping the future direction of the project. -Thank you for your interest in contributing to this project! \ No newline at end of file +### Setup Instructions + +##### 1. Clone the Repository +Clone the repository from your preferred source: + +```bash +git clone +``` + +##### 2. Navigate to the Root Directory +Change to the root directory of the project: + +```bash +cd +``` + +##### 3. Set Up Environment Variables +- Create a `.env` file in the root directory. +- Refer to the `.env.example` file for a list of required variables. +- Ensure that all necessary variables are set in the `.env` file. + +##### 4. Create a Docker Volume for Backup +Create a Docker volume named `cozo_backup`: + +```bash +docker volume create cozo_backup +``` + +##### 5. Run the Project using Docker Compose +You can run the project in two different modes: **Single Tenant** or **Multi-Tenant**. Choose one of the following commands based on your requirement: + +###### Single-Tenant Mode +Run the project in single-tenant mode: + +```bash +docker compose --env-file .env --profile temporal-ui --profile single-tenant --profile embedding-cpu --profile self-hosted-db up --force-recreate --build --watch +``` + +> **Note:** In single-tenant mode, you can interact with the SDK directly without the need for the API KEY. + +###### Multi-Tenant Mode +Run the project in multi-tenant mode: + +```bash +docker compose --env-file .env --profile temporal-ui --profile multi-tenant --profile embedding-cpu --profile self-hosted-db up --force-recreate --build --watch +``` + +> **Note:** In multi-tenant mode, you need to generate a JWT token locally that act as an API KEY to interact with the SDK. + +##### 6. Generate a JWT Token (Only for Multi-Tenant Mode) + +To generate a JWT token, `jwt-cli` is required. Kindly install the same before proceeding with the next steps. + +Use the following command and replace `JWT_SHARED_KEY` with the corresponding key from your `.env` file to generate a JWT token: + +```bash +jwt encode --secret JWT_SHARED_KEY --alg HS512 --exp=$(date -j -v +10d +%s) --sub '00000000-0000-0000-0000-000000000000' '{}' +``` + +This command generates a JWT token that will be valid for 10 days. + +##### 7. Access and Interact +- **Temporal UI**: You can access the Temporal UI through the specified port in your `.env` file. +- **API Interactions**: Depending on the chosen mode, interact with the setup using the provided endpoints. + +##### Troubleshooting +- Ensure that all required Docker images are available. +- Check for missing environment variables in the `.env` file. +- Use the `docker compose logs` command to view detailed logs for debugging. + + +Remember, contributions aren't limited to code. Documentation improvements, bug reports, and feature suggestions are also valuable contributions to the project. diff --git a/IDEAS.md b/IDEAS.md new file mode 100644 index 000000000..83d6d58d4 --- /dev/null +++ b/IDEAS.md @@ -0,0 +1,1377 @@ +# Expanded Implementation Scenarios for Julep + +Below are detailed implementation plans for each of the 50 scenarios using Julep's **docs**, **sessions**, **tasks**, and **executions** features. Each scenario includes a complexity rating from **1 (easiest)** to **5 (most complex)**. + +--- + +### 1. Automated Customer Support Agent + +**Implementation Using Julep:** + +- **Docs:** + - Store customer data, FAQs, and troubleshooting guides. + - Integrate CRM documentation for accessing and updating customer information. + +- **Sessions:** + - Create a persistent session for each customer to maintain conversation context. + - Track interaction history to personalize support. + +- **Tasks:** + - Define tasks for handling common inquiries (e.g., order status, billing issues). + - Implement escalation tasks for complex issues that require human intervention. + - Automate ticket creation and update processes. + +- **Executions:** + - Execute tasks based on customer inputs. + - Monitor task executions to ensure timely responses and issue resolutions. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integrating with external CRM systems, handling diverse query types, and maintaining contextual sessions, which increases complexity. + +--- + +### 2. Smart Research Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store access to academic databases and research papers. + - Include summarization templates and research methodologies. + +- **Sessions:** + - Manage user-specific research sessions to track ongoing projects and queries. + - Maintain context for multi-step research tasks. + +- **Tasks:** + - Create tasks for searching databases, summarizing articles, and compiling reports. + - Implement conditional steps based on research findings. + +- **Executions:** + - Execute research tasks sequentially or in parallel. + - Stream execution results to provide real-time updates to the user. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with academic databases, advanced summarization capabilities, and managing complex multi-step workflows. + +--- + +### 3. Personal Finance Manager + +**Implementation Using Julep:** + +- **Docs:** + - Store user financial data, budgeting templates, and investment information. + - Integrate banking API documentation for transaction fetching. + +- **Sessions:** + - Create persistent sessions to track user financial activities over time. + - Maintain context for budgeting goals and financial plans. + +- **Tasks:** + - Define tasks for expense tracking, budget creation, and investment monitoring. + - Automate alerts for budget limits and investment opportunities. + +- **Executions:** + - Execute financial tasks based on user interactions and predefined schedules. + - Monitor executions to provide real-time financial advice and updates. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Needs secure integration with banking APIs, real-time data processing, and robust budgeting logic. + +--- + +### 4. Content Creation Workflow + +**Implementation Using Julep:** + +- **Docs:** + - Store SEO guidelines, content templates, and style guides. + - Include access to keyword research tools. + +- **Sessions:** + - Manage content creation sessions to track progress and drafts. + - Maintain context for ongoing content projects. + +- **Tasks:** + - Create multi-step tasks for topic ideation, content drafting, SEO optimization, and scheduling. + - Integrate tools for grammar checking and SEO analysis. + +- **Executions:** + - Automate the execution of content creation tasks. + - Schedule publishing according to editorial calendars. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves coordinating multiple tools and steps but remains manageable with clear task definitions. + +--- + +### 5. E-commerce Order Processing System + +**Implementation Using Julep:** + +- **Docs:** + - Store product catalogs, inventory data, and order processing guidelines. + - Integrate with shipping provider APIs. + +- **Sessions:** + - Create sessions for each order to track its lifecycle. + - Maintain context for customer preferences and order history. + +- **Tasks:** + - Define tasks for order validation, inventory updates, payment processing, and shipment tracking. + - Automate customer notifications at each stage. + +- **Executions:** + - Execute order processing tasks in sequence. + - Monitor executions to handle exceptions like payment failures or inventory shortages. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires robust integrations with payment gateways, inventory systems, and shipping providers, along with handling various order states. + +--- + +### 6. AI-Powered Personal Trainer + +**Implementation Using Julep:** + +- **Docs:** + - Store workout routines, nutritional plans, and progress tracking templates. + - Include integration details for fitness tracking APIs. + +- **Sessions:** + - Create individual sessions for each user to track their fitness journey. + - Maintain context for user goals and progress. + +- **Tasks:** + - Define tasks for generating personalized workout plans, tracking progress, and adjusting routines. + - Automate reminders and motivational messages. + +- **Executions:** + - Execute fitness tasks based on user inputs and scheduled routines. + - Monitor executions to provide real-time feedback and adjustments. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves personalization and integration with fitness data sources, but achievable with well-defined task workflows. + +--- + +### 7. Automated Email Marketing Campaigns + +**Implementation Using Julep:** + +- **Docs:** + - Store email templates, segmentation criteria, and campaign schedules. + - Integrate with email marketing platforms (e.g., SendGrid, Mailchimp). + +- **Sessions:** + - Manage campaign-specific sessions to track interactions and responses. + - Maintain context for ongoing and past campaigns. + +- **Tasks:** + - Create tasks for email creation, scheduling, sending, and performance analysis. + - Automate A/B testing and content personalization. + +- **Executions:** + - Execute email campaigns based on predefined schedules and triggers. + - Monitor execution performance and adjust strategies accordingly. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with email platforms and managing dynamic content delivery, but is straightforward with clear task definitions. + +--- + +### 8. Intelligent Recruitment Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store job descriptions, candidate profiles, and evaluation criteria. + - Integrate with HR systems and job boards. + +- **Sessions:** + - Create sessions for each recruitment process to track candidate interactions. + - Maintain context for candidate status and feedback. + +- **Tasks:** + - Define tasks for resume screening, interview scheduling, and candidate communications. + - Automate feedback collection and report generation. + +- **Executions:** + - Execute recruitment tasks based on candidate actions and application stages. + - Monitor executions to ensure timely processing and compliance. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves complex integrations with HR systems, handling diverse candidate data, and ensuring compliance with recruitment processes. + +--- + +### 9. Smart Home Automation Controller + +**Implementation Using Julep:** + +- **Docs:** + - Store device configurations, automation rules, and user preferences. + - Integrate with smart home device APIs (e.g., Philips Hue, Nest). + +- **Sessions:** + - Manage user-specific sessions to track home automation settings. + - Maintain context for user routines and preferences. + +- **Tasks:** + - Create tasks for device control, routine scheduling, and energy monitoring. + - Automate actions based on triggers like time, occupancy, or environmental changes. + +- **Executions:** + - Execute home automation tasks in real-time or based on schedules. + - Monitor executions to ensure devices respond correctly and adjust settings as needed. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with multiple smart devices and managing dynamic automation rules, increasing system complexity. + +--- + +### 10. Automated Legal Document Analyzer + +**Implementation Using Julep:** + +- **Docs:** + - Store legal templates, compliance guidelines, and case studies. + - Integrate with legal databases and document repositories. + +- **Sessions:** + - Create sessions for each document analysis to track progress and findings. + - Maintain context for specific legal requirements and clauses. + +- **Tasks:** + - Define tasks for document ingestion, key information extraction, compliance checking, and summarization. + - Automate flagging of non-compliant sections and suggest necessary amendments. + +- **Executions:** + - Execute document analysis tasks sequentially or in parallel. + - Monitor executions to ensure accuracy and compliance with legal standards. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves advanced natural language processing, integration with legal databases, and ensuring compliance with intricate legal standards. + +--- + +### 11. Personalized Learning Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store educational content, learning paths, and assessment criteria. + - Integrate with educational platforms and resources. + +- **Sessions:** + - Create individual learning sessions to track user progress and preferences. + - Maintain context for personalized learning paths and goals. + +- **Tasks:** + - Define tasks for content recommendation, quiz generation, progress tracking, and feedback provision. + - Automate adjustments to learning paths based on performance. + +- **Executions:** + - Execute learning tasks based on user interactions and progress. + - Monitor executions to provide real-time feedback and adjust learning strategies. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires personalization algorithms, integration with educational content sources, and dynamic adaptation to user progress. + +--- + +### 12. AI-Driven Social Media Manager + +**Implementation Using Julep:** + +- **Docs:** + - Store social media strategies, content calendars, and engagement guidelines. + - Integrate with social media APIs (e.g., Twitter, Facebook, LinkedIn). + +- **Sessions:** + - Manage campaign-specific sessions to track posts, engagements, and analytics. + - Maintain context for ongoing and scheduled campaigns. + +- **Tasks:** + - Create tasks for content creation, scheduling, posting, and performance analysis. + - Automate engagement responses and A/B testing of content. + +- **Executions:** + - Execute social media tasks based on schedules and real-time engagement triggers. + - Monitor executions to optimize performance and adjust strategies. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with multiple social media platforms, dynamic content management, and real-time engagement handling. + +--- + +### 13. Automated Travel Itinerary Planner + +**Implementation Using Julep:** + +- **Docs:** + - Store travel guides, destination information, and booking APIs. + - Integrate with flight, hotel, and transportation service APIs. + +- **Sessions:** + - Create travel-specific sessions to track itinerary progress and user preferences. + - Maintain context for personalized travel plans and updates. + +- **Tasks:** + - Define tasks for destination research, booking accommodations and transportation, and itinerary scheduling. + - Automate real-time updates and notifications during trips. + +- **Executions:** + - Execute travel planning tasks based on user inputs and predefined schedules. + - Monitor executions to handle changes and provide timely updates. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with travel service APIs and managing dynamic itinerary changes, which adds moderate complexity. + +--- + +### 14. AI-Powered Inventory Management System + +**Implementation Using Julep:** + +- **Docs:** + - Store inventory data, supplier information, and reordering guidelines. + - Integrate with inventory tracking systems and supplier APIs. + +- **Sessions:** + - Manage inventory sessions to monitor stock levels and reorder statuses. + - Maintain context for inventory forecasts and demand trends. + +- **Tasks:** + - Create tasks for stock monitoring, demand forecasting, automatic reordering, and supplier communication. + - Automate alerts for low stock levels and order confirmations. + +- **Executions:** + - Execute inventory management tasks in real-time or based on schedules. + - Monitor executions to ensure accurate stock levels and timely reorders. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires real-time inventory tracking, predictive analytics for demand forecasting, and reliable integration with supplier systems. + +--- + +### 15. Intelligent Health Monitoring System + +**Implementation Using Julep:** + +- **Docs:** + - Store health metrics templates, medical guidelines, and user health data. + - Integrate with health tracking devices and APIs (e.g., Fitbit, Apple Health). + +- **Sessions:** + - Create sessions for each user to track their health metrics and progress. + - Maintain context for personalized health goals and alerts. + +- **Tasks:** + - Define tasks for data collection, health metric analysis, trend monitoring, and alert notifications. + - Automate health insights and recommendations based on data. + +- **Executions:** + - Execute health monitoring tasks continuously or at scheduled intervals. + - Monitor executions to provide real-time health alerts and advice. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with diverse health tracking devices, real-time data processing, and ensuring data privacy and accuracy. + +--- + +### 16. Automated Content Moderation Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store community guidelines, content policies, and moderation rules. + - Integrate with content platforms (e.g., forums, social media). + +- **Sessions:** + - Manage moderation sessions to track content reviews and decisions. + - Maintain context for specific moderation cases and user histories. + +- **Tasks:** + - Create tasks for content ingestion, automated screening, manual review, and action enforcement. + - Automate flagging of inappropriate content and notifying users of violations. + +- **Executions:** + - Execute content moderation tasks in real-time or batch processing. + - Monitor executions to ensure compliance and handle escalations. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves sophisticated content analysis, balancing automation with manual oversight, and ensuring adherence to diverse content policies. + +--- + +### 17. AI-Powered Resume Builder + +**Implementation Using Julep:** + +- **Docs:** + - Store resume templates, industry-specific keywords, and formatting guidelines. + - Integrate with LinkedIn and other professional platforms for data fetching. + +- **Sessions:** + - Create user-specific sessions to track resume building progress. + - Maintain context for personalized content and formatting preferences. + +- **Tasks:** + - Define tasks for data collection, content suggestion, resume formatting, and final export. + - Automate style checks and consistency validations. + +- **Executions:** + - Execute resume building tasks based on user inputs and selections. + - Monitor executions to provide real-time feedback and suggestions. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with professional data sources and implementing dynamic content generation and formatting. + +--- + +### 18. Smart Event Management System + +**Implementation Using Julep:** + +- **Docs:** + - Store event templates, scheduling guidelines, and registration forms. + - Integrate with calendar and email platforms. + +- **Sessions:** + - Manage event-specific sessions to track registrations, schedules, and attendee interactions. + - Maintain context for event updates and follow-ups. + +- **Tasks:** + - Create tasks for event creation, attendee registration, schedule management, and post-event follow-ups. + - Automate reminders, notifications, and feedback collection. + +- **Executions:** + - Execute event management tasks based on schedules and attendee actions. + - Monitor executions to handle registrations and event logistics seamlessly. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves coordinating multiple aspects of event planning, handling real-time registrations, and ensuring smooth execution logistics. + +--- + +### 19. Automated Survey Analyzer + +**Implementation Using Julep:** + +- **Docs:** + - Store survey templates, question types, and analysis methodologies. + - Integrate with survey distribution platforms (e.g., SurveyMonkey, Google Forms). + +- **Sessions:** + - Create sessions for each survey to track responses and analysis progress. + - Maintain context for specific survey objectives and parameters. + +- **Tasks:** + - Define tasks for survey distribution, data collection, sentiment analysis, and report generation. + - Automate data visualization and trend identification. + +- **Executions:** + - Execute survey analysis tasks upon survey completion. + - Monitor executions to provide timely and accurate insights. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with survey platforms and implementing effective data analysis and visualization techniques. + +--- + +### 20. AI-Driven Project Management Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store project templates, task guidelines, and progress tracking tools. + - Integrate with project management platforms (e.g., Jira, Trello). + +- **Sessions:** + - Manage project-specific sessions to track tasks, milestones, and team interactions. + - Maintain context for project goals and progress updates. + +- **Tasks:** + - Create tasks for task breakdown, assignment, progress tracking, and status reporting. + - Automate notifications for deadlines and task completions. + +- **Executions:** + - Execute project management tasks based on project timelines and team inputs. + - Monitor executions to ensure projects stay on track and within scope. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with diverse project management tools, handling dynamic task assignments, and ensuring effective progress tracking. + +--- + +### 21. Intelligent Document Summarizer + +**Implementation Using Julep:** + +- **Docs:** + - Store access to large documents, research papers, and reports. + - Include summarization algorithms and templates. + +- **Sessions:** + - Create sessions for each document summarization task. + - Maintain context for document sections and summarization preferences. + +- **Tasks:** + - Define tasks for document ingestion, key point extraction, and summary generation. + - Automate quality checks and user-specific summary adjustments. + +- **Executions:** + - Execute document summarization tasks efficiently. + - Monitor executions to ensure accurate and concise summaries. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires advanced natural language processing capabilities and efficient handling of large document data. + +--- + +### 22. Automated Feedback Collection and Analysis + +**Implementation Using Julep:** + +- **Docs:** + - Store feedback forms, analysis templates, and reporting guidelines. + - Integrate with feedback collection platforms (e.g., Typeform, Google Forms). + +- **Sessions:** + - Manage feedback-specific sessions to track responses and analysis progress. + - Maintain context for feedback sources and analysis objectives. + +- **Tasks:** + - Create tasks for feedback distribution, data collection, sentiment analysis, and insight generation. + - Automate categorization and prioritization of feedback. + +- **Executions:** + - Execute feedback analysis tasks promptly upon data collection. + - Monitor executions to provide actionable insights and improvement strategies. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integrating with feedback platforms and implementing effective sentiment analysis and categorization. + +--- + +### 23. AI-Powered Language Translator + +**Implementation Using Julep:** + +- **Docs:** + - Store language dictionaries, translation models, and formatting guidelines. + - Integrate with translation APIs (e.g., Google Translate, DeepL). + +- **Sessions:** + - Create translation-specific sessions to track user preferences and translation history. + - Maintain context for ongoing translation projects. + +- **Tasks:** + - Define tasks for text ingestion, language detection, translation processing, and quality assurance. + - Automate post-translation formatting and localization adjustments. + +- **Executions:** + - Execute translation tasks in real-time or batch mode. + - Monitor executions to ensure accuracy and contextual relevance. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with robust translation APIs and handling nuances of different languages and contexts. + +--- + +### 24. Smart Appointment Scheduler + +**Implementation Using Julep:** + +- **Docs:** + - Store scheduling templates, availability guidelines, and notification templates. + - Integrate with calendar platforms (e.g., Google Calendar, Outlook). + +- **Sessions:** + - Manage appointment-specific sessions to track scheduling progress and attendee interactions. + - Maintain context for user availability and preferences. + +- **Tasks:** + - Create tasks for availability checking, meeting scheduling, sending reminders, and handling cancellations. + - Automate conflict detection and resolution. + +- **Executions:** + - Execute scheduling tasks based on user inputs and calendar data. + - Monitor executions to ensure appointments are set correctly and notifications are sent. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integration with calendar systems and implementing conflict resolution logic, which adds moderate complexity. + +--- + +### 25. Automated Inventory Auditor + +**Implementation Using Julep:** + +- **Docs:** + - Store inventory audit templates, reconciliation guidelines, and reporting formats. + - Integrate with inventory management systems and databases. + +- **Sessions:** + - Create auditing sessions to track audit schedules and findings. + - Maintain context for different inventory categories and audit criteria. + +- **Tasks:** + - Define tasks for data extraction, discrepancy detection, reconciliation processes, and report generation. + - Automate audit scheduling and notification of audit results. + +- **Executions:** + - Execute inventory audit tasks periodically or on-demand. + - Monitor executions to ensure accurate and timely audits. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires reliable data integration and robust discrepancy detection mechanisms to handle complex inventory data. + +--- + +### 26. AI-Driven Competitive Analysis Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store competitor profiles, market analysis frameworks, and data sources. + - Integrate with market research APIs and competitor websites. + +- **Sessions:** + - Manage competitive analysis sessions to track data collection and analysis progress. + - Maintain context for specific market segments and competitive factors. + +- **Tasks:** + - Create tasks for data scraping, trend analysis, SWOT analysis, and report generation. + - Automate the aggregation and visualization of competitive data. + +- **Executions:** + - Execute competitive analysis tasks on a scheduled basis. + - Monitor executions to provide up-to-date insights and strategic recommendations. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves complex data scraping, accurate trend analysis, and maintaining up-to-date competitive insights, increasing overall complexity. + +--- + +### 27. Smart Recipe Generator + +**Implementation Using Julep:** + +- **Docs:** + - Store ingredient databases, recipe templates, and dietary guidelines. + - Integrate with nutrition APIs and grocery databases. + +- **Sessions:** + - Create user-specific sessions to track dietary preferences and past recipes. + - Maintain context for ingredient availability and nutritional goals. + +- **Tasks:** + - Define tasks for ingredient analysis, recipe generation, nutritional calculation, and grocery list creation. + - Automate recipe suggestions based on user inputs and constraints. + +- **Executions:** + - Execute recipe generation tasks in real-time based on user requests. + - Monitor executions to ensure recipe accuracy and adherence to dietary needs. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with nutrition and grocery APIs and implementing intelligent recipe generation logic. + +--- + +### 28. Automated Video Content Creator + +**Implementation Using Julep:** + +- **Docs:** + - Store video script templates, editing guidelines, and publishing schedules. + - Integrate with video editing and hosting platforms (e.g., Adobe Premiere, YouTube). + +- **Sessions:** + - Manage video creation sessions to track script development, editing stages, and publishing. + - Maintain context for ongoing video projects and collaboration. + +- **Tasks:** + - Create tasks for script generation, video editing, thumbnail creation, and publishing. + - Automate content review and approval workflows. + +- **Executions:** + - Execute video creation tasks based on project timelines. + - Monitor executions to ensure timely releases and quality standards. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with multiple video tools, managing creative workflows, and ensuring high-quality content production. + +--- + +### 29. AI-Powered News Aggregator + +**Implementation Using Julep:** + +- **Docs:** + - Store news source lists, categorization templates, and summarization guidelines. + - Integrate with news APIs (e.g., NewsAPI, RSS feeds). + +- **Sessions:** + - Create user-specific sessions to track news preferences and reading history. + - Maintain context for personalized news feeds and topics of interest. + +- **Tasks:** + - Define tasks for news scraping, categorization, summarization, and personalization. + - Automate feed generation and delivery based on user preferences. + +- **Executions:** + - Execute news aggregation tasks periodically. + - Monitor executions to ensure timely and relevant news delivery. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires efficient news scraping, accurate categorization, and personalized summarization, but is manageable with clear task workflows. + +--- + +### 30. Intelligent Appointment Follow-Up System + +**Implementation Using Julep:** + +- **Docs:** + - Store follow-up templates, feedback forms, and communication guidelines. + - Integrate with CRM and email platforms. + +- **Sessions:** + - Manage follow-up sessions to track appointments and subsequent communications. + - Maintain context for previous interactions and follow-up actions. + +- **Tasks:** + - Create tasks for sending follow-up emails, collecting feedback, and scheduling future appointments. + - Automate reminder notifications and feedback analysis. + +- **Executions:** + - Execute follow-up tasks based on appointment completions. + - Monitor executions to ensure timely and effective communications. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integration with CRM systems and implementing automated communication workflows, adding moderate complexity. + +--- + +### 31. Automated Compliance Monitoring Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store regulatory guidelines, compliance checklists, and reporting templates. + - Integrate with internal systems and regulatory databases. + +- **Sessions:** + - Create compliance-specific sessions to track monitoring activities and audit trails. + - Maintain context for various compliance standards and organizational policies. + +- **Tasks:** + - Define tasks for continuous monitoring, policy enforcement, and compliance reporting. + - Automate detection of non-compliant activities and trigger corrective actions. + +- **Executions:** + - Execute compliance monitoring tasks in real-time. + - Monitor executions to ensure ongoing adherence to regulations and standards. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Requires comprehensive integration with organizational systems, robust monitoring mechanisms, and ensuring adherence to multifaceted regulatory requirements. + +--- + +### 32. AI-Powered Personal Shopper + +**Implementation Using Julep:** + +- **Docs:** + - Store product catalogs, user preference data, and recommendation algorithms. + - Integrate with e-commerce APIs (e.g., Amazon, Shopify). + +- **Sessions:** + - Manage shopping sessions to track user preferences and purchase history. + - Maintain context for personalized product recommendations. + +- **Tasks:** + - Create tasks for product suggestion, wishlist management, and deal notifications. + - Automate price comparisons and availability checks. + +- **Executions:** + - Execute personal shopping tasks based on user inputs and behavior. + - Monitor executions to provide timely recommendations and alerts. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with multiple e-commerce platforms, implementing personalized recommendation logic, and handling real-time deal tracking. + +--- + +### 33. Smart Content Personalization Engine + +**Implementation Using Julep:** + +- **Docs:** + - Store content variants, personalization rules, and user segmentation data. + - Integrate with website CMS and analytics platforms. + +- **Sessions:** + - Create user-specific sessions to track interactions and preferences. + - Maintain context for personalized content delivery. + +- **Tasks:** + - Define tasks for content analysis, user behavior tracking, and personalized content delivery. + - Automate A/B testing and content optimization based on performance metrics. + +- **Executions:** + - Execute content personalization tasks in real-time. + - Monitor executions to adjust personalization strategies dynamically. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires real-time user behavior tracking, dynamic content delivery, and continuous optimization based on analytics, increasing system complexity. + +--- + +### 34. Automated Debt Collection Agent + +**Implementation Using Julep:** + +- **Docs:** + - Store debt agreements, payment schedules, and communication templates. + - Integrate with financial systems and payment gateways. + +- **Sessions:** + - Manage debt collection sessions to track debtor interactions and payment statuses. + - Maintain context for individual debtors and their payment histories. + +- **Tasks:** + - Create tasks for sending payment reminders, negotiating payment plans, and issuing notifications. + - Automate follow-ups and escalation procedures for delinquent accounts. + +- **Executions:** + - Execute debt collection tasks based on payment statuses and schedules. + - Monitor executions to ensure effective communication and resolution. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves sensitive financial data handling, integration with payment systems, and implementing automated negotiation workflows. + +--- + +### 35. AI-Driven Talent Matching System + +**Implementation Using Julep:** + +- **Docs:** + - Store job descriptions, candidate profiles, and matching criteria. + - Integrate with job boards and professional networking platforms. + +- **Sessions:** + - Create sessions for each matching process to track candidate-job pairings. + - Maintain context for specific job requirements and candidate qualifications. + +- **Tasks:** + - Define tasks for candidate screening, skills matching, and recommendation generation. + - Automate notifications to both candidates and employers regarding match statuses. + +- **Executions:** + - Execute talent matching tasks based on incoming job postings and candidate applications. + - Monitor executions to ensure accurate and timely matches. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Requires sophisticated matching algorithms, integration with diverse data sources, and handling dynamic job and candidate data. + +--- + +### 36. Intelligent Expense Reporting Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store expense categories, reimbursement policies, and reporting templates. + - Integrate with financial systems and expense tracking APIs. + +- **Sessions:** + - Manage expense reporting sessions to track submissions and approvals. + - Maintain context for individual employee expenses and budget limits. + +- **Tasks:** + - Create tasks for expense submission, approval workflows, and reimbursement processing. + - Automate validation checks and compliance with policies. + +- **Executions:** + - Execute expense reporting tasks based on submission triggers and approval workflows. + - Monitor executions to ensure timely reimbursements and policy adherence. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with financial systems, implementing approval workflows, and ensuring compliance with expense policies. + +--- + +### 37. Automated Meeting Minutes Recorder + +**Implementation Using Julep:** + +- **Docs:** + - Store meeting agendas, transcription templates, and summary guidelines. + - Integrate with audio transcription services (e.g., Otter.ai, Google Speech-to-Text). + +- **Sessions:** + - Create meeting-specific sessions to track transcription and summarization progress. + - Maintain context for meeting topics and participant interactions. + +- **Tasks:** + - Define tasks for audio ingestion, transcription, summary generation, and distribution. + - Automate the extraction of action items and key decisions. + +- **Executions:** + - Execute transcription and summarization tasks in real-time or post-meeting. + - Monitor executions to ensure accurate recordings and timely distribution. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires reliable audio transcription integration and effective summarization techniques, but manageable with clear task definitions. + +--- + +### 38. AI-Driven Content Recommendation System + +**Implementation Using Julep:** + +- **Docs:** + - Store user profiles, content metadata, and recommendation algorithms. + - Integrate with content management systems and user behavior analytics. + +- **Sessions:** + - Manage user-specific sessions to track interactions and preference changes. + - Maintain context for personalized content delivery. + +- **Tasks:** + - Define tasks for content analysis, user behavior tracking, and recommendation generation. + - Automate personalization based on real-time user interactions. + +- **Executions:** + - Execute content recommendation tasks in real-time. + - Monitor executions to refine recommendation accuracy and relevance. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves real-time data processing, advanced recommendation algorithms, and integration with multiple content sources. + +--- + +### 39. Smart Time Tracking Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store time tracking templates, productivity guidelines, and reporting formats. + - Integrate with productivity tools (e.g., Toggl, Clockify). + +- **Sessions:** + - Create user-specific sessions to track time spent on tasks and projects. + - Maintain context for task prioritization and productivity goals. + +- **Tasks:** + - Define tasks for time logging, productivity analysis, and report generation. + - Automate reminders for time tracking and productivity tips based on usage patterns. + +- **Executions:** + - Execute time tracking tasks continuously or based on user actions. + - Monitor executions to provide real-time productivity insights and suggestions. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with time tracking tools and implementing effective productivity analysis logic. + +--- + +### 40. Automated Webinar Hosting Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store webinar schedules, registration forms, and hosting guidelines. + - Integrate with webinar platforms (e.g., Zoom, WebinarJam). + +- **Sessions:** + - Manage webinar-specific sessions to track registrations, attendee interactions, and follow-ups. + - Maintain context for webinar topics and participant engagement. + +- **Tasks:** + - Create tasks for webinar scheduling, participant management, live interactions, and post-webinar follow-ups. + - Automate reminders, thank-you emails, and feedback collection. + +- **Executions:** + - Execute webinar hosting tasks based on schedules and participant actions. + - Monitor executions to ensure smooth webinar operations and effective follow-ups. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with webinar platforms, managing live interactions, and handling post-event processes seamlessly. + +--- + +### 41. AI-Powered Inventory Forecasting Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store sales data, forecasting models, and inventory guidelines. + - Integrate with sales and inventory tracking systems. + +- **Sessions:** + - Create forecasting sessions to track sales trends and inventory predictions. + - Maintain context for seasonal factors and market conditions affecting inventory. + +- **Tasks:** + - Define tasks for data collection, trend analysis, prediction model execution, and report generation. + - Automate alerts for predicted stock shortages or surpluses. + +- **Executions:** + - Execute forecasting tasks periodically based on sales data updates. + - Monitor executions to refine prediction accuracy and adjust inventory strategies. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires advanced predictive analytics, integration with sales systems, and handling dynamic market conditions influencing inventory. + +--- + +### 42. Smart Contract Management System + +**Implementation Using Julep:** + +- **Docs:** + - Store smart contract templates, execution guidelines, and compliance rules. + - Integrate with blockchain platforms (e.g., Ethereum, Hyperledger). + +- **Sessions:** + - Manage contract-specific sessions to track creation, execution, and monitoring. + - Maintain context for contract terms and participant interactions. + +- **Tasks:** + - Create tasks for contract creation, deployment, execution monitoring, and compliance checks. + - Automate notifications for contract milestones and compliance alerts. + +- **Executions:** + - Execute smart contract tasks based on blockchain events and predefined triggers. + - Monitor executions to ensure contract integrity and compliance. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves blockchain integration, ensuring smart contract security, and managing complex execution and compliance workflows. + +--- + +### 43. Automated Knowledge Base Updater + +**Implementation Using Julep:** + +- **Docs:** + - Store knowledge base articles, update guidelines, and categorization rules. + - Integrate with content management systems and information sources. + +- **Sessions:** + - Create knowledge base sessions to track updates, revisions, and user queries. + - Maintain context for content accuracy and relevance. + +- **Tasks:** + - Define tasks for content ingestion, information extraction, categorization, and publishing. + - Automate periodic reviews and updates based on new information sources. + +- **Executions:** + - Execute knowledge base update tasks as new content becomes available. + - Monitor executions to ensure timely and accurate information updates. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires efficient content ingestion, accurate information extraction, and seamless integration with knowledge management systems. + +--- + +### 44. AI-Driven Fraud Detection System + +**Implementation Using Julep:** + +- **Docs:** + - Store fraud detection algorithms, monitoring guidelines, and incident response protocols. + - Integrate with financial transaction systems and security APIs. + +- **Sessions:** + - Manage fraud detection sessions to track suspicious activities and investigations. + - Maintain context for user behavior patterns and anomaly detection. + +- **Tasks:** + - Create tasks for real-time transaction monitoring, anomaly detection, incident logging, and alerting. + - Automate response actions like freezing accounts or notifying security teams. + +- **Executions:** + - Execute fraud detection tasks continuously based on transaction flows. + - Monitor executions to ensure timely detection and response to fraudulent activities. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves real-time data processing, sophisticated anomaly detection algorithms, and ensuring robust security measures. + +--- + +### 45. Intelligent Personal Diary Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store diary templates, emotional analysis guidelines, and reflection prompts. + - Integrate with sentiment analysis APIs. + +- **Sessions:** + - Create user-specific sessions to track daily entries and emotional states. + - Maintain context for personal growth and mood trends. + +- **Tasks:** + - Define tasks for daily entry prompts, sentiment analysis, and insight generation. + - Automate privacy controls and data encryption for secure diary storage. + +- **Executions:** + - Execute diary assistant tasks daily based on user inputs. + - Monitor executions to provide personalized insights and growth tracking. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with sentiment analysis tools and ensuring secure data handling, but manageable with well-defined workflows. + +--- + +### 46. Automated Language Learning Tutor + +**Implementation Using Julep:** + +- **Docs:** + - Store language lessons, exercise templates, and feedback guidelines. + - Integrate with language processing APIs and educational resources. + +- **Sessions:** + - Manage learning sessions to track user progress and performance. + - Maintain context for personalized lesson plans and feedback. + +- **Tasks:** + - Create tasks for lesson delivery, exercise generation, progress tracking, and feedback provision. + - Automate adaptive learning paths based on user performance. + +- **Executions:** + - Execute language learning tasks based on user interactions and learning schedules. + - Monitor executions to adjust learning strategies and provide real-time feedback. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves adaptive learning algorithms, integration with language processing tools, and personalized content delivery. + +--- + +### 47. AI-Powered Budgeting Tool for Businesses + +**Implementation Using Julep:** + +- **Docs:** + - Store budgeting templates, financial guidelines, and reporting formats. + - Integrate with accounting systems and financial data sources. + +- **Sessions:** + - Create budgeting sessions to track financial planning and expenditure. + - Maintain context for organizational financial goals and constraints. + +- **Tasks:** + - Define tasks for budget creation, expenditure tracking, financial forecasting, and report generation. + - Automate alerts for budget overruns and financial goal assessments. + +- **Executions:** + - Execute budgeting tasks based on financial data updates and planning cycles. + - Monitor executions to ensure accurate financial tracking and reporting. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with accounting systems, accurate financial forecasting, and robust budgeting logic to handle business complexities. + +--- + +### 48. Smart Compliance Documentation Generator + +**Implementation Using Julep:** + +- **Docs:** + - Store compliance templates, regulatory guidelines, and documentation standards. + - Integrate with regulatory databases and internal policy systems. + +- **Sessions:** + - Manage compliance documentation sessions to track document creation and updates. + - Maintain context for specific regulatory requirements and organizational policies. + +- **Tasks:** + - Create tasks for document generation, compliance checking, format validation, and publishing. + - Automate updates based on regulatory changes and policy revisions. + +- **Executions:** + - Execute compliance documentation tasks as needed or on a schedule. + - Monitor executions to ensure documents meet all compliance standards. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves dynamic document generation, adherence to detailed regulatory standards, and ensuring continuous updates based on regulatory changes. + +--- + +### 49. Automated Product Recommendation Engine + +**Implementation Using Julep:** + +- **Docs:** + - Store product catalogs, user behavior data, and recommendation algorithms. + - Integrate with e-commerce platforms and user analytics tools. + +- **Sessions:** + - Create user-specific sessions to track interactions and preferences. + - Maintain context for personalized recommendation accuracy. + +- **Tasks:** + - Define tasks for data collection, behavior analysis, recommendation generation, and user feedback integration. + - Automate real-time recommendations based on user actions and trends. + +- **Executions:** + - Execute recommendation tasks in real-time to provide instant suggestions. + - Monitor executions to refine algorithms and improve recommendation relevance. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires sophisticated recommendation algorithms, real-time data processing, and continuous refinement based on user feedback. + +--- + +### 50. Intelligent Event Feedback Analyzer + +**Implementation Using Julep:** + +- **Docs:** + - Store feedback forms, analysis templates, and reporting standards. + - Integrate with event platforms and feedback collection tools. + +- **Sessions:** + - Manage feedback-specific sessions to track responses and analysis progress. + - Maintain context for event-specific feedback and improvement areas. + +- **Tasks:** + - Create tasks for feedback collection, sentiment analysis, trend identification, and report generation. + - Automate the extraction of actionable insights and improvement suggestions. + +- **Executions:** + - Execute feedback analysis tasks post-event. + - Monitor executions to ensure accurate and timely feedback processing and reporting. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integrating with feedback collection tools and implementing effective sentiment analysis and trend identification mechanisms. + +--- + +# Complexity and Difficulty Ratings + +The scenarios have been rated based on the number of integrated features, required integrations, and overall system complexity. Here's a quick overview: + +- **★☆☆☆☆ (1/5): Easiest** +- **★★☆☆☆ (2/5): Low Complexity** +- **★★★☆☆ (3/5): Moderate Complexity** +- **★★★★☆ (4/5): High Complexity** +- **★★★★★ (5/5): Most Complex** + +| **Scenario** | **Complexity Rating** | +|---------------------------------------------------|-----------------------| +| 1. Automated Customer Support Agent | ★★★★☆ | +| 2. Smart Research Assistant | ★★★★☆ | +| 3. Personal Finance Manager | ★★★☆☆ | +| 4. Content Creation Workflow | ★★★☆☆ | +| 5. E-commerce Order Processing System | ★★★★☆ | +| 6. AI-Powered Personal Trainer | ★★★☆☆ | +| 7. Automated Email Marketing Campaigns | ★★★☆☆ | +| 8. Intelligent Recruitment Assistant | ★★★★★ | +| 9. Smart Home Automation Controller | ★★★★☆ | +| 10. Automated Legal Document Analyzer | ★★★★★ | +| 11. Personalized Learning Assistant | ★★★★☆ | +| 12. AI-Driven Social Media Manager | ★★★★☆ | +| 13. Automated Travel Itinerary Planner | ★★★☆☆ | +| 14. AI-Powered Inventory Management System | ★★★★☆ | +| 15. Intelligent Health Monitoring System | ★★★★☆ | +| 16. Automated Content Moderation Tool | ★★★★★ | +| 17. AI-Powered Resume Builder | ★★★☆☆ | +| 18. Smart Event Management System | ★★★★☆ | +| 19. Automated Survey Analyzer | ★★★☆☆ | +| 20. AI-Driven Project Management Assistant | ★★★★☆ | +| 21. Intelligent Document Summarizer | ★★★★☆ | +| 22. Automated Feedback Collection and Analysis | ★★★☆☆ | +| 23. AI-Powered Language Translator | ★★★☆☆ | +| 24. Smart Appointment Scheduler | ★★★☆☆ | +| 25. Automated Inventory Auditor | ★★★★☆ | +| 26. AI-Driven Competitive Analysis Tool | ★★★★☆ | +| 27. Smart Recipe Generator | ★★★☆☆ | +| 28. Automated Video Content Creator | ★★★★☆ | +| 29. AI-Powered News Aggregator | ★★★☆☆ | +| 30. Intelligent Appointment Follow-Up System | ★★★☆☆ | +| 31. Automated Compliance Monitoring Tool | ★★★★★ | +| 32. AI-Powered Personal Shopper | ★★★★☆ | +| 33. Smart Content Personalization Engine | ★★★★☆ | +| 34. Automated Debt Collection Agent | ★★★★☆ | +| 35. AI-Driven Talent Matching System | ★★★★★ | +| 36. Intelligent Expense Reporting Tool | ★★★★☆ | +| 37. Automated Meeting Minutes Recorder | ★★★☆☆ | +| 38. AI-Driven Content Recommendation System | ★★★★☆ | +| 39. Smart Time Tracking Assistant | ★★★☆☆ | +| 40. Automated Webinar Hosting Assistant | ★★★★☆ | +| 41. AI-Powered Inventory Forecasting Tool | ★★★★☆ | +| 42. Smart Contract Management System | ★★★★★ | +| 43. Automated Knowledge Base Updater | ★★★★☆ | +| 44. AI-Driven Fraud Detection System | ★★★★★ | +| 45. Intelligent Personal Diary Assistant | ★★★☆☆ | +| 46. Automated Language Learning Tutor | ★★★★☆ | +| 47. AI-Powered Budgeting Tool for Businesses | ★★★★☆ | +| 48. Smart Compliance Documentation Generator | ★★★★☆ | +| 49. Automated Product Recommendation Engine | ★★★★☆ | +| 50. Intelligent Event Feedback Analyzer | ★★★☆☆ | + +--- + +# Conclusion + +These 50 scenarios showcase the versatility and power of Julep's **docs**, **sessions**, **tasks**, and **executions** features in automating and enhancing various business and personal workflows. Depending on your specific needs and available integrations, these scenarios can be tailored to create efficient, intelligent, and scalable solutions. + +Feel free to explore these scenarios, adapt them to your use cases, and contribute to expanding Julep's capabilities further! \ No newline at end of file diff --git a/README-CN.md b/README-CN.md index 49c01217e..c47b56a6b 100644 --- a/README-CN.md +++ b/README-CN.md @@ -1,28 +1,18 @@ -[English](README.md) | 中文翻译 +[English](README.md) | [中文翻译](README-CN.md) | [日本語翻訳](README-JA.md) | [French](README-FR.md)
- julep + julep
-

-使用有状态代理、复杂工作流和集成工具构建强大的AI应用程序 -

- -

-
- 探索文档 » -
-
- 报告Bug - · - 请求功能 - · - 加入我们的Discord - · - X - · - LinkedIn - +

+
+ 探索文档 + · + 不和谐 + · + 𝕏 + · + LinkedIn

@@ -36,213 +26,1061 @@ GitHub License

---- +***** + +> [!注意] +> 👨‍💻 来参加 devfest.ai 活动了吗?加入我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 并查看以下详细信息。 +> +> 从 [此处](https://dashboard-dev.julep.ai) 获取您的 API 密钥。 + +
+🌟 贡献者和 DevFest.AI 参与者(点击展开) + +## 🌟 招募贡献者! + +我们很高兴欢迎新贡献者加入 Julep 项目!我们创建了几个“好的第一个问题”来帮助您入门。以下是您可以做出贡献的方式: + +1. 查看我们的 [CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) 文件以获取有关如何贡献的指南。 +2. 浏览我们的 [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) 以找到您感兴趣的任务。 +3. 如果您有任何疑问或需要帮助,请随时通过我们的 [Discord](https://discord.com/invite/JTSBGRZrzj) 频道联系我们。 + +您的贡献,无论大小,对我们来说都是宝贵的。让我们一起创造一些了不起的东西!🚀 + +### 🎉 DevFest.AI 2024 年 10 月 + +令人兴奋的消息!我们将参加 2024 年 10 月的 DevFest.AI!🗓️ + +- 在本次活动期间为 Julep 做出贡献,就有机会赢得超棒的 Julep 商品和赃物!🎁 +- 与来自世界各地的开发人员一起为 AI 资源库做出贡献并参与精彩的活动。 +- 非常感谢 DevFest.AI 组织这次精彩的活动! + +> [!提示] +> 准备好加入这场有趣的活动了吗?**[发推文表示你正在参与](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** 让我们开始编码吧!🖥️ + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 目录

+ +- [简介](#introduction) +- [快速示例](#quick-example) +- [主要特点](#key-features) +- [为什么选择 Julep 而不是 LangChain?](#why-julep-vs-langchain) +- [不同用例](#different-use-cases) +- [不同的外形尺寸](#different-form-factor) +- [总结](#in-summary) +- [安装](#安装) +- [Python 快速入门 🐍](#python-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [步骤 3:执行任务](#step-3-execute-the-task) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent) +- [Node.js 快速入门🟩](#nodejs-quick-start-) +- [步骤 1:创建代理](#step-1-create-an-agent-1) +- [步骤 2:创建一个生成故事和漫画的任务](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [步骤 3:执行任务](#step-3-execute-the-task-1) +- [步骤 4:与代理聊天](#step-4-chat-with-the-agent-1) +- [组件](#components) +- [心智模型](#mental-model) +- [概念](#concepts) +- [理解任务](#understanding-tasks) +- [工作流步骤的类型](#types-of-workflow-steps) +- [工具类型](#tool-types) +- [用户定义的函数](#user-defined-functions) +- [`系统` 工具](#system-tools) +- [内置集成](#built-in-integrations) +- [直接 `api_call`](#direct-api_calls) +- [集成](#integrations) +- [勇敢搜索](#brave-search) +- [BrowserBase](#browserbase) +- [电子邮件](#email) +- [蜘蛛](#蜘蛛) +- [天气](#天气) +- [维基百科](#wikipedia) +- [其他功能](#other-features) +- [向代理添加工具](#adding-tools-to-agents) +- [管理会话和用户](#managing-sessions-and-users) +- [文档集成与搜索](#document-integration-and-search) +- [本地快速启动](#local-quickstart) +- [SDK 参考](#sdk-reference) +- [API 参考](#api-reference) + +
+ + +## 介绍 + +Julep 是一个用于创建 AI 代理的平台,这些代理可以记住过去的互动并执行复杂的任务。它提供长期记忆并管理多步骤流程。 + +Julep 支持创建多步骤任务,包括决策、循环、并行处理以及与众多外部工具和 API 的集成。 + +虽然许多人工智能应用程序仅限于简单、线性的提示链和 API 调用,并且分支很少,但 Julep 可以处理更复杂的场景。 + +它支持: +- 复杂、多步骤的流程 +- 动态决策 +- 并行执行 + +> [!提示] +> 想象一下,您想要构建一个 AI 代理,它不仅可以回答简单的问题,还可以处理复杂的任务,记住过去的交互,甚至可能使用其他工具或 API。这就是 Julep 的作用所在。 + +快速示例 + +想象一下一个可以执行以下操作的研究 AI 代理: +1. 选择一个主题, +2. 针对该主题提出 100 个搜索查询, +3. 同时进行网页搜索, +4. 总结结果, +5. 将摘要发送至 Discord + +在 Julep 中,这将是一个单一的任务80行代码然后运行完全托管一切都是独立的。所有步骤都在 Julep 自己的服务器上执行,您无需动手。这是一个工作示例: + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# Define the tools that the agent can use +tools: +- name: web_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_BRAVE_API_KEY" + +- name: discord_webhook + type: api_call + api_call: + url: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` -## 🚀 即将发布:v0.4 Alpha +> [!提示] +> 当您想要构建能够在长期交互​​中保持上下文和状态的 AI 代理时,Julep 非常有用。它非常适合设计复杂的多步骤工作流程,并将各种工具和 API 直接集成到代理的流程中。 +> +> 在此示例中,Julep 将自动管理并行执行,重试失败的步骤,重新发送 API 请求,并保持任务可靠运行直至完成。 -
- Announcing v0.4 Alpha -
+主要特点 + +1. 🧠 **持久 AI 代理**:在长期交互​​中记住背景和信息。 +2. 💾 **状态会话**:跟踪过去的互动以获得个性化回应。 +3. 🔄 **多步骤任务**:使用循环和决策构建复杂的多步骤流程。 +4. ⏳ **任务管理**:处理可以无限期运行的长时间运行的任务。 +5.🛠️**内置工具**:在您的任务中使用内置工具和外部 API。 +6. 🔧 **自我修复**:Julep 将自动重试失败的步骤、重新发送消息,并确保您的任务顺利运行。 +7. 📚 **RAG**:使用 Julep 的文档存储构建一个用于检索和使用您自己的数据的系统。 + +Julep 非常适合需要超越简单的提示响应模型的 AI 用例的应用程序。 + +## 为什么选择 Julep 而不是 LangChain? -我们很高兴地宣布v0.4目前处于alpha阶段!此版本带来了重大改进和新功能。敬请期待正式发布。 +### 不同的用例 -要全面了解Julep的核心概念和即将推出的功能,请查看我们的[详细概念指南](docs/julep-concepts.md)。 +可以将 LangChain 和 Julep 视为 AI 开发堆栈中具有不同重点的工具。 -寻找之前的版本?您可以在这里找到[v0.3 README](v0.3_README.md)。 +LangChain 非常适合创建提示序列和管理与 AI 模型的交互。它拥有庞大的生态系统,包含大量预构建的集成,如果您想快速启动和运行某些功能,这会非常方便。LangChain 非常适合涉及线性提示链和 API 调用的简单用例。 ---- +另一方面,Julep 更注重构建持久的 AI 代理,这些代理可以在长期交互​​中记住事物。当您需要涉及多个步骤、决策以及在代理流程中直接与各种工具或 API 集成的复杂任务时,它会大放异彩。它从头开始设计,以管理持久会话和复杂任务。 -## 为什么选择Julep? -我们构建了许多AI应用程序,并深知创建具有多个代理和工作流的复杂、有状态应用程序的挑战。 +如果您想构建一个需要执行以下操作的复杂 AI 助手,请使用 Julep: -**问题** -1. 构建具有记忆、知识和工具的AI应用程序复杂且耗时。 -2. 在AI应用程序中管理长时间运行的任务和复杂工作流具有挑战性。 -3. 将多个工具和服务集成到AI应用程序中需要大量开发工作。 +- 跟踪几天或几周内的用户互动。 +- 执行计划任务,例如发送每日摘要或监控数据源。 +- 根据之前的互动或存储的数据做出决策。 +- 作为其任务的一部分,与多个外部服务进行交互。 ---- -## 功能 -- **有状态代理**:创建和管理具有内置对话历史和记忆的代理。 -- **复杂工作流**:定义和执行具有分支、并行执行和错误处理的多步骤任务。 -- **集成工具**:轻松将各种工具和外部服务整合到您的AI应用程序中。 -- **灵活的会话管理**:支持代理和用户之间的各种交互模式,如一对多和多对一。 -- **内置RAG**:添加、删除和更新文档以为您的代理提供上下文。 -- **异步任务执行**:在后台运行长时间运行的任务,具有状态管理和可恢复性。 -- **多模型支持**:在保持状态的同时切换不同的语言模型(OpenAI、Anthropic、Ollama)。 -- **任务系统**:定义和执行具有并行处理和错误处理的复杂多步骤工作流。 +然后 Julep 提供支持所有这些的基础设施,而无需您从头开始构建。 ---- -## 快速入门 -### 选项1:使用Julep云 -我们的托管平台目前处于Beta阶段! +### 不同的外形尺寸 -要获取访问权限: -- 前往https://platform.julep.ai -- 在`.env`中生成并添加您的`JULEP_API_KEY` +Julep 是一个**平台**,其中包括用于描述任务的语言、用于运行这些任务的服务器以及用于与平台交互的 SDK。要使用 Julep 构建某些东西,您需要在“YAML”中编写任务描述,然后在云中运行该任务。 -### 选项2:在本地安装并运行Julep -前往[自托管](https://docs.julep.ai/guides/self-hosting)文档,了解如何在本地运行Julep! +Julep 专为繁重、多步骤和长时间运行的任务而设计,并且对任务的复杂程度没有限制。 -### 安装 +LangChain 是一个**库**,其中包含一些工具和一个用于构建线性提示和工具链的框架。要使用 LangChain 构建某些东西,您通常需要编写 Python 代码来配置和运行要使用的模型链。 + +对于涉及线性提示和 API 调用链的简单用例,LangChain 可能足够并且能够更快地实现。 + +### 总之 + +当您需要在无状态或短期环境中管理 AI 模型交互和提示序列时,请使用 LangChain。 + +当您需要一个具有高级任务功能、持久会话和复杂任务管理的状态代理的强大框架时,请选择 Julep。 + +## 安装 + +要开始使用 Julep,请使用 [npm](https://www.npmjs.com/package/@julep/sdk) 或 [pip](https://pypi.org/project/julep/) 安装它: ```bash -pip install julep +npm install @julep/sdk ``` -### 设置`client` +或者 -```python -from julep import Client -import os +```bash +pip install julep +``` -base_url = os.environ.get("JULEP_API_URL") -api_key = os.environ.get("JULEP_API_KEY") +> [!注意] +> 从 [此处](https://dashboard-dev.julep.ai) 获取您的 API 密钥。 +> +> 虽然我们处于测试阶段,但您也可以通过 [Discord](https://discord.com/invite/JTSBGRZrzj) 联系,以解除 API 密钥的速率限制。 -client = Client(api_key=api_key, base_url=base_url) -``` +> [!提示] +> 💻 你是“向我展示代码!”的那种人吗?我们创建了大量的烹饪书供您入门。**查看 [烹饪书](https://github.com/julep-ai/julep/tree/dev/cookbooks)** 以浏览示例。 +> +> 💡 您还可以在 Julep 的基础上构建许多想法。**查看[想法列表](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** 以获取一些灵感。 + +## Python 快速入门🐍 -### 创建代理 -代理是将LLM设置(如模型、温度)以及工具范围的对象。 +### 步骤 1:创建代理 ```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + agent = client.agents.create( - name="Jessica", - model="gpt-4", - tools=[], # 在此处定义工具 - about="A helpful AI assistant", - instructions=["Be polite", "Be concise"] + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +client.agents.tools.create( + agent_id=agent.id, + name="image_generator", + description="Use this tool to generate images based on descriptions.", + integration={ + "provider": "dalle", + "method": "generate_image", + "setup": { + "api_key": "your_openai_api_key", + }, + }, ) ``` -### 创建用户 -用户是应用程序用户的对象。 +### 步骤 2:创建一个生成故事和漫画的任务 -记忆是为每个用户形成并保存的,多个用户可以与一个代理交谈。 +让我们定义一个多步骤任务来创建一个故事并根据输入的想法生成面板漫画: ```python -user = client.users.create( - name="Anon", - about="Average nerdy techbro/girl spending 8 hours a day on a laptop", +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) ) ``` -### 创建会话 -"用户"和"代理"在"会话"中进行交互。系统提示在此处。 +### 步骤 3:执行任务 ```python -situation_prompt = """You are Jessica, a helpful AI assistant. -You're here to assist the user with any questions or tasks they might have.""" -session = client.sessions.create( - user_id=user.id, - agent_id=agent.id, - situation=situation_prompt +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} ) -``` -### 开始有状态对话 -`session.chat`控制"代理"和"用户"之间的通信。 +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) -它有两个重要参数; -- `recall`:检索先前的对话和记忆。 -- `remember`:将当前对话回合保存到记忆存储中。 +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### 步骤 4:与代理聊天 -要保持会话状态,两者都需要为`True` +开始与代理进行交互式聊天会话: ```python -user_msg = "Hey Jessica, can you help me with a task?" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - "name": "Anon", - } - ], - recall=True, - remember=True, -) +session = client.sessions.create(agent_id=agent.id) -print(response.response[0][0].content) +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) ``` ---- +> [!提示] +> 您可以在[这里](example.py)找到完整的 python 示例。 -## 核心概念 -### 代理(Agent) -Julep中的代理是应用程序的主要协调者。它由GPT-4或Claude等基础模型支持,可以使用工具、文档并执行复杂任务。 +## Node.js 快速入门 🟩 -### 用户(User) -Julep中的用户代表应用程序的最终用户。他们可以与会话关联,并拥有自己的文档和元数据。 +### 步骤 1:创建代理 -### 会话(Session) -会话管理用户和代理之间的交互。它们维护对话历史和上下文。 +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; -### 工具(Tool) -工具是代理可以用来执行特定操作或检索信息的函数。 +const client = new Julep({ apiKey: 'your_julep_api_key' }); -### 文档(Doc) -文档是可以与代理或用户关联的文本片段集合,用于上下文检索。 +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); -### 任务(Task) -任务是可以由代理定义和执行的复杂多步骤工作流。 + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); -### 执行(Execution) -执行是已经以某些输入启动的任务实例。它在进行过程中经历各种状态。 + return agent; +} +``` ---- +### 步骤 2:创建一个生成故事和漫画的任务 + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` -## API和SDK +### 步骤 3:执行任务 -要直接使用API或查看请求和响应格式、身份验证、可用端点等,请参阅[API文档](https://docs.julep.ai/api-reference/agents-api/agents-api) +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); -### Python SDK + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } -要安装Python SDK,运行: + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` -```bash -pip install julep +### 步骤 4:与代理聊天 + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); ``` -有关使用Python SDK的更多信息,请参阅[Python SDK文档](https://docs.julep.ai/api-reference/python-sdk-docs)。 +> [!提示] +> 您可以在[这里](example.js)找到完整的 Node.js 示例。 -### TypeScript SDK -要使用`npm`安装TypeScript SDK,运行: +## 成分 -```bash -npm install @julep/sdk +Julep 由以下成分组成: + +- **Julep 平台**:Julep 平台是运行您的工作流程的云服务。它包括用于描述工作流程的语言、用于运行这些工作流程的服务器以及用于与平台交互的 SDK。 +- **Julep SDKs**:Julep SDKs 是一组用于构建工作流的库。目前有适用于 Python 和 JavaScript 的 SDKs,还有更多 SDKs 正在开发中。 +- **Julep API**:Julep API 是一个 RESTful API,您可以使用它与 Julep 平台进行交互。 + +### 心智模型 + +
+ +
+ +您可以将 Julep 视为一个结合了客户端和服务器端组件的平台,以帮助您构建高级 AI 代理。以下是它的可视化方法: + +1. **您的申请代码:** +- 您可以在应用程序中使用 Julep SDK 来定义代理、任务和工作流。 +- SDK 提供的函数和类使得设置和管理这些组件变得容易。 + +2. **Julep 后端服务:** +- SDK 通过网络与 Julep 后端通信。 +- 后端处理任务的执行,维护会话状态,存储文档并协调工作流程。 + +3. **与工具和 API 集成:** +- 在您的工作流程中,您可以集成外部工具和服务。 +- 后端促进这些集成,因此您的代理可以执行网络搜索、访问数据库或调用第三方 API。 + +简单来说: +- Julep 是一个用于构建有状态 AI 代理的平台。 +- 您在代码中使用 SDK(类似工具包)来定义代理的功能。 +- 后端服务(您可以将其视为引擎)运行这些定义、管理状态并处理复杂性。 + +## 概念 + +Julep 基于几个关键技术组件构建,这些组件共同协作以创建强大的 AI 工作流程: + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **代理**:由大型语言模型(LLM)支持的人工智能实体,可执行任务并与用户交互。 +- **用户**:通过会话与代理交互的实体。 +- **会话**:代理和用户之间的状态交互,在多个交换之间维护上下文。 +- **任务**:代理可以执行的多步骤、程序化工作流,包括提示、工具调用和条件逻辑等各种类型的步骤。 +- **工具**:扩展代理功能的集成,包括用户定义的函数、系统工具或第三方 API 集成。 +- **文档**:与代理或用户相关的文本或数据对象,矢量化并存储以用于语义搜索和检索。 +- **执行**:通过特定输入启动的任务实例,具有自己的生命周期和状态机。 + +有关这些概念及其相互作用的更详细说明,请参阅我们的[概念文档](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)。 + +## 理解任务 + +任务是 Julep 工作流系统的核心。它们允许您定义代理可以执行的复杂、多步骤 AI 工作流。以下是任务组件的简要概述: + +- **名称和描述**:每个任务都有唯一的名称和描述,以便于识别。 +- **主要步骤**:任务的核心,定义要执行的操作顺序。 +- **工具**:可选集成,可在任务执行期间扩展代理的功能。 + +### 工作流步骤的类型 + +Julep 中的任务可以包含各种类型的步骤,让您可以创建复杂而强大的工作流程。以下是按类别组织的可用步骤类型的概述: + +#### 常见步骤 + +1. **提示**:向AI模型发送消息并收到回复。 + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **工具调用**:执行集成的工具或API。 + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **评估**:执行计算或处理数据。 + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **等待输入**:暂停工作流程,直到收到输入。 + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **日志**:记录指定的值或消息。 + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### 键值步骤 + +6. **获取**:从键值存储中检索值。 + ```yaml + - get: "user_preference" + ``` + +7. **设置**:为键值存储中的键分配一个值。 + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### 迭代步骤 + +8. **Foreach**:遍历集合并对每个项目执行步骤。 + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**:对集合进行映射并减少结果。 + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10.**并行**:并行运行多个步骤。 + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### 条件步骤 + +11. **If-Else**:条件执行步骤。 + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12.**Switch**:根据多种条件执行步骤。 + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### 其他控制流 + +13. **睡眠**:暂停工作流一段指定的时间。 + ```yaml + - sleep: + seconds: 30 + ``` + +14. **返回**:从工作流返回一个值。 + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **收益**:运行子工作流并等待其完成。 + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16.**错误**:通过指定错误消息来处理错误。 + ```yaml + - error: "Invalid input provided" + ``` + +每种步骤类型在构建复杂的 AI 工作流中都有特定的用途。此分类有助于理解 Julep 任务中可用的各种控制流程和操作。 + + +## 工具类型 + +代理可以访问许多“工具”——基础模型可以使用一组输入“调用”的任何编程接口来实现目标。例如,它可以使用“web_search(query)”工具在互联网上搜索一些信息。 + +与代理框架不同,julep 是管理代理执行的后端。客户端可以使用我们的 SDK 与代理进行交互。julep 负责执行任务和运行集成。 + +julep 中的工具可以是以下之一: + +### 用户定义的函数 + +这些是您可以为模型提供的函数签名,类似于 [openai] 的函数调用工作方式。例如: + +```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: send_notification + description: Send a notification to the user + type: function + function: + parameters: + type: object + properties: + text: + type: string + description: Content of the notification + + main: + - tool: send_notification + arguments: + content: hi +``` + +每当 julep 遇到_用户定义函数_时,它就会暂停,将控制权交还给客户端,并等待客户端运行函数调用并将结果返回给 julep。 + +> [!提示] +> **示例食谱**:[cookbooks/13-Error_Handling_and_Recovery.py](https://github.com/julep-ai/julep/blob/dev/cookbooks/13-Error_Handling_and_Recovery.py) + +### `系统` 工具 +内置工具可用于调用 julep API 本身,例如触发任务执行、附加到元数据字段等。 +“系统”工具内置于后端。它们会在需要时自动执行。它们不需要客户端的任何操作。 + +例如, + + ```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: list_agents + description: List all agents + type: system + system: + resource: agent + operation: list + main: + - tool: list_agents + arguments: + limit: 10 + ``` + +> [!提示] +> **示例食谱**:[cookbooks/10-Document_Management_and_Search.py​​](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py​​) + +### 内置“集成” +Julep 带有许多内置集成(如下节所述)。`集成` 工具直接在 julep 后端执行。它们在运行时所需的任何其他参数都可以在代理/会话/用户的 `元数据` 字段中设置。 + +> [!提示] +> **示例食谱**:[cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +julep 后端附带来自以下提供商的集成第三方工具: +- [composio](https://composio.dev) \*\* +- [匿名](https://anon.com) \*\* +- [langchain 工具包](https://python.langchain.com/v0.2/docs/integrations/toolkits/)。计划支持 _Github、Gitlab、Gmail、Jira、MultiOn、Slack_ 工具包。 + +\*\* 由于 _composio_ 和 _anon_ 是第三方提供商,因此他们的工具需要设置帐户链接。 + + +### 直接 `api_call` + +julep 还可以在工作流执行期间直接以工具调用的形式进行 api 调用。与“集成”相同,其他运行时参数从“元数据”字段加载。 + +例如, + + ```yaml + name: Example api_call task + tools: + - type: api_call + name: hello + api_call: + method: GET + url: https://httpbin.org/get + main: + - tool: hello + arguments: + params: + test: _.input + ``` + +## 集成 + +Julep 支持各种集成,可以扩展您的 AI 代理的功能。以下是可用集成及其支持的参数的列表: + +### 勇敢搜索 + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search ``` -有关使用TypeScript SDK的更多信息,请参阅[TypeScript SDK文档](https://docs.julep.ai/api-reference/js-sdk-docs)。 +> [!提示] +> **示例食谱**:[cookbooks/03-SmartResearcher_With_WebSearch.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/03-SmartResearcher_With_WebSearch.ipynb) ---- +### 浏览器基础 -## 部署 -查看[自托管指南](https://docs.julep.ai/agents/self-hosting)以自行托管平台。 +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase -如果您想将Julep部署到生产环境,[让我们安排一次通话](https://cal.com/ishitaj/15min)! +arguments: + urls: list[string] # The URLs for loading with BrowserBase -我们将帮助您定制平台并帮助您设置: -- 多租户 -- 反向代理以及身份验证和授权 -- 自托管LLMs -- 等等 +output: + documents: list # The documents loaded from the URLs +``` + +### 电子邮件 + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +> [!提示] +> **示例食谱**:[cookbooks/00-Devfest-Email-Assistant.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/00-Devfest-Email-Assistant.ipynb) + +### 蜘蛛 + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +> [!提示] +> **示例食谱**:[cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +### 天气 + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +> [!提示] +> **示例食谱**:[cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +维基百科 + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +> [!提示] +> **示例食谱**:[cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +这些集成可用于您的任务中,以扩展您的 AI 代理的功能。有关如何在您的工作流程中使用这些集成的详细信息,请参阅我们的 [集成文档](https://docs.julep.ai/integrations)。 + +其他功能 + +Julep 提供一系列高级功能来增强您的 AI 工作流程: + +### 向代理添加工具 + +通过集成外部工具和 API 来扩展代理的功能: + +```python +client.agents.tools.create( + agent_id=agent.id, + name="web_search", + description="Search the web for information.", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "your_brave_api_key"}, + }, +) +``` + +### 管理会话和用户 + +Julep 为持久交互提供了强大的会话管理: + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` ---- -## 贡献 -我们欢迎社区的贡献,以帮助改进和扩展Julep AI平台。请查看我们的[贡献指南](CONTRIBUTING.md)以获取更多关于如何开始的信息。 +### 文档集成与搜索 ---- -## 许可证 -Julep AI根据Apache 2.0许可证发布。有关更多详细信息,请参阅[LICENSE](LICENSE)文件。 +轻松管理和搜索代理的文档: ---- -## 联系和支持 -如果您有任何问题、需要帮助或想与Julep AI团队联系,请使用以下渠道: +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +## 本地快速启动 + +**要求**: +- 安装了最新的docker compose + +**步骤**: +1. `git 克隆 https://github.com/julep-ai/julep.git` +2. `cd julep` +3. `docker 卷创建 cozo_backup` +4. `docker 卷创建 cozo_data` +5. `cp .env.example .env # <-- 编辑此文件` +6. `docker compose --env-file .env --profile temporary-ui --profile single-tenant --profile self-hosted-db up --build` + +## SDK 参考 + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +API 参考 + +浏览我们全面的 API 文档,了解有关代理、任务和执行的更多信息: + +- [代理 API](https://api.julep.ai/api/docs#tag/agents) +- [任务 API](https://api.julep.ai/api/docs#tag/tasks) +- [执行 API](https://api.julep.ai/api/docs#tag/executions) + + + -- [Discord](https://discord.com/invite/JTSBGRZrzj):加入我们的社区论坛,讨论想法、提问并从其他Julep AI用户和开发团队获得帮助。 -- GitHub Issues:对于技术问题、错误报告和功能请求,请在Julep AI GitHub仓库上提出issue。 -- 电子邮件支持:如果您需要我们支持团队的直接帮助,请发送电子邮件至hey@julep.ai,我们会尽快回复您。 -- 在[X](https://twitter.com/julep_ai)和[LinkedIn](https://www.linkedin.com/company/julep-ai/)上关注我们获取最新更新 -- [安排一次通话](https://cal.com/ishitaj/15min):我们想了解您正在构建的内容,以及我们如何调整和优化Julep以帮助您构建下一个AI应用程序。 diff --git a/README-FR.md b/README-FR.md new file mode 100644 index 000000000..334db2ed7 --- /dev/null +++ b/README-FR.md @@ -0,0 +1,1086 @@ +[English](README.md) | [中文翻译](README-CN.md) | [日本語翻訳](README-JA.md) | [French](README-FR.md) + +
+ julep +
+ +

+
+ Explorer les documents + · + Discorde + · + 𝕏 + · + LinkedIn +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!REMARQUE] +> 👨‍💻 Vous êtes ici pour l'événement devfest.ai ? Rejoignez notre [Discord](https://discord.com/invite/JTSBGRZrzj) et consultez les détails ci-dessous. +> +> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). + +
+🌟 Contributeurs et participants au DevFest.AI(Cliquez pour agrandir) + +## 🌟 Appel aux contributeurs ! + +Nous sommes ravis d'accueillir de nouveaux contributeurs au projet Julep ! Nous avons créé plusieurs « bons premiers numéros » pour vous aider à démarrer. Voici comment vous pouvez contribuer : + +1. Consultez notre fichier [CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) pour obtenir des instructions sur la façon de contribuer. +2. Parcourez nos [bons premiers numéros](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) pour trouver une tâche qui vous intéresse. +3. Si vous avez des questions ou avez besoin d'aide, n'hésitez pas à nous contacter sur notre chaîne [Discord](https://discord.com/invite/JTSBGRZrzj). + +Vos contributions, grandes ou petites, nous sont précieuses. Construisons ensemble quelque chose d'extraordinaire ! 🚀 + +### 🎉 DevFest.AI octobre 2024 + +Des nouvelles passionnantes ! Nous participons au DevFest.AI tout au long du mois d'octobre 2024 ! 🗓️ + +- Contribuez à Julep pendant cet événement et obtenez une chance de gagner de superbes produits et cadeaux Julep ! 🎁 +- Rejoignez des développeurs du monde entier pour contribuer aux référentiels d'IA et participer à des événements incroyables. +- Un grand merci à DevFest.AI pour l'organisation de cette fantastique initiative ! + +> [!TIP] +> Prêt à vous joindre à la fête ? **[Tweetez que vous participez](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** et commençons à coder ! 🖥️ + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 Table des matières

+ +- [Présentation](#introduction) +- [Exemple rapide](#quick-example) +- [Caractéristiques principales](#key-features) +- [Pourquoi Julep vs. LangChain ?](#pourquoi-julep-vs-langchain) +- [Différents cas d'utilisation](#different-use-cases) +- [Facteur de forme différent](#different-form-factor) +- [En résumé](#en-resumé) +- [Installation](#installation) +- [Démarrage rapide de Python 🐍](#python-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent) +- [Démarrage rapide de Node.js 🟩](#nodejs-quick-start-) +- [Étape 1 : Créer un agent](#step-1-create-an-agent-1) +- [Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [Étape 3 : Exécuter la tâche](#step-3-execute-the-task-1) +- [Étape 4 : discuter avec l'agent](#step-4-chat-with-the-agent-1) +- [Composants](#composants) +- [Modèle mental](#mental-model) +- [Concepts](#concepts) +- [Comprendre les tâches](#understanding-tasks) +- [Types d'étapes de flux de travail](#types-of-workflow-steps) +- [Types d'outils](#types-d'outils) +- [Fonctions définies par l'utilisateur](#user-defined-functions) +- [outils système](#outils-système) +- [Intégrations intégrées](#integrations-integrées) +- [Appels directs d'API](#appels directs d'API) +- [Intégrations](#intégrations) +- [Recherche courageuse](#brave-search) +- [Base du navigateur](#basedunavigateur) +- [Courriel](#courriel) +- [Araignée](#araignée) +- [Météo](#météo) +- [Wikipédia](#wikipédia) +- [Autres fonctionnalités](#other-features) +- [Ajout d'outils aux agents](#adding-tools-to-agents) +- [Gestion des sessions et des utilisateurs](#managing-sessions-and-users) +- [Intégration et recherche de documents](#document-integration-and-search) +- [Démarrage rapide local](#local-quickstart) +- [Référence SDK](#sdk-reference) +- [Référence API](#api-reference) + +
+ + +## Introduction + +Julep est une plateforme permettant de créer des agents IA qui se souviennent des interactions passées et peuvent effectuer des tâches complexes. Elle offre une mémoire à long terme et gère des processus en plusieurs étapes. + +Julep permet la création de tâches en plusieurs étapes intégrant la prise de décision, les boucles, le traitement parallèle et l'intégration avec de nombreux outils et API externes. + +Alors que de nombreuses applications d’IA se limitent à des chaînes simples et linéaires d’invites et d’appels d’API avec une ramification minimale, Julep est conçu pour gérer des scénarios plus complexes. + +Il prend en charge : +- Processus complexes en plusieurs étapes +- Prise de décision dynamique +- Exécution parallèle + +> [!TIP] +> Imaginez que vous souhaitiez créer un agent d'IA capable de faire plus que simplement répondre à des questions simples : il doit gérer des tâches complexes, se souvenir des interactions passées et peut-être même utiliser d'autres outils ou API. C'est là qu'intervient Julep. + +## Exemple rapide + +Imaginez un agent d’IA de recherche capable d’effectuer les opérations suivantes : +1. Prenez un sujet, +2. Proposez 100 requêtes de recherche pour ce sujet, +3. Effectuez ces recherches sur le Web en parallèle, +4. Résumez les résultats, +5. Envoyez le résumé sur Discord + +Dans Julep, ce serait une tâche unique sous80 lignes de codeet courirentièrement gérétout seul. Toutes les étapes sont exécutées sur les propres serveurs de Julep et vous n'avez pas besoin de lever le petit doigt. Voici un exemple fonctionnel : + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# Define the tools that the agent can use +tools: +- name: web_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_BRAVE_API_KEY" + +- name: discord_webhook + type: api_call + api_call: + url: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!TIP] +> Julep est vraiment utile lorsque vous souhaitez créer des agents IA capables de conserver le contexte et l'état lors d'interactions à long terme. Il est idéal pour concevoir des flux de travail complexes en plusieurs étapes et pour intégrer divers outils et API directement dans les processus de votre agent. +> +> Dans cet exemple, Julep gérera automatiquement les exécutions parallèles, réessayera les étapes ayant échoué, renverra les requêtes API et maintiendra les tâches en cours d'exécution de manière fiable jusqu'à leur achèvement. + +## Principales caractéristiques + +1. 🧠 **Agents IA persistants** : mémorisent le contexte et les informations au cours d'interactions à long terme. +2. 💾 **Sessions avec état** : gardez une trace des interactions passées pour des réponses personnalisées. +3. 🔄 **Tâches en plusieurs étapes** : créez des processus complexes en plusieurs étapes avec des boucles et une prise de décision. +4. ⏳ **Gestion des tâches** : gérez les tâches de longue durée qui peuvent s'exécuter indéfiniment. +5. 🛠️ **Outils intégrés** : utilisez des outils intégrés et des API externes dans vos tâches. +6. 🔧 **Auto-réparation** : Julep réessaiera automatiquement les étapes ayant échoué, renverra les messages et assurera généralement le bon déroulement de vos tâches. +7. 📚 **RAG** ​​: Utilisez le magasin de documents de Julep pour créer un système permettant de récupérer et d'utiliser vos propres données. + +Julep est idéal pour les applications qui nécessitent des cas d’utilisation de l’IA au-delà des simples modèles de réponse rapide. + +## Pourquoi Julep vs. LangChain ? + +### Différents cas d'utilisation + +Considérez LangChain et Julep comme des outils avec des objectifs différents au sein de la pile de développement de l’IA. + +LangChain est idéal pour créer des séquences d'invites et gérer les interactions avec les modèles d'IA. Il dispose d'un vaste écosystème avec de nombreuses intégrations prédéfinies, ce qui le rend pratique si vous souhaitez mettre en place quelque chose rapidement. LangChain s'adapte bien aux cas d'utilisation simples qui impliquent une chaîne linéaire d'invites et d'appels d'API. + +Julep, en revanche, s'intéresse davantage à la création d'agents d'IA persistants capables de mémoriser des éléments au cours d'interactions à long terme. Il est particulièrement efficace lorsque vous avez besoin de tâches complexes impliquant plusieurs étapes, une prise de décision et une intégration avec divers outils ou API directement dans le processus de l'agent. Il est conçu dès le départ pour gérer les sessions persistantes et les tâches complexes. + +Utilisez Julep si vous imaginez créer un assistant IA complexe qui doit : + +- Suivez les interactions des utilisateurs sur plusieurs jours ou semaines. +- Exécutez des tâches planifiées, comme l'envoi de résumés quotidiens ou la surveillance de sources de données. +- Prendre des décisions basées sur des interactions antérieures ou des données stockées. +- Interagir avec plusieurs services externes dans le cadre de sa mission. + +Ensuite, Julep fournit l’infrastructure pour prendre en charge tout cela sans que vous ayez à le construire à partir de zéro. + +### Facteur de forme différent + +Julep est une **plateforme** qui comprend un langage pour décrire les tâches, un serveur pour exécuter ces tâches et un SDK pour interagir avec la plateforme. Pour créer quelque chose avec Julep, vous écrivez une description de la tâche en YAML, puis vous exécutez la tâche dans le cloud. + +Julep est conçu pour les tâches lourdes, en plusieurs étapes et de longue durée, et il n'y a aucune limite à la complexité de la tâche. + +LangChain est une **bibliothèque** qui inclut quelques outils et un framework pour créer des chaînes linéaires d'invites et d'outils. Pour créer quelque chose avec LangChain, vous écrivez généralement du code Python qui configure et exécute les chaînes de modèles que vous souhaitez utiliser. + +LangChain pourrait être suffisant et plus rapide à mettre en œuvre pour les cas d'utilisation simples impliquant une chaîne linéaire d'invites et d'appels d'API. + +### En résumé + +Utilisez LangChain lorsque vous devez gérer les interactions des modèles d’IA et les séquences d’invite dans un contexte sans état ou à court terme. + +Choisissez Julep lorsque vous avez besoin d'un framework robuste pour les agents avec état avec des capacités de tâches avancées, des sessions persistantes et une gestion de tâches complexes. + +## Installation + +Pour commencer à utiliser Julep, installez-le en utilisant [npm](https://www.npmjs.com/package/@julep/sdk) ou [pip](https://pypi.org/project/julep/) : + +```bash +npm install @julep/sdk +``` + +ou + +```bash +pip install julep +``` + +> [!REMARQUE] +> Obtenez votre clé API [ici](https://dashboard-dev.julep.ai). +> +> Pendant que nous sommes en version bêta, vous pouvez également nous contacter sur [Discord](https://discord.com/invite/JTSBGRZrzj) pour obtenir la levée des limites de débit sur votre clé API. + +> [!TIP] +> 💻 Êtes-vous du genre à vouloir _montrer le code !™_ ? Nous avons créé une multitude de livres de recettes pour vous aider à démarrer. **Consultez les [livres de recettes](https://github.com/julep-ai/julep/tree/dev/cookbooks)** pour parcourir les exemples. +> +> 💡 Il existe également de nombreuses idées que vous pouvez développer en plus de Julep. **Consultez la [liste d'idées](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** pour vous inspirer. + +## Démarrage rapide de Python 🐍 + +### Étape 1 : Créer un agent + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +client.agents.tools.create( + agent_id=agent.id, + name="image_generator", + description="Use this tool to generate images based on descriptions.", + integration={ + "provider": "dalle", + "method": "generate_image", + "setup": { + "api_key": "your_openai_api_key", + }, + }, +) +``` + +### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée + +Définissons une tâche en plusieurs étapes pour créer une histoire et générer une bande dessinée à panneaux basée sur une idée d'entrée : + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### Étape 3 : Exécuter la tâche + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### Étape 4 : Discuter avec l'agent + +Démarrez une session de chat interactive avec l'agent : + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!TIP] +> Vous pouvez trouver l'exemple Python complet [ici](example.py). + + +## Démarrage rapide de Node.js 🟩 + +### Étape 1 : Créer un agent + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### Étape 2 : Créer une tâche qui génère une histoire et une bande dessinée + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### Étape 3 : Exécuter la tâche + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### Étape 4 : Discuter avec l'agent + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!TIP] +> Vous pouvez trouver l'exemple complet de Node.js [ici](example.js). + +## Composants + +Julep est composé des éléments suivants : + +- **Plateforme Julep** : la plateforme Julep est un service cloud qui exécute vos workflows. Elle comprend un langage pour décrire les workflows, un serveur pour exécuter ces workflows et un SDK pour interagir avec la plateforme. +- **SDK Julep** : les SDK Julep sont un ensemble de bibliothèques permettant de créer des workflows. Il existe des SDK pour Python et JavaScript, et d'autres sont en cours de développement. +- **API Julep** : L'API Julep est une API RESTful que vous pouvez utiliser pour interagir avec la plateforme Julep. + +### Modèle mental + +
+ +
+ +Considérez Julep comme une plateforme qui combine des composants côté client et côté serveur pour vous aider à créer des agents d'IA avancés. Voici comment le visualiser : + +1. **Votre code d'application :** +- Vous utilisez le SDK Julep dans votre application pour définir des agents, des tâches et des workflows. +- Le SDK fournit des fonctions et des classes qui facilitent la configuration et la gestion de ces composants. + +2. **Service back-end Julep :** +- Le SDK communique avec le backend Julep via le réseau. +- Le backend gère l'exécution des tâches, maintient l'état de la session, stocke les documents et orchestre les flux de travail. + +3. **Intégration avec les outils et les API :** +- Au sein de vos workflows, vous pouvez intégrer des outils et services externes. +- Le backend facilite ces intégrations, afin que vos agents puissent, par exemple, effectuer des recherches sur le Web, accéder à des bases de données ou appeler des API tierces. + +En termes plus simples : +- Julep est une plateforme permettant de créer des agents d'IA avec état. +- Vous utilisez le SDK (comme une boîte à outils) dans votre code pour définir ce que font vos agents. +- Le service backend (que vous pouvez considérer comme le moteur) exécute ces définitions, gère l'état et gère la complexité. + +## Concepts + +Julep s'appuie sur plusieurs composants techniques clés qui fonctionnent ensemble pour créer de puissants flux de travail d'IA : + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **Agents** : entités alimentées par l'IA et soutenues par de grands modèles linguistiques (LLM) qui exécutent des tâches et interagissent avec les utilisateurs. +- **Utilisateurs** : entités qui interagissent avec les agents via des sessions. +- **Sessions** : interactions avec état entre agents et utilisateurs, maintenant le contexte sur plusieurs échanges. +- **Tâches** : flux de travail programmatiques en plusieurs étapes que les agents peuvent exécuter, y compris différents types d'étapes telles que des invites, des appels d'outils et une logique conditionnelle. +- **Outils** : intégrations qui étendent les capacités d'un agent, y compris les fonctions définies par l'utilisateur, les outils système ou les intégrations d'API tierces. +- **Documents** : Objets textes ou données associés à des agents ou utilisateurs, vectorisés et stockés pour la recherche et la récupération sémantiques. +- **Exécutions** : instances de tâches qui ont été initiées avec des entrées spécifiques, avec leur propre cycle de vie et leur propre machine d'état. + +Pour une explication plus détaillée de ces concepts et de leurs interactions, veuillez vous référer à notre [Documentation sur les concepts](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md). + +## Comprendre les tâches + +Les tâches sont au cœur du système de workflow de Julep. Elles vous permettent de définir des workflows IA complexes en plusieurs étapes que vos agents peuvent exécuter. Voici un bref aperçu des composants des tâches : + +- **Nom et description** : Chaque tâche a un nom et une description uniques pour une identification facile. +- **Étapes principales** : Le cœur d’une tâche, définissant la séquence d’actions à effectuer. +- **Outils** : intégrations facultatives qui étendent les capacités de votre agent pendant l'exécution des tâches. + +### Types d'étapes de flux de travail + +Les tâches dans Julep peuvent inclure différents types d'étapes, ce qui vous permet de créer des flux de travail complexes et puissants. Voici un aperçu des types d'étapes disponibles, organisés par catégorie : + +#### Étapes courantes + +1. **Invite** : envoyez un message au modèle d’IA et recevez une réponse. + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **Appel d'outil** : Exécutez un outil ou une API intégrée. + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **Évaluer** : Effectuer des calculs ou manipuler des données. + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **Attendre l'entrée** : mettre le flux de travail en pause jusqu'à ce que l'entrée soit reçue. + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **Journal** : Enregistrer une valeur ou un message spécifié. + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### Étapes clé-valeur + +6. **Get** : récupérer une valeur à partir d'un magasin clé-valeur. + ```yaml + - get: "user_preference" + ``` + +7. **Set** : attribuez une valeur à une clé dans un magasin clé-valeur. + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### Étapes d'itération + +8. **Foreach** : itérer sur une collection et effectuer des étapes pour chaque élément. + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce** : Cartographiez une collection et réduisez les résultats. + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **Parallèle** : exécuter plusieurs étapes en parallèle. + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### Étapes conditionnelles + +11. **If-Else** : Exécution conditionnelle des étapes. + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **Switch** : exécuter des étapes en fonction de plusieurs conditions. + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### Autre flux de contrôle + +13. **Veille** : met le flux de travail en pause pendant une durée spécifiée. + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Retour** : renvoie une valeur du flux de travail. + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Rendement** : Exécutez un sous-flux de travail et attendez sa fin. + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **Erreur** : gérez les erreurs en spécifiant un message d’erreur. + ```yaml + - error: "Invalid input provided" + ``` + +Chaque type d'étape remplit un objectif spécifique dans la création de workflows d'IA sophistiqués. Cette catégorisation permet de comprendre les différents flux de contrôle et opérations disponibles dans les tâches Julep. + + +## Types d'outils + +Les agents peuvent avoir accès à un certain nombre d'« outils » : toute interface de programmation qu'un modèle de base peut « appeler » avec un ensemble d'entrées pour atteindre un objectif. Par exemple, il peut utiliser un outil « web_search(query) » pour rechercher des informations sur Internet. + +Contrairement aux frameworks d'agents, Julep est un backend qui gère l'exécution des agents. Les clients peuvent interagir avec les agents à l'aide de nos SDK. Julep s'occupe de l'exécution des tâches et de l'exécution des intégrations. + +Les outils du julep peuvent être l’un des suivants : + +### Fonctions définies par l'utilisateur + +Il s'agit de signatures de fonctions que vous pouvez attribuer au modèle pour qu'il puisse choisir, de la même manière que fonctionne l'appel de fonctions d'[openai]. Un exemple : + +```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: send_notification + description: Send a notification to the user + type: function + function: + parameters: + type: object + properties: + text: + type: string + description: Content of the notification + + main: + - tool: send_notification + arguments: + content: hi +``` + +Chaque fois que julep rencontre une _fonction définie par l'utilisateur_, il s'arrête, rend le contrôle au client et attend que le client exécute l'appel de fonction et renvoie les résultats à julep. + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/13-Error_Handling_and_Recovery.py](https://github.com/julep-ai/julep/blob/dev/cookbooks/13-Error_Handling_and_Recovery.py) + +### outils `système` +Outils intégrés qui peuvent être utilisés pour appeler les API julep elles-mêmes, comme déclencher l'exécution d'une tâche, ajouter à un champ de métadonnées, etc. +Les outils « système » sont intégrés au backend. Ils sont exécutés automatiquement lorsque cela est nécessaire. Ils ne nécessitent aucune action du côté client. + +Par exemple, + + ```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: list_agents + description: List all agents + type: system + system: + resource: agent + operation: list + main: + - tool: list_agents + arguments: + limit: 10 + ``` + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/10-Document_Management_and_Search.py](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py) + +### Intégrations intégrées +Julep est livré avec un certain nombre d'intégrations intégrées (comme décrit dans la section ci-dessous). Les outils « d'intégration » sont directement exécutés sur le backend de Julep. Tous les paramètres supplémentaires dont ils ont besoin au moment de l'exécution peuvent être définis dans les champs « métadonnées » de l'agent/session/utilisateur. + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +Le backend Julep est livré avec des outils tiers intégrés provenant des fournisseurs suivants : +- [composio](https://composio.dev) \*\* +- [anonyme](https://anon.com) \*\* +- [kits d'outils langchain](https://python.langchain.com/v0.2/docs/integrations/toolkits/). La prise en charge des kits d'outils _Github, Gitlab, Gmail, Jira, MultiOn, Slack_ est prévue. + +\*\* Étant donné que _composio_ et _anon_ sont des fournisseurs tiers, leurs outils nécessitent la configuration d'une liaison de compte. + + +### Appels directs `api_call` + +julep peut également effectuer directement des appels d'API lors des exécutions de workflows sous forme d'appels d'outils. Comme pour `integration`, des paramètres d'exécution supplémentaires sont chargés à partir des champs `metadata`. + +Par exemple, + + ```yaml + name: Example api_call task + tools: + - type: api_call + name: hello + api_call: + method: GET + url: https://httpbin.org/get + main: + - tool: hello + arguments: + params: + test: _.input + ``` + +## Intégrations + +Julep prend en charge diverses intégrations qui étendent les capacités de vos agents IA. Voici une liste des intégrations disponibles et de leurs arguments pris en charge : + +### Recherche courageuse + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/03-SmartResearcher_With_WebSearch.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/03-SmartResearcher_With_WebSearch.ipynb) + +### Base de navigateur + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### E-mail + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/00-Devfest-Email-Assistant.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/00-Devfest-Email-Assistant.ipynb) + +### Araignée + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +### Météo + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +### Wikipédia + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +> [!TIP] +> **Exemple de livre de recettes** : [cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +Ces intégrations peuvent être utilisées dans vos tâches pour étendre les capacités de vos agents IA. Pour des informations plus détaillées sur la manière d'utiliser ces intégrations dans vos workflows, veuillez consulter notre [Documentation sur les intégrations](https://docs.julep.ai/integrations). + +## Autres fonctionnalités + +Julep propose une gamme de fonctionnalités avancées pour améliorer vos flux de travail d'IA : + +### Ajout d'outils aux agents + +Étendez les capacités de votre agent en intégrant des outils et des API externes : + +```python +client.agents.tools.create( + agent_id=agent.id, + name="web_search", + description="Search the web for information.", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "your_brave_api_key"}, + }, +) +``` + +### Gestion des sessions et des utilisateurs + +Julep fournit une gestion de session robuste pour les interactions persistantes : + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### Intégration et recherche de documents + +Gérez et recherchez facilement des documents pour vos agents : + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +## Démarrage rapide local + +**Exigences**: +- dernier docker compose installé + +**Mesures**: +1. `git clone https://github.com/julep-ai/julep.git` +2. `cd julep` +3. `docker volume create cozo_backup` +4. `docker volume create cozo_data` +5. `cp .env.example .env # <-- Modifier ce fichier` +6. `docker compose --env-file .env --profile temporal-ui --profile single-tenant --profile self-hosted-db up --build` + +## Référence du SDK + +- [Kit de développement logiciel Node.js](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [SDK Python](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## Référence API + +Explorez notre documentation API complète pour en savoir plus sur les agents, les tâches et les exécutions : + +- [API des agents](https://api.julep.ai/api/docs#tag/agents) +- [API des tâches](https://api.julep.ai/api/docs#tag/tasks) +- [API d'exécution](https://api.julep.ai/api/docs#tag/executions) + + + + diff --git a/README-JA.md b/README-JA.md new file mode 100644 index 000000000..e31e512a7 --- /dev/null +++ b/README-JA.md @@ -0,0 +1,1086 @@ +[English](README.md) | [中文翻译](README-CN.md) | [日本語翻訳](README-JA.md) | [French](README-FR.md) + +
+ julep +
+ +

+
+ ドキュメントを見る + · + 不和 + · + 𝕏 + · + リンクトイン +

+ + +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

+ +***** + +> [!注意] +> 👨‍💻 devfest.ai イベントに参加しませんか? [Discord](https://discord.com/invite/JTSBGRZrzj) に参加して、以下の詳細を確認してください。 +> +> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 + +
+🌟 貢献者とDevFest.AI参加者(クリックして拡大) + +## 🌟 貢献者を募集します! + +Julep プロジェクトに新しい貢献者を迎えられることを嬉しく思います。プロジェクトを始めるのに役立つ「最初の良い問題」をいくつか作成しました。貢献する方法は次のとおりです。 + +1. 貢献方法に関するガイドラインについては、[CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) ファイルをご覧ください。 +2. [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) を参照して、興味のあるタスクを見つけます。 +3. ご質問やご不明な点がございましたら、[Discord](https://discord.com/invite/JTSBGRZrzj) チャンネルまでお気軽にお問い合わせください。 + +あなたの貢献は、大小を問わず私たちにとって貴重です。一緒に素晴らしいものを作りましょう!🚀 + +### 🎉 DevFest.AI 2024年10月 + +嬉しいニュースです!2024 年 10 月を通して DevFest.AI に参加します!🗓️ + +- このイベント中に Julep に貢献すると、素晴らしい Julep のグッズや景品を獲得するチャンスが得られます! 🎁 +- 世界中の開発者とともに AI リポジトリに貢献し、素晴らしいイベントに参加しましょう。 +- この素晴らしい取り組みを企画してくださった DevFest.AI に心から感謝します。 + +> [!ヒント] +> 楽しみに参加する準備はできましたか? **[参加することをツイート](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)**して、コーディングを始めましょう! 🖥️ + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 目次

+ +- [はじめに](#introduction) +- [簡単な例](#quick-example) +- [主な機能](#key-features) +- [なぜ Julep と LangChain を比較するのか?](#why-julep-vs-langchain) +- [さまざまなユースケース](#different-use-cases) +- [異なるフォームファクター](#different-form-factor) +- [要約](#in-summary) +- [インストール](#installation) +- [Python クイックスタート 🐍](#python-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent) +- [Node.js クイック スタート 🟩](#nodejs-quick-start-) +- [ステップ 1: エージェントを作成する](#step-1-create-an-agent-1) +- [ステップ 2: ストーリーとコミック ストリップを生成するタスクを作成する](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) +- [ステップ 3: タスクを実行する](#step-3-execute-the-task-1) +- [ステップ 4: エージェントとチャットする](#step-4-chat-with-the-agent-1) +- [コンポーネント](#components) +- [メンタルモデル](#mental-model) +- [コンセプト](#concepts) +- [タスクの理解](#understanding-tasks) +- [ワークフロー ステップの種類](#types-of-workflow-steps) +- [ツールの種類](#tool-types) +- [ユーザー定義の `function`](#user-defined-functions) +- [`システム` ツール](#system-tools) +- [組み込みの `integration`s](#built-in-integrations) +- [直接の `api_call`](#direct-api_calls) +- [統合](#integrations) +- [勇敢な検索](#brave-search) +- [ブラウザベース](#browserbase) +- [メールアドレス](#email) +- [スパイダー](#spider) +- [天気](#weather) +- [ウィキペディア](#wikipedia) +- [その他の機能](#other-features) +- [エージェントへのツールの追加](#adding-tools-to-agents) +- [セッションとユーザーの管理](#managing-sessions-and-users) +- [ドキュメントの統合と検索](#document-integration-and-search) +- [ローカルクイックスタート](#local-quickstart) +- [SDKリファレンス](#sdk-reference) +- [API リファレンス](#api-reference) + +
+ + +## 導入 + +Julep は、過去のやり取りを記憶し、複雑なタスクを実行できる AI エージェントを作成するためのプラットフォームです。長期記憶を提供し、複数ステップのプロセスを管理します。 + +Julep を使用すると、意思決定、ループ、並列処理、多数の外部ツールや API との統合を組み込んだ複数ステップのタスクを作成できます。 + +多くの AI アプリケーションは、分岐が最小限の、プロンプトと API 呼び出しの単純な線形チェーンに制限されていますが、Julep はより複雑なシナリオを処理できるように構築されています。 + +サポート対象: +- 複雑で多段階のプロセス +- ダイナミックな意思決定 +- 並列実行 + +> [!ヒント] +> 単純な質問に答えるだけでなく、複雑なタスクを処理し、過去のやり取りを記憶し、場合によっては他のツールや API も使用できる AI エージェントを構築したいとします。そこで Julep の出番です。 + +## 簡単な例 + +次のことができる研究 AI エージェントを想像してください。 +1. トピックを取り上げ、 +2. そのトピックについて100個の検索クエリを考えます。 +3. ウェブ検索を並行して実行する +4. 結果をまとめる +5.要約をDiscordに送信する + +Julepでは、これは単一のタスクになります80行のコードそして走る完全に管理されたすべては Julep のサーバー上で実行されます。すべての手順は Julep のサーバー上で実行されるため、何もする必要はありません。次に動作例を示します。 + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# Define the tools that the agent can use +tools: +- name: web_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_BRAVE_API_KEY" + +- name: discord_webhook + type: api_call + api_call: + url: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!ヒント] +> Julep は、長期的なインタラクションを通じてコン​​テキストと状態を維持できる AI エージェントを構築する場合に非常に便利です。複雑な複数ステップのワークフローを設計し、さまざまなツールや API をエージェントのプロセスに直接統合するのに最適です。 +> +> この例では、Julep は並列実行を自動的に管理し、失敗したステップを再試行し、API リクエストを再送信し、タスクが完了するまで確実に実行し続けます。 + +## 主な特徴 + +1. 🧠 **永続的な AI エージェント**: 長期にわたるやり取りを通じてコン​​テキストと情報を記憶します。 +2. 💾 **ステートフル セッション**: 過去のやり取りを追跡して、パーソナライズされた応答を提供します。 +3. 🔄 **複数ステップのタスク**: ループと意思決定を使用して、複雑な複数ステップのプロセスを構築します。 +4. ⏳ **タスク管理**: 無期限に実行される可能性のある長時間実行タスクを処理します。 +5. 🛠️ **組み込みツール**: タスクで組み込みツールと外部 API を使用します。 +6. 🔧 **自己修復**: Julep は失敗したステップを自動的に再試行し、メッセージを再送信し、タスクをスムーズに実行し続けます。 +7. 📚 **RAG**: Julep のドキュメント ストアを使用して、独自のデータを取得して使用するためのシステムを構築します。 + +Julep は、単純なプロンプト応答モデルを超えた AI ユースケースを必要とするアプリケーションに最適です。 + +## Julep と LangChain を比較する理由 + +### さまざまなユースケース + +LangChain と Julep は、AI 開発スタック内で異なる重点を置いたツールと考えてください。 + +LangChain は、プロンプトのシーケンスを作成し、AI モデルとのやり取りを管理するのに最適です。多数の事前構築された統合を備えた大規模なエコシステムを備えているため、何かをすぐに立ち上げて実行したい場合に便利です。LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースに適しています。 + +一方、Julep は、長期的なインタラクションを通じて物事を記憶できる永続的な AI エージェントの構築に重点を置いています。エージェントのプロセス内で複数のステップ、意思決定、さまざまなツールや API との直接統合を伴う複雑なタスクが必要な場合に効果を発揮します。永続的なセッションと複雑なタスクを管理するために、ゼロから設計されています。 + +以下のことが必要となる複雑な AI アシスタントの構築を考えている場合には、Julep を使用してください。 + +- 数日または数週間にわたってユーザーのインタラクションを追跡します。 +- 毎日のサマリーの送信やデータ ソースの監視などのスケジュールされたタスクを実行します。 +- 以前のやり取りや保存されたデータに基づいて決定を下します。 +- タスクの一部として複数の外部サービスと対話します。 + +そして、Julep は、ゼロから構築する必要なく、これらすべてをサポートするインフラストラクチャを提供します。 + +### 異なるフォームファクタ + +Julep は、タスクを記述するための言語、それらのタスクを実行するためのサーバー、プラットフォームと対話するための SDK を含む **プラットフォーム** です。Julep で何かを構築するには、タスクの説明を `YAML` で記述し、クラウドでタスクを実行します。 + +Julep は、負荷の高い、複数のステップから成る、長時間実行されるタスク向けに構築されており、タスクの複雑さに制限はありません。 + +LangChain は、プロンプトとツールの線形チェーンを構築するためのいくつかのツールとフレームワークを含む **ライブラリ** です。LangChain を使用して何かを構築するには、通常、使用するモデル チェーンを設定して実行する Python コードを記述します。 + +LangChain は、プロンプトと API 呼び出しの線形チェーンを含む単純なユースケースでは十分であり、実装も迅速です。 + +### 要約すれば + +ステートレスまたは短期的なコンテキストで AI モデルのインタラクションとプロンプト シーケンスを管理する必要がある場合は、LangChain を使用します。 + +高度なタスク機能、永続的なセッション、複雑なタスク管理を備えたステートフル エージェント用の堅牢なフレームワークが必要な場合は、Julep を選択してください。 + +## インストール + +Julep を使い始めるには、[npm](https://www.npmjs.com/package/@julep/sdk) または [pip](https://pypi.org/project/julep/) を使用してインストールします。 + +```bash +npm install @julep/sdk +``` + +または + +```bash +pip install julep +``` + +> [!注意] +> API キーを [こちら](https://dashboard-dev.julep.ai) から取得します。 +> +> ベータ版では、[Discord](https://discord.com/invite/JTSBGRZrzj) に連絡して、API キーのレート制限を解除することもできます。 + +> [!ヒント] +> 💻 あなたは「コードを見せてください!™」タイプの人ですか? 始めるにあたって役立つクックブックを多数作成しました。**[クックブック](https://github.com/julep-ai/julep/tree/dev/cookbooks)** をチェックして、例を参照してください。 +> +> 💡 Julep をベースに構築できるアイデアもたくさんあります。**[アイデアのリスト](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** をチェックして、インスピレーションを得てください。 + +## Python クイックスタート 🐍 + +### ステップ 1: エージェントを作成する + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +client.agents.tools.create( + agent_id=agent.id, + name="image_generator", + description="Use this tool to generate images based on descriptions.", + integration={ + "provider": "dalle", + "method": "generate_image", + "setup": { + "api_key": "your_openai_api_key", + }, + }, +) +``` + +### ステップ2: ストーリーと漫画を生成するタスクを作成する + +入力されたアイデアに基づいてストーリーを作成し、パネル化された漫画を生成するためのマルチステップタスクを定義しましょう。 + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### ステップ3: タスクを実行する + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### ステップ4: エージェントとチャットする + +エージェントとの対話型チャット セッションを開始します。 + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!ヒント] +> 完全な Python の例は [ここ](example.py) にあります。 + + +## Node.js クイックスタート 🟩 + +### ステップ 1: エージェントを作成する + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### ステップ2: ストーリーと漫画を生成するタスクを作成する + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### ステップ3: タスクを実行する + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### ステップ4: エージェントとチャットする + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!ヒント] +> 完全な Node.js の例は [ここ](example.js) にあります。 + +## コンポーネント + +Julep は次のコンポーネントで構成されています。 + +- **Julep プラットフォーム**: Julep プラットフォームは、ワークフローを実行するクラウド サービスです。ワークフローを記述するための言語、ワークフローを実行するためのサーバー、プラットフォームと対話するための SDK が含まれています。 +- **Julep SDK**: Julep SDK は、ワークフローを構築するためのライブラリのセットです。Python 用と JavaScript 用の SDK があり、今後さらに追加される予定です。 +- **Julep API**: Julep API は、Julep プラットフォームと対話するために使用できる RESTful API です。 + +### メンタルモデル + +
+ +
+ +Julep は、クライアント側とサーバー側の両方のコンポーネントを組み合わせて、高度な AI エージェントの構築を支援するプラットフォームと考えてください。これを視覚化する方法は次のとおりです。 + +1. **アプリケーションコード:** +- アプリケーションで Julep SDK を使用して、エージェント、タスク、ワークフローを定義します。 +- SDK は、これらのコンポーネントのセットアップと管理を容易にする関数とクラスを提供します。 + +2. **Julep バックエンド サービス:** +- SDK はネットワーク経由で Julep バックエンドと通信します。 +- バックエンドは、タスクの実行を処理し、セッション状態を維持し、ドキュメントを保存し、ワークフローを調整します。 + +3. **ツールとAPIとの統合:** +- ワークフロー内で、外部ツールやサービスを統合できます。 +- バックエンドはこれらの統合を容易にするため、エージェントは、たとえば、Web 検索を実行したり、データベースにアクセスしたり、サードパーティの API を呼び出したりすることができます。 + +もっと簡単に言うと: +- Julep は、ステートフル AI エージェントを構築するためのプラットフォームです。 +- コード内で SDK (ツールキットのようなもの) を使用して、エージェントの動作を定義します。 +- バックエンド サービス (エンジンと考えることができます) は、これらの定義を実行し、状態を管理し、複雑さを処理します。 + +## コンセプト + +Julep は、強力な AI ワークフローを作成するために連携するいくつかの主要な技術コンポーネントに基づいて構築されています。 + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **エージェント**: タスクを実行し、ユーザーと対話する大規模言語モデル (LLM) を搭載した AI 搭載エンティティ。 +- **ユーザー**: セッションを通じてエージェントと対話するエンティティ。 +- **セッション**: エージェントとユーザー間のステートフルなやり取り。複数のやり取りにわたってコンテキストを維持します。 +- **タスク**: プロンプト、ツール呼び出し、条件付きロジックなどのさまざまな種類のステップを含む、エージェントが実行できる複数ステップのプログラム ワークフロー。 +- **ツール**: ユーザー定義関数、システム ツール、サードパーティ API 統合など、エージェントの機能を拡張する統合。 +- **ドキュメント**: エージェントまたはユーザーに関連付けられたテキストまたはデータ オブジェクト。セマンティック検索と取得のためにベクトル化され、保存されます。 +- **実行**: 特定の入力で開始され、独自のライフサイクルとステート マシンを持つタスクのインスタンス。 + +これらの概念とその相互作用の詳細な説明については、[概念ドキュメント](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)を参照してください。 + +## タスクを理解する + +タスクは Julep のワークフロー システムの中核です。タスクを使用すると、エージェントが実行できる複雑な複数ステップの AI ワークフローを定義できます。タスク コンポーネントの概要は次のとおりです。 + +- **名前と説明**: 各タスクには、簡単に識別できるように一意の名前と説明が付いています。 +- **メインステップ**: タスクの中核であり、実行されるアクションのシーケンスを定義します。 +- **ツール**: タスク実行中にエージェントの機能を拡張するオプションの統合。 + +### ワークフローステップの種類 + +Julep のタスクにはさまざまな種類のステップを含めることができるため、複雑で強力なワークフローを作成できます。利用可能なステップの種類の概要をカテゴリ別にまとめると次のようになります。 + +#### 一般的な手順 + +1. **プロンプト**: AI モデルにメッセージを送信し、応答を受信します。 + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **ツール呼び出し**: 統合ツールまたは API を実行します。 + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **評価**: 計算を実行したり、データを操作したりします。 + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **入力を待機**: 入力が受信されるまでワークフローを一時停止します。 + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **ログ**: 指定された値またはメッセージをログに記録します。 + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### キー値ステップ + +6. **Get**: キー値ストアから値を取得します。 + ```yaml + - get: "user_preference" + ``` + +7. **Set**: キー値ストア内のキーに値を割り当てます。 + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### 反復ステップ + +8. **Foreach**: コレクションを反復処理し、各項目に対して手順を実行します。 + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**: コレクションをマップし、結果を縮小します。 + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **並列**: 複数のステップを並列に実行します。 + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### 条件付きステップ + +11. **If-Else**: ステップの条件付き実行。 + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **スイッチ**: 複数の条件に基づいてステップを実行します。 + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### その他の制御フロー + +13. **スリープ**: 指定した期間、ワークフローを一時停止します。 + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Return**: ワークフローから値を返します。 + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Yield**: サブワークフローを実行し、完了を待ちます。 + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **エラー**: エラー メッセージを指定してエラーを処理します。 + ```yaml + - error: "Invalid input provided" + ``` + +各ステップ タイプは、高度な AI ワークフローを構築する上で特定の目的を果たします。この分類は、Julep タスクで使用できるさまざまな制御フローと操作を理解するのに役立ちます。 + + +## ツールの種類 + +エージェントには、さまざまな「ツール」へのアクセスを許可できます。これは、基盤モデルが一連の入力を使用して「呼び出す」ことができるプログラム インターフェイスです。たとえば、インターネットで何らかの情報を検索するには、`web_search(query)` ツールを使用します。 + +エージェント フレームワークとは異なり、julep はエージェントの実行を管理する _バックエンド_ です。クライアントは SDK を使用してエージェントと対話できます。julep はタスクの実行と統合の実行を担当します。 + +julep のツールは次のいずれかになります。 + +### ユーザー定義の `function` + +これらは、[openai] の関数呼び出しの仕組みと同様に、モデルに選択させることができる関数シグネチャです。例: + +```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: send_notification + description: Send a notification to the user + type: function + function: + parameters: + type: object + properties: + text: + type: string + description: Content of the notification + + main: + - tool: send_notification + arguments: + content: hi +``` + +julep は、_ユーザー定義関数_ に遭遇するたびに一時停止し、制御をクライアントに戻し、クライアントが関数呼び出しを実行して結果を julep に返すのを待ちます。 + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/13-Error_Handling_and_Recovery.py](https://github.com/julep-ai/julep/blob/dev/cookbooks/13-Error_Handling_and_Recovery.py) + +### `システム` ツール +タスク実行のトリガー、メタデータ フィールドへの追加など、julep API 自体を呼び出すために使用できる組み込みツール。 +`system` ツールはバックエンドに組み込まれています。必要に応じて自動的に実行されます。クライアント側からのアクションは必要ありません。 + +例えば、 + + ```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: list_agents + description: List all agents + type: system + system: + resource: agent + operation: list + main: + - tool: list_agents + arguments: + limit: 10 + ``` + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/10-Document_Management_and_Search.py​​](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py​​) + +### 組み込みの `integration` +Julep には、多数の組み込み統合が付属しています (以下のセクションで説明)。`integration` ツールは、julep バックエンドで直接実行されます。実行時に必要な追加パラメータは、エージェント/セッション/ユーザーの `metadata` フィールドで設定できます。 + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +julep バックエンドには、次のプロバイダーからの統合サードパーティ ツールが付属しています。 +- [composio](https://composio.dev) \*\* +- [匿名](https://anon.com) \*\* +- [langchain ツールキット](https://python.langchain.com/v0.2/docs/integrations/toolkits/)。_Github、Gitlab、Gmail、Jira、MultiOn、Slack_ ツールキットのサポートが計画されています。 + +\*\* _composio_ と _anon_ はサードパーティプロバイダーであるため、それらのツールではアカウントリンクを設定する必要があります。 + + +### 直接の `api_call` + +julep は、ワークフロー実行中にツール呼び出しとして直接 API 呼び出しを行うこともできます。`integration` と同様に、追加のランタイム パラメータは `metadata` フィールドから読み込まれます。 + +例えば、 + + ```yaml + name: Example api_call task + tools: + - type: api_call + name: hello + api_call: + method: GET + url: https://httpbin.org/get + main: + - tool: hello + arguments: + params: + test: _.input + ``` + +## 統合 + +Julep は、AI エージェントの機能を拡張するさまざまな統合をサポートしています。利用可能な統合とサポートされている引数のリストは次のとおりです。 + +### ブレイブサーチ + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/03-SmartResearcher_With_WebSearch.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/03-SmartResearcher_With_WebSearch.ipynb) + +### ブラウザベース + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### メール + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/00-Devfest-Email-Assistant.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/00-Devfest-Email-Assistant.ipynb) + +### スパイダー + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +### 天気 + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +### ウィキペディア + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +> [!ヒント] +> **サンプルクックブック**: [cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +これらの統合をタスク内で使用して、AI エージェントの機能を拡張できます。ワークフローでこれらの統合を使用する方法の詳細については、[統合ドキュメント](https://docs.julep.ai/integrations)を参照してください。 + +## その他の機能 + +Julep は、AI ワークフローを強化するためのさまざまな高度な機能を提供します。 + +### エージェントへのツールの追加 + +外部ツールと API を統合してエージェントの機能を拡張します。 + +```python +client.agents.tools.create( + agent_id=agent.id, + name="web_search", + description="Search the web for information.", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "your_brave_api_key"}, + }, +) +``` + +### セッションとユーザーの管理 + +Julep は、永続的なインタラクションのための堅牢なセッション管理を提供します。 + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### ドキュメントの統合と検索 + +エージェントのドキュメントを簡単に管理および検索できます。 + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +## ローカルクイックスタート + +**要件**: +- 最新の docker compose がインストールされている + +**手順**: +1. `git clone https://github.com/julep-ai/julep.git` +2. `cd ジュレップ` +3. `docker volume create cozo_backup` +4. `docker volume create cozo_data` +5. `cp .env.example .env # <-- このファイルを編集します` +6. `docker compose --env-file .env --profile temporal-ui --profile single-tenant --profile self-hosted-db up --build` + +## SDK リファレンス + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## APIリファレンス + +エージェント、タスク、実行の詳細については、包括的な API ドキュメントをご覧ください。 + +- [エージェント API](https://api.julep.ai/api/docs#tag/agents) +- [タスク API](https://api.julep.ai/api/docs#tag/tasks) +- [実行API](https://api.julep.ai/api/docs#tag/executions) + + + + diff --git a/README.md b/README.md index a45e07dfb..11896ca79 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,18 @@ - - -English | [中文翻译](/README-CN.md) +[English](README.md) | [中文翻译](README-CN.md) | [日本語翻訳](README-JA.md) | [French](README-FR.md)
- julep + julep
-

-Build powerful AI applications with stateful agents, complex workflows, and integrated tools. -

- -

-
- Explore the docs » -
-
- Report Bug - · - Request Feature - · - Join Our Discord - · - X - · - LinkedIn - +

+
+ Explore Docs + · + Discord + · + 𝕏 + · + LinkedIn

@@ -41,213 +26,1061 @@ Build powerful AI applications with stateful agents, complex workflows, and inte GitHub License

---- +***** + +> [!NOTE] +> 👨‍💻 Here for the devfest.ai event ? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below. +> +> Get your API key [here](https://dashboard-dev.julep.ai). + +
+🌟 Contributors and DevFest.AI Participants (Click to expand) + +## 🌟 Call for Contributors! + +We're excited to welcome new contributors to the Julep project! We've created several "good first issues" to help you get started. Here's how you can contribute: + +1. Check out our [CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) file for guidelines on how to contribute. +2. Browse our [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) to find a task that interests you. +3. If you have any questions or need help, don't hesitate to reach out on our [Discord](https://discord.com/invite/JTSBGRZrzj) channel. + +Your contributions, big or small, are valuable to us. Let's build something amazing together! 🚀 + +### 🎉 DevFest.AI October 2024 + +Exciting news! We're participating in DevFest.AI throughout October 2024! 🗓️ + +- Contribute to Julep during this event and get a chance to win awesome Julep merch and swag! 🎁 +- Join developers from around the world in contributing to AI repositories and participating in amazing events. +- A big thank you to DevFest.AI for organizing this fantastic initiative! + +> [!TIP] +> Ready to join the fun? **[Tweet that you are participating](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** and let's get coding! 🖥️ + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 Table of Contents

+ +- [Introduction](#introduction) +- [Quick Example](#quick-example) +- [Key Features](#key-features) +- [Why Julep vs. LangChain?](#why-julep-vs-langchain) + - [Different Use Cases](#different-use-cases) + - [Different Form Factor](#different-form-factor) + - [In Summary](#in-summary) +- [Installation](#installation) +- [Python Quick Start 🐍](#python-quick-start-) + - [Step 1: Create an Agent](#step-1-create-an-agent) + - [Step 2: Create a Task that generates a story and comic strip](#step-2-create-a-task-that-generates-a-story-and-comic-strip) + - [Step 3: Execute the Task](#step-3-execute-the-task) + - [Step 4: Chat with the Agent](#step-4-chat-with-the-agent) +- [Node.js Quick Start 🟩](#nodejs-quick-start-) + - [Step 1: Create an Agent](#step-1-create-an-agent-1) + - [Step 2: Create a Task that generates a story and comic strip](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) + - [Step 3: Execute the Task](#step-3-execute-the-task-1) + - [Step 4: Chat with the Agent](#step-4-chat-with-the-agent-1) +- [Components](#components) + - [Mental Model](#mental-model) +- [Concepts](#concepts) +- [Understanding Tasks](#understanding-tasks) + - [Types of Workflow Steps](#types-of-workflow-steps) +- [Tool Types](#tool-types) + - [User-defined `function`s](#user-defined-functions) + - [`system` tools](#system-tools) + - [Built-in `integration`s](#built-in-integrations) + - [Direct `api_call`s](#direct-api_calls) +- [Integrations](#integrations) + - [Brave Search](#brave-search) + - [BrowserBase](#browserbase) + - [Email](#email) + - [Spider](#spider) + - [Weather](#weather) + - [Wikipedia](#wikipedia) +- [Other Features](#other-features) + - [Adding Tools to Agents](#adding-tools-to-agents) + - [Managing Sessions and Users](#managing-sessions-and-users) + - [Document Integration and Search](#document-integration-and-search) +- [Local Quickstart](#local-quickstart) +- [SDK Reference](#sdk-reference) +- [API Reference](#api-reference) + +
+ + +## Introduction + +Julep is a platform for creating AI agents that remember past interactions and can perform complex tasks. It offers long-term memory and manages multi-step processes. + +Julep enables the creation of multi-step tasks incorporating decision-making, loops, parallel processing, and integration with numerous external tools and APIs. + +While many AI applications are limited to simple, linear chains of prompts and API calls with minimal branching, Julep is built to handle more complex scenarios. + +It supports: +- Intricate, multi-step processes +- Dynamic decision-making +- Parallel execution + +> [!TIP] +> Imagine you want to build an AI agent that can do more than just answer simple questions—it needs to handle complex tasks, remember past interactions, and maybe even use other tools or APIs. That's where Julep comes in. + +## Quick Example + +Imagine a Research AI agent that can do the following: + 1. Take a topic, + 2. Come up with 100 search queries for that topic, + 3. Perform those web searches in parallel, + 4. Summarize the results, + 5. Send the summary to Discord + +In Julep, this would be a single task under 80 lines of code and run fully managed all on its own. All of the steps are executed on Julep's own servers and you don't need to lift a finger. Here's a working example: + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# Define the tools that the agent can use +tools: +- name: web_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_BRAVE_API_KEY" + +- name: discord_webhook + type: api_call + api_call: + url: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` -## 🚀 Upcoming Release: v0.4 Alpha +> [!TIP] +> Julep is really useful when you want to build AI agents that can maintain context and state over long-term interactions. It's great for designing complex, multi-step workflows and integrating various tools and APIs directly into your agent's processes. +> +> In this example, Julep will automatically manage parallel executions, retry failed steps, resend API requests, and keep the tasks running reliably until completion. -
- Announcing v0.4 Alpha -
+## Key Features + +1. 🧠 **Persistent AI Agents**: Remember context and information over long-term interactions. +2. 💾 **Stateful Sessions**: Keep track of past interactions for personalized responses. +3. 🔄 **Multi-Step Tasks**: Build complex, multi-step processes with loops and decision-making. +4. ⏳ **Task Management**: Handle long-running tasks that can run indefinitely. +5. 🛠️ **Built-in Tools**: Use built-in tools and external APIs in your tasks. +6. 🔧 **Self-Healing**: Julep will automatically retry failed steps, resend messages, and generally keep your tasks running smoothly. +7. 📚 **RAG**: Use Julep's document store to build a system for retrieving and using your own data. + +Julep is ideal for applications that require AI use cases beyond simple prompt-response models. + +## Why Julep vs. LangChain? -We're excited to announce that v0.4 is currently in alpha! This release brings significant improvements and new features. Stay tuned for the official release. +### Different Use Cases -For a comprehensive overview of Julep's core concepts and upcoming features, check out our [detailed concepts guide](docs/julep-concepts.md). +Think of LangChain and Julep as tools with different focuses within the AI development stack. -Looking for the previous version? You can find the [v0.3 README here](v0.3_README.md). +LangChain is great for creating sequences of prompts and managing interactions with AI models. It has a large ecosystem with lots of pre-built integrations, which makes it convenient if you want to get something up and running quickly. LangChain fits well with simple use cases that involve a linear chain of prompts and API calls. ---- +Julep, on the other hand, is more about building persistent AI agents that can remember things over long-term interactions. It shines when you need complex tasks that involve multiple steps, decision-making, and integration with various tools or APIs directly within the agent's process. It's designed from the ground up to manage persistent sessions and complex tasks. -## Why Julep? -We've built a lot of AI apps and understand the challenges in creating complex, stateful applications with multiple agents and workflows. +Use Julep if you imagine building a complex AI assistant that needs to: -**The Problems** -1. Building AI applications with memory, knowledge, and tools is complex and time-consuming. -2. Managing long-running tasks and complex workflows in AI applications is challenging. -3. Integrating multiple tools and services into AI applications requires significant development effort. +- Keep track of user interactions over days or weeks. +- Perform scheduled tasks, like sending daily summaries or monitoring data sources. +- Make decisions based on prior interactions or stored data. +- Interact with multiple external services as part of its task. ---- -## Features -- **Stateful Agents**: Create and manage agents with built-in conversation history and memory. -- **Complex Workflows**: Define and execute multi-step tasks with branching, parallel execution, and error handling. -- **Integrated Tools**: Easily incorporate a wide range of tools and external services into your AI applications. -- **Flexible Session Management**: Support for various interaction patterns like one-to-many and many-to-one between agents and users. -- **Built-in RAG**: Add, delete & update documents to provide context to your agents. -- **Asynchronous Task Execution**: Run long-running tasks in the background with state management and resumability. -- **Multi-Model Support**: Switch between different language models (OpenAI, Anthropic, Ollama) while preserving state. -- **Task System**: Define and execute complex, multi-step workflows with parallel processing and error handling. +Then Julep provides the infrastructure to support all that without you having to build it from scratch. ---- -## Quickstart -### Option 1: Use the Julep Cloud -Our hosted platform is in Beta! +### Different Form Factor -To get access: -- Head over to https://platform.julep.ai -- Generate and add your `JULEP_API_KEY` in `.env` +Julep is a **platform** that includes a language for describing tasks, a server for running those tasks, and an SDK for interacting with the platform. To build something with Julep, you write a description of the task in `YAML`, and then run the task in the cloud. -### Option 2: Install and run Julep locally -Head over to docs on [self-hosting](https://docs.julep.ai/guides/self-hosting) to see how to run Julep locally! +Julep is built for heavy-lifting, multi-step, and long-running tasks and there's no limit to how complex the task can be. -### Installation +LangChain is a **library** that includes a few tools and a framework for building linear chains of prompts and tools. To build something with LangChain, you typically write Python code that configures and runs the model chains you want to use. + +LangChain might be sufficient and quicker to implement for simple use cases that involve a linear chain of prompts and API calls. + +### In Summary + +Use LangChain when you need to manage AI model interactions and prompt sequences in a stateless or short-term context. + +Choose Julep when you need a robust framework for stateful agents with advanced task capabilities, persistent sessions, and complex task management. + +## Installation + +To get started with Julep, install it using [npm](https://www.npmjs.com/package/@julep/sdk) or [pip](https://pypi.org/project/julep/): ```bash -pip install julep +npm install @julep/sdk ``` -### Setting up the `client` +or -```python -from julep import Client -import os +```bash +pip install julep +``` -base_url = os.environ.get("JULEP_API_URL") -api_key = os.environ.get("JULEP_API_KEY") +> [!NOTE] +> Get your API key [here](https://dashboard-dev.julep.ai). +> +> While we are in beta, you can also reach out on [Discord](https://discord.com/invite/JTSBGRZrzj) to get rate limits lifted on your API key. -client = Client(api_key=api_key, base_url=base_url) -``` +> [!TIP] +> 💻 Are you a _show me the code!™_ kind of person? We have created a ton of cookbooks for you to get started with. **Check out the [cookbooks](https://github.com/julep-ai/julep/tree/dev/cookbooks)** to browse through examples. +> +> 💡 There's also lots of ideas that you can build on top of Julep. **Check out the [list of ideas](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** to get some inspiration. + +## Python Quick Start 🐍 -### Create an agent -Agent is the object to which LLM settings like model, temperature along with tools are scoped to. +### Step 1: Create an Agent ```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + agent = client.agents.create( - name="Jessica", - model="gpt-4", - tools=[], # Tools defined here - about="A helpful AI assistant", - instructions=["Be polite", "Be concise"] + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +client.agents.tools.create( + agent_id=agent.id, + name="image_generator", + description="Use this tool to generate images based on descriptions.", + integration={ + "provider": "dalle", + "method": "generate_image", + "setup": { + "api_key": "your_openai_api_key", + }, + }, ) ``` -### Create a user -User is the object which represents the user of the application. +### Step 2: Create a Task that generates a story and comic strip -Memories are formed and saved for each user and many users can talk to one agent. +Let's define a multi-step task to create a story and generate a paneled comic strip based on an input idea: ```python -user = client.users.create( - name="Anon", - about="Average nerdy techbro/girl spending 8 hours a day on a laptop", +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) ) ``` -### Create a session -A "user" and an "agent" communicate in a "session". System prompt goes here. +### Step 3: Execute the Task ```python -situation_prompt = """You are Jessica, a helpful AI assistant. -You're here to assist the user with any questions or tasks they might have.""" -session = client.sessions.create( - user_id=user.id, - agent_id=agent.id, - situation=situation_prompt +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} ) -``` -### Start a stateful conversation -`session.chat` controls the communication between the "agent" and the "user". +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) -It has two important arguments; -- `recall`: Retrieves the previous conversations and memories. -- `remember`: Saves the current conversation turn into the memory store. +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### Step 4: Chat with the Agent -To keep the session stateful, both need to be `True` +Start an interactive chat session with the agent: ```python -user_msg = "Hey Jessica, can you help me with a task?" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - "name": "Anon", - } - ], - recall=True, - remember=True, -) +session = client.sessions.create(agent_id=agent.id) -print(response.response[0][0].content) +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) ``` ---- +> [!TIP] +> You can find the full python example [here](example.py). -## Core Concepts -### Agent -An Agent in Julep is the main orchestrator of your application. It's backed by foundation models like GPT-4 or Claude and can use tools, documents, and execute complex tasks. +## Node.js Quick Start 🟩 -### User -Users in Julep represent the end-users of your application. They can be associated with sessions and have their own documents and metadata. +### Step 1: Create an Agent -### Session -Sessions manage the interaction between users and agents. They maintain conversation history and context. +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; -### Tool -Tools are functions that agents can use to perform specific actions or retrieve information. +const client = new Julep({ apiKey: 'your_julep_api_key' }); -### Doc -Docs are collections of text snippets that can be associated with agents or users and are used for context retrieval. +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); -### Task -Tasks are complex, multi-step workflows that can be defined and executed by agents. + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); -### Execution -An Execution is an instance of a Task that has been started with some input. It goes through various states as it progresses. + return agent; +} +``` ---- +### Step 2: Create a Task that generates a story and comic strip + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` -## API and SDKs +### Step 3: Execute the Task -To use the API directly or to take a look at request & response formats, authentication, available endpoints and more, please refer to the [API Documentation](https://docs.julep.ai/api-reference/agents-api/agents-api) +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); -### Python SDK + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } -To install the Python SDK, run: + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` -```bash -pip install julep +### Step 4: Chat with the Agent + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); ``` -For more information on using the Python SDK, please refer to the [Python SDK documentation](https://docs.julep.ai/api-reference/python-sdk-docs). +> [!TIP] +> You can find the full Node.js example [here](example.js). -### TypeScript SDK -To install the TypeScript SDK using `npm`, run: +## Components -```bash -npm install @julep/sdk +Julep is made up of the following components: + +- **Julep Platform**: The Julep platform is a cloud service that runs your workflows. It includes a language for describing workflows, a server for running those workflows, and an SDK for interacting with the platform. +- **Julep SDKs**: Julep SDKs are a set of libraries for building workflows. There are SDKs for Python and JavaScript, with more on the way. +- **Julep API**: The Julep API is a RESTful API that you can use to interact with the Julep platform. + +### Mental Model + +
+ +
+ +Think of Julep as a platform that combines both client-side and server-side components to help you build advanced AI agents. Here's how to visualize it: + +1. **Your Application Code:** + - You use the Julep SDK in your application to define agents, tasks, and workflows. + - The SDK provides functions and classes that make it easy to set up and manage these components. + +2. **Julep Backend Service:** + - The SDK communicates with the Julep backend over the network. + - The backend handles execution of tasks, maintains session state, stores documents, and orchestrates workflows. + +3. **Integration with Tools and APIs:** + - Within your workflows, you can integrate external tools and services. + - The backend facilitates these integrations, so your agents can, for example, perform web searches, access databases, or call third-party APIs. + +In simpler terms: +- Julep is a platform for building stateful AI agents. +- You use the SDK (like a toolkit) in your code to define what your agents do. +- The backend service (which you can think of as the engine) runs these definitions, manages state, and handles complexity. + +## Concepts + +Julep is built on several key technical components that work together to create powerful AI workflows: + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; ``` -For more information on using the TypeScript SDK, please refer to the [TypeScript SDK documentation](https://docs.julep.ai/api-reference/js-sdk-docs). +- **Agents**: AI-powered entities backed by large language models (LLMs) that execute tasks and interact with users. +- **Users**: Entities that interact with agents through sessions. +- **Sessions**: Stateful interactions between agents and users, maintaining context across multiple exchanges. +- **Tasks**: Multi-step, programmatic workflows that agents can execute, including various types of steps like prompts, tool calls, and conditional logic. +- **Tools**: Integrations that extend an agent's capabilities, including user-defined functions, system tools, or third-party API integrations. +- **Documents**: Text or data objects associated with agents or users, vectorized and stored for semantic search and retrieval. +- **Executions**: Instances of tasks that have been initiated with specific inputs, with their own lifecycle and state machine. + +For a more detailed explanation of these concepts and their interactions, please refer to our [Concepts Documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md). + +## Understanding Tasks + +Tasks are the core of Julep's workflow system. They allow you to define complex, multi-step AI workflows that your agents can execute. Here's a brief overview of task components: + +- **Name and Description**: Each task has a unique name and description for easy identification. +- **Main Steps**: The core of a task, defining the sequence of actions to be performed. +- **Tools**: Optional integrations that extend the capabilities of your agent during task execution. + +### Types of Workflow Steps + +Tasks in Julep can include various types of steps, allowing you to create complex and powerful workflows. Here's an overview of the available step types, organized by category: + +#### Common Steps + +1. **Prompt**: Send a message to the AI model and receive a response. + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **Tool Call**: Execute an integrated tool or API. + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **Evaluate**: Perform calculations or manipulate data. + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **Wait for Input**: Pause workflow until input is received. + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **Log**: Log a specified value or message. + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### Key-Value Steps + +6. **Get**: Retrieve a value from a key-value store. + ```yaml + - get: "user_preference" + ``` + +7. **Set**: Assign a value to a key in a key-value store. + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### Iteration Steps + +8. **Foreach**: Iterate over a collection and perform steps for each item. + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**: Map over a collection and reduce the results. + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **Parallel**: Run multiple steps in parallel. + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### Conditional Steps + +11. **If-Else**: Conditional execution of steps. + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **Switch**: Execute steps based on multiple conditions. + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### Other Control Flow + +13. **Sleep**: Pause the workflow for a specified duration. + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Return**: Return a value from the workflow. + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Yield**: Run a subworkflow and await its completion. + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **Error**: Handle errors by specifying an error message. + ```yaml + - error: "Invalid input provided" + ``` + +Each step type serves a specific purpose in building sophisticated AI workflows. This categorization helps in understanding the various control flows and operations available in Julep tasks. + + +## Tool Types + +Agents can be given access to a number of "tools" -- any programmatic interface that a foundation model can "call" with a set of inputs to achieve a goal. For example, it might use a `web_search(query)` tool to search the Internet for some information. + +Unlike agent frameworks, julep is a _backend_ that manages agent execution. Clients can interact with agents using our SDKs. julep takes care of executing tasks and running integrations. + +Tools in julep can be one of: + +### User-defined `function`s + +These are function signatures that you can give the model to choose from, similar to how [openai]'s function-calling works. An example: + +```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: send_notification + description: Send a notification to the user + type: function + function: + parameters: + type: object + properties: + text: + type: string + description: Content of the notification + + main: + - tool: send_notification + arguments: + content: hi +``` + + Whenever julep encounters a _user-defined function_, it pauses, giving control back to the client and waits for the client to run the function call and give the results back to julep. + +> [!TIP] +> **Example cookbook**: [cookbooks/13-Error_Handling_and_Recovery.py](https://github.com/julep-ai/julep/blob/dev/cookbooks/13-Error_Handling_and_Recovery.py) + +### `system` tools +Built-in tools that can be used to call the julep APIs themselves, like triggering a task execution, appending to a metadata field, etc. +`system` tools are built into the backend. They get executed automatically when needed. They do _not_ require any action from the client-side. + +For example, + + ```yaml + name: Example system tool task + description: List agents using system call + + tools: + - name: list_agents + description: List all agents + type: system + system: + resource: agent + operation: list + main: + - tool: list_agents + arguments: + limit: 10 + ``` + +> [!TIP] +> **Example cookbook**: [cookbooks/10-Document_Management_and_Search.py](https://github.com/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.py) + +### Built-in `integration`s +Julep comes with a number of built-in integrations (as described in the section below). `integration` tools are directly executed on the julep backend. Any additional parameters needed by them at runtime can be set in the agent/session/user's `metadata` fields. + +> [!TIP] +> **Example cookbook**: [cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +julep backend ships with integrated third party tools from the following providers: +- [composio](https://composio.dev) \*\* +- [anon](https://anon.com) \*\* +- [langchain toolkits](https://python.langchain.com/v0.2/docs/integrations/toolkits/). Support for _Github, Gitlab, Gmail, Jira, MultiOn, Slack_ toolkits is planned. + +\*\* Since _composio_ and _anon_ are third-party providers, their tools require setting up account linking. + + +### Direct `api_call`s + +julep can also directly make api calls during workflow executions as tool calls. Same as `integration`s, additional runtime parameters are loaded from `metadata` fields. + +For example, + + ```yaml + name: Example api_call task + tools: + - type: api_call + name: hello + api_call: + method: GET + url: https://httpbin.org/get + main: + - tool: hello + arguments: + params: + test: _.input + ``` + +## Integrations + +Julep supports various integrations that extend the capabilities of your AI agents. Here's a list of available integrations and their supported arguments: + +### Brave Search + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` ---- +> [!TIP] +> **Example cookbook**: [cookbooks/03-SmartResearcher_With_WebSearch.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/03-SmartResearcher_With_WebSearch.ipynb) -## Deployment -Check out the [self-hosting guide](https://docs.julep.ai/agents/self-hosting) to host the platform yourself. +### BrowserBase -If you want to deploy Julep to production, [let's hop on a call](https://cal.com/ishitaj/15min)! +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase -We'll help you customise the platform and help you get set up with: -- Multi-tenancy -- Reverse proxy along with authentication and authorisation -- Self-hosted LLMs -- & more +arguments: + urls: list[string] # The URLs for loading with BrowserBase ---- -## Contributing -We welcome contributions from the community to help improve and expand the Julep AI platform. Please see our [Contributing Guidelines](CONTRIBUTING.md) for more information on how to get started. +output: + documents: list # The documents loaded from the URLs +``` ---- -## License -Julep AI is released under the Apache 2.0 License. See the [LICENSE](LICENSE) file for more details. +### Email ---- -## Contact and Support -If you have any questions, need assistance, or want to get in touch with the Julep AI team, please use the following channels: +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +> [!TIP] +> **Example cookbook**: [cookbooks/00-Devfest-Email-Assistant.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/00-Devfest-Email-Assistant.ipynb) + +### Spider + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +> [!TIP] +> **Example cookbook**: [cookbooks/01-Website_Crawler_using_Spider.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) + +### Weather + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +> [!TIP] +> **Example cookbook**: [cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +### Wikipedia + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +> [!TIP] +> **Example cookbook**: [cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb](https://github.com/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) + +These integrations can be used within your tasks to extend the capabilities of your AI agents. For more detailed information on how to use these integrations in your workflows, please refer to our [Integrations Documentation](https://docs.julep.ai/integrations). + +## Other Features + +Julep offers a range of advanced features to enhance your AI workflows: + +### Adding Tools to Agents + +Extend your agent's capabilities by integrating external tools and APIs: + +```python +client.agents.tools.create( + agent_id=agent.id, + name="web_search", + description="Search the web for information.", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "your_brave_api_key"}, + }, +) +``` + +### Managing Sessions and Users + +Julep provides robust session management for persistent interactions: + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### Document Integration and Search + +Easily manage and search through documents for your agents: + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +## Local Quickstart + +**Requirements**: +- latest docker compose installed + +**Steps**: +1. `git clone https://github.com/julep-ai/julep.git` +2. `cd julep` +3. `docker volume create cozo_backup` +4. `docker volume create cozo_data` +5. `cp .env.example .env # <-- Edit this file` +6. `docker compose --env-file .env --profile temporal-ui --profile single-tenant --profile self-hosted-db up --build` + +## SDK Reference + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## API Reference + +Explore our comprehensive API documentation to learn more about agents, tasks, and executions: + +- [Agents API](https://api.julep.ai/api/docs#tag/agents) +- [Tasks API](https://api.julep.ai/api/docs#tag/tasks) +- [Executions API](https://api.julep.ai/api/docs#tag/executions) + + + -- [Discord](https://discord.com/invite/JTSBGRZrzj): Join our community forum to discuss ideas, ask questions, and get help from other Julep AI users and the development team. -- GitHub Issues: For technical issues, bug reports, and feature requests, please open an issue on the Julep AI GitHub repository. -- Email Support: If you need direct assistance from our support team, send an email to hey@julep.ai, and we'll get back to you as soon as possible. -- Follow for updates on [X](https://twitter.com/julep_ai) & [LinkedIn](https://www.linkedin.com/company/julep-ai/) -- [Hop on a call](https://cal.com/ishitaj/15min): We wanna know what you're building and how we can tweak and tune Julep to help you build your next AI app. diff --git a/SCRATCHPAD.md b/SCRATCHPAD.md new file mode 100644 index 000000000..f793fb367 --- /dev/null +++ b/SCRATCHPAD.md @@ -0,0 +1,137 @@ +Sure! So imagine you want to build an AI agent that can do more than just answer simple queries—it needs to handle complex tasks, remember past interactions, and maybe even integrate with other tools or APIs. That's where Julep comes in. It's an open-source platform that lets you create persistent AI agents with customizable workflows, making it super easy to develop and deploy advanced AI applications without reinventing the wheel. + + + +Julep is really useful when you want to build AI agents that can maintain context and state over long-term interactions. It's great for designing complex, multi-step workflows and integrating various tools and APIs directly into your agent's processes. + +Compared to LangChain, which is excellent for chaining together prompts and managing LLM interactions, Julep focuses more on creating persistent agents with customizable workflows. While LangChain provides a robust framework for building applications with language models, it doesn't inherently offer the same level of session management or state persistence that Julep does. + + + + + +Persistent sessions in Julep mean that the AI agents can maintain context and state over long periods and multiple interactions. So instead of just handling a single query and forgetting everything afterward (which is what you'd get with regular sessions), the agent can remember past conversations, user preferences, and any relevant data from previous interactions. This is super handy when you want your agent to provide a more personalized experience or when the tasks require building upon previous steps. + +For example, if you're building a customer support agent, it can recall a user's issue from earlier chats without them having to repeat themselves. Regular sessions typically don't offer this level of continuity. + +As for complex workflows, Julep lets you define multi-step tasks that can include conditional logic, loops, parallel processing, and integration with external tools or APIs. Regular workflows might be more linear and straightforward—think a simple sequence of prompts or API calls without much branching or decision-making capability. + +In Julep, you can create tasks where the agent might, say, take user input, perform a web search, process the results, maybe even interact with other services like sending an email or updating a database—all within a single workflow. This level of complexity allows you to build more sophisticated applications without having to manage the orchestration logic yourself. + +That said, one thing to keep in mind is that while Julep offers these advanced features, it's still relatively new compared to something like LangChain. So you might find that the community support and pre-built integrations aren't as extensive yet. If you need something up and running quickly with lots of existing modules, LangChain might be more convenient. But if you want more control over persistent state and complex task execution, Julep provides a solid framework for that. + + + + + + +LangChain is great for creating sequences of prompts and managing interactions with LLMs. It has a large ecosystem with lots of pre-built integrations, which makes it convenient if you want to get something up and running quickly. + +Julep, on the other hand, is more about building persistent AI agents that can maintain context over long-term interactions. It shines when you need complex workflows that involve multi-step tasks, conditional logic, and integration with various tools or APIs directly within the agent's process. + +So, you shouldn't think of Julep as a direct replacement for LangChain. Instead, consider it as an alternative that's better suited for projects where maintaining state over time and handling complex task executions are important. If your application requires agents that can remember past interactions, personalize responses, and perform intricate operations, Julep might be the way to go. + + + + +Think of LangChain and Julep as tools with different focuses within the AI development stack. + +LangChain is like a powerful library that helps you chain together prompts and manage interactions with language models. It's excellent for building applications where the primary interaction is between the user and the LLM in a sequential manner. You get utilities for prompt management, memory, and even some basic tools integration. But when it comes to handling more complex state management or long-term sessions, you might find yourself writing a lot of custom code. + +Julep, on the other hand, is more of an orchestration platform for AI agents. It's designed from the ground up to manage persistent sessions and complex workflows. Here's how you might think about it: + +Persistent State and Sessions: Julep allows your AI agents to maintain state over time without you having to implement the storage and retrieval mechanisms yourself. So if your application requires the agent to remember previous interactions, user preferences, or intermediate data across sessions, Julep handles that natively. + +Complex Workflow Management: With Julep, you can define multi-step tasks that include conditional logic, loops, parallel processing, and more. It's like having a built-in workflow engine tailored for AI agents. This is particularly useful when your agent needs to perform a series of actions that depend on each other or on external inputs. + +Tool and API Integration: While LangChain allows for some tools integration, Julep provides a more seamless way to incorporate external tools and APIs directly into your agent's workflows. You can define tools once and reuse them across different tasks and agents. + +Agent-Centric Design: Julep is centered around the concept of agents that have their own identities, abilities, and long-term goals. This abstraction is helpful when you're building applications where the agent needs to interact with users or systems in a more autonomous or stateful way. + +So, rather than a drop-in replacement, Julep can be thought of as a higher-level framework that sits on top of or alongside tools like LangChain. If you imagine building a complex AI assistant that needs to: + +Keep track of user interactions over days or weeks. +Perform scheduled tasks, like sending daily summaries or monitoring data sources. +Make decisions based on prior interactions or stored data. +Interact with multiple external services as part of its workflow. +Then Julep provides the infrastructure to support all that without you having to build it from scratch. + +In contrast, if you're building a simpler application where you just need to chain a few prompts together and don't require persistent state or complex task management, LangChain might be sufficient and quicker to implement. + +In summary: + +Use LangChain when you need to manage LLM interactions and prompt sequences in a stateless or short-term context. +Choose Julep when you need a robust framework for stateful agents with advanced workflow capabilities, persistent sessions, and complex task orchestration. + + + + +Sure! To help you "bookmark" Julep in your mind, here are some key phrases and keywords that set it apart and highlight where it uniquely shines: + +Persistent AI Agents: Julep specializes in creating AI agents that maintain context and state over long-term interactions. + +Stateful Sessions: Think of Julep when you need sessions that remember past interactions, enabling personalized and context-aware responses. + +Customizable Workflows: It's ideal for building complex, multi-step workflows with features like conditional logic, loops, and parallel processing. + +Advanced Task Orchestration: Julep excels at orchestrating intricate tasks without requiring you to build the orchestration logic from scratch. + +Seamless Tool and API Integration: Use Julep when you want to integrate external tools and APIs directly into your agent's workflows. + +Agent-Centric Design: It's designed around autonomous agents with their own identities and long-term goals, perfect for applications needing more than simple prompt-response interactions. + +Reason to Recall Julep: + +When you're working on a project that requires an AI agent to: + +Maintain Long-Term Context: Remember user preferences or past interactions over extended periods. + +Handle Complex Operations: Perform multi-step tasks that involve decision-making, branching logic, or interacting with multiple services. + +Integrate with External Systems: Seamlessly connect with APIs, databases, or other tools as part of the agent's workflow. + +Provide Personalized Experiences: Offer responses or actions tailored to individual users based on accumulated context. + +In these scenarios, Julep uniquely shines by providing the infrastructure and tools needed to build such sophisticated, stateful AI applications without having to build the underlying systems yourself. + + + + + + +Possible Descriptions: + +"Julep is an open-source platform for building persistent AI agents that maintain long-term context and execute complex, customizable workflows." + +"Create AI agents that remember past interactions and handle intricate tasks with Julep's customizable workflows and seamless tool integration." + +"Julep enables developers to build stateful AI agents with advanced task orchestration, maintaining context over time and integrating external tools directly into workflows." + +"With Julep, develop AI agents that persist over sessions, perform multi-step tasks, and integrate various tools and APIs effortlessly." + +"Julep is a platform for creating AI agents that maintain state and execute complex workflows, offering long-term context and advanced orchestration capabilities." + + + + +Key Concepts to Include: + +Persistent AI Agents: Agents that maintain context and state over long-term interactions. +Customizable Workflows: Ability to define complex, multi-step tasks with conditional logic, loops, and more. +Seamless Tool and API Integration: Direct integration of external tools and APIs into agents' workflows. +Stateful Sessions: Sessions that remember past interactions for personalized and context-aware responses. +Advanced Task Orchestration: Orchestrate intricate tasks without building the underlying logic from scratch. + + + +Top 5 Winners +1.5 "Julep: Open-source platform for AI agents with long-term memory and complex workflows." + +2.5 "Julep: Create AI agents that remember and handle intricate tasks effortlessly." + +3.5 "Julep: Create AI agents with persistent context and advanced orchestration." + +4.5 "Julep: Craft AI agents that persist and perform complex tasks seamlessly." + +5.5 "Julep: Build AI agents with persistent state and powerful task execution." + diff --git a/agents-api/.DS_Store b/agents-api/.DS_Store deleted file mode 100644 index f34bf5fc6..000000000 Binary files a/agents-api/.DS_Store and /dev/null differ diff --git a/agents-api/.tool-versions b/agents-api/.tool-versions index 8aa451a5c..269a4eb43 100644 --- a/agents-api/.tool-versions +++ b/agents-api/.tool-versions @@ -1 +1 @@ -python 3.11.9 +python 3.12.5 diff --git a/agents-api/Dockerfile b/agents-api/Dockerfile index de5111250..90432df12 100644 --- a/agents-api/Dockerfile +++ b/agents-api/Dockerfile @@ -1,11 +1,14 @@ -FROM python:3.11-slim +# syntax=docker/dockerfile:1 +# check=error=true -ENV PYTHONUNBUFFERED True +FROM python:3.12-slim + +ENV PYTHONUNBUFFERED=1 ENV POETRY_CACHE_DIR=/tmp/poetry_cache WORKDIR /app -RUN pip install 'poetry<=1.9.0' \ +RUN pip install 'poetry>=1.8.0,<1.9.0' \ && poetry config virtualenvs.create false COPY pyproject.toml poetry.lock ./ @@ -14,6 +17,4 @@ RUN poetry install --no-dev --no-root COPY . ./ -RUN poetry install --no-dev - ENTRYPOINT ["python", "-m", "agents_api.web", "--host", "0.0.0.0", "--port", "8080"] diff --git a/agents-api/Dockerfile.migration b/agents-api/Dockerfile.migration index c48946c0e..695b2e1e9 100644 --- a/agents-api/Dockerfile.migration +++ b/agents-api/Dockerfile.migration @@ -1,6 +1,9 @@ +# syntax=docker/dockerfile:1 +# check=error=true + FROM python:3.11-slim -ENV PYTHONUNBUFFERED True +ENV PYTHONUNBUFFERED=1 ENV POETRY_CACHE_DIR=/tmp/poetry_cache WORKDIR /app @@ -9,8 +12,11 @@ RUN pip install --no-cache-dir --upgrade cozo-migrate COPY . ./ ENV COZO_HOST="http://cozo:9070" -ENV COZO_AUTH_TOKEN="myauthkey" +# Expected environment variables: +# COZO_AUTH_TOKEN="myauthkey" + +SHELL ["/bin/bash", "-c"] ENTRYPOINT \ cozo-migrate -e http -h $COZO_HOST --auth $COZO_AUTH_TOKEN init \ ; cozo-migrate -e http -h $COZO_HOST --auth $COZO_AUTH_TOKEN -d ./migrations apply -ay diff --git a/agents-api/Dockerfile.worker b/agents-api/Dockerfile.worker index fd3af39fd..0bf84fae2 100644 --- a/agents-api/Dockerfile.worker +++ b/agents-api/Dockerfile.worker @@ -1,11 +1,14 @@ -FROM python:3.11-slim +# syntax=docker/dockerfile:1 +# check=error=true -ENV PYTHONUNBUFFERED True +FROM python:3.12-slim + +ENV PYTHONUNBUFFERED=1 ENV POETRY_CACHE_DIR=/tmp/poetry_cache WORKDIR /app -RUN pip install 'poetry<=1.9.0' \ +RUN pip install 'poetry>=1.8.0,<1.9.0' \ && poetry config virtualenvs.create false COPY pyproject.toml poetry.lock ./ diff --git a/agents-api/agents_api/activities/excecute_api_call.py b/agents-api/agents_api/activities/excecute_api_call.py new file mode 100644 index 000000000..e7752aa06 --- /dev/null +++ b/agents-api/agents_api/activities/excecute_api_call.py @@ -0,0 +1,68 @@ +import base64 +from typing import Annotated, Any, Optional, TypedDict, Union + +import httpx +from beartype import beartype +from pydantic import Field +from temporalio import activity + +from ..autogen.openapi_model import ApiCallDef + +# from ..clients import integrations +from ..common.protocol.tasks import StepContext +from ..env import testing + +# from ..models.tools import get_tool_args_from_metadata + + +class RequestArgs(TypedDict): + content: Optional[str] + data: Optional[dict[str, Any]] + json_: Optional[dict[str, Any]] + cookies: Optional[dict[str, str]] + params: Optional[Union[str, dict[str, Any]]] + url: Optional[str] + headers: Optional[dict[str, str]] + + +@beartype +async def execute_api_call( + api_call: ApiCallDef, + request_args: RequestArgs, +) -> Any: + try: + async with httpx.AsyncClient() as client: + arg_url = request_args.pop("url", None) + arg_headers = request_args.pop("headers", None) + + response = await client.request( + method=api_call.method, + url=arg_url or str(api_call.url), + headers=arg_headers or api_call.headers, + follow_redirects=api_call.follow_redirects, + **request_args, + ) + + content_base64 = base64.b64encode(response.content).decode("ascii") + + response_dict = { + "status_code": response.status_code, + "headers": dict(response.headers), + "content": content_base64, + "json": response.json(), + } + + return response_dict + + except BaseException as e: + if activity.in_activity(): + activity.logger.error(f"Error in execute_api_call: {e}") + + raise + + +mock_execute_api_call = execute_api_call + +execute_api_call = activity.defn(name="execute_api_call")( + execute_api_call if not testing else mock_execute_api_call +) diff --git a/agents-api/agents_api/activities/execute_integration.py b/agents-api/agents_api/activities/execute_integration.py new file mode 100644 index 000000000..964ad6e12 --- /dev/null +++ b/agents-api/agents_api/activities/execute_integration.py @@ -0,0 +1,61 @@ +from typing import Any + +from beartype import beartype +from temporalio import activity + +from ..autogen.openapi_model import IntegrationDef +from ..clients import integrations +from ..common.protocol.tasks import StepContext +from ..env import testing +from ..models.tools import get_tool_args_from_metadata + + +@beartype +async def execute_integration( + context: StepContext, + tool_name: str, + integration: IntegrationDef, + arguments: dict[str, Any], + setup: dict[str, Any] = {}, +) -> Any: + developer_id = context.execution_input.developer_id + agent_id = context.execution_input.agent.id + task_id = context.execution_input.task.id + + merged_tool_args = get_tool_args_from_metadata( + developer_id=developer_id, agent_id=agent_id, task_id=task_id, arg_type="args" + ) + + merged_tool_setup = get_tool_args_from_metadata( + developer_id=developer_id, agent_id=agent_id, task_id=task_id, arg_type="setup" + ) + + arguments = ( + merged_tool_args.get(tool_name, {}) | (integration.arguments or {}) | arguments + ) + + setup = merged_tool_setup.get(tool_name, {}) | (integration.setup or {}) | setup + + try: + if integration.provider == "dummy": + return arguments + + return await integrations.run_integration_service( + provider=integration.provider, + setup=setup, + method=integration.method, + arguments=arguments, + ) + + except BaseException as e: + if activity.in_activity(): + activity.logger.error(f"Error in execute_integration: {e}") + + raise + + +mock_execute_integration = execute_integration + +execute_integration = activity.defn(name="execute_integration")( + execute_integration if not testing else mock_execute_integration +) diff --git a/agents-api/agents_api/activities/execute_system.py b/agents-api/agents_api/activities/execute_system.py new file mode 100644 index 000000000..8ffb85814 --- /dev/null +++ b/agents-api/agents_api/activities/execute_system.py @@ -0,0 +1,246 @@ +from typing import Any +from uuid import UUID + +from beartype import beartype +from fastapi.background import BackgroundTasks +from temporalio import activity + +from ..autogen.Docs import ( + CreateDocRequest, + HybridDocSearchRequest, + TextOnlyDocSearchRequest, + VectorDocSearchRequest, +) +from ..autogen.Tools import SystemDef +from ..common.protocol.tasks import StepContext +from ..env import testing +from ..models.agent.create_agent import create_agent as create_agent_query +from ..models.agent.delete_agent import delete_agent as delete_agent_query +from ..models.agent.get_agent import get_agent as get_agent_query +from ..models.agent.list_agents import list_agents as list_agents_query +from ..models.agent.update_agent import update_agent as update_agent_query +from ..models.docs.create_doc import create_doc as create_doc_query +from ..models.docs.delete_doc import delete_doc as delete_doc_query +from ..models.docs.get_doc import get_doc as get_doc_query +from ..models.docs.list_docs import list_docs as list_docs_query +from ..models.session.create_session import create_session as create_session_query +from ..models.session.delete_session import delete_session as delete_session_query +from ..models.session.get_session import get_session as get_session_query +from ..models.session.list_sessions import list_sessions as list_sessions_query +from ..models.session.update_session import update_session as update_session_query +from ..models.task.create_task import create_task as create_task_query +from ..models.task.delete_task import delete_task as delete_task_query +from ..models.task.get_task import get_task as get_task_query +from ..models.task.list_tasks import list_tasks as list_tasks_query +from ..models.task.update_task import update_task as update_task_query +from ..models.user.create_user import create_user as create_user_query +from ..models.user.delete_user import delete_user as delete_user_query +from ..models.user.get_user import get_user as get_user_query +from ..models.user.list_users import list_users as list_users_query +from ..models.user.update_user import update_user as update_user_query +from ..routers.docs.create_doc import create_agent_doc, create_user_doc +from ..routers.docs.search_docs import search_agent_docs, search_user_docs + + +@beartype +async def execute_system( + context: StepContext, + system: SystemDef, +) -> Any: + arguments = system.arguments + arguments["developer_id"] = context.execution_input.developer_id + + # Convert all UUIDs to UUID objects + if "agent_id" in arguments: + arguments["agent_id"] = UUID(arguments["agent_id"]) + if "user_id" in arguments: + arguments["user_id"] = UUID(arguments["user_id"]) + if "task_id" in arguments: + arguments["task_id"] = UUID(arguments["task_id"]) + if "session_id" in arguments: + arguments["session_id"] = UUID(arguments["session_id"]) + if "doc_id" in arguments: + arguments["doc_id"] = UUID(arguments["doc_id"]) + + # FIXME: This is a total mess. Should be refactored. + try: + # AGENTS + if system.resource == "agent": + # DOCS SUBRESOURCE + if system.subresource == "doc": + # Define the arguments for the agent doc queries + agent_doc_args = { + **{ + "owner_type": "agent", + "owner_id": arguments["agent_id"], + }, + **arguments, + } + agent_doc_args.pop("agent_id") + + if system.operation == "list": + return list_docs_query(**agent_doc_args) + + elif system.operation == "create": + # The `create_agent_doc` function requires `x_developer_id` instead of `developer_id`. + arguments["x_developer_id"] = arguments.pop("developer_id") + return await create_agent_doc( + data=CreateDocRequest(**arguments.pop("data")), + background_tasks=BackgroundTasks(), + **arguments, + ) + + elif system.operation == "delete": + return delete_doc_query(**agent_doc_args) + + elif system.operation == "search": + # The `search_agent_docs` function requires `x_developer_id` instead of `developer_id`. + arguments["x_developer_id"] = arguments.pop("developer_id") + + if "text" in arguments and "vector" in arguments: + search_params = HybridDocSearchRequest( + text=arguments.pop("text"), + vector=arguments.pop("vector"), + limit=arguments.get("limit", 10), + ) + + elif "text" in arguments: + search_params = TextOnlyDocSearchRequest( + text=arguments.pop("text"), + limit=arguments.get("limit", 10), + ) + elif "vector" in arguments: + search_params = VectorDocSearchRequest( + vector=arguments.pop("vector"), + limit=arguments.get("limit", 10), + ) + + return await search_agent_docs( + search_params=search_params, + **arguments, + ) + + # NO SUBRESOURCE + elif system.subresource == None: + if system.operation == "list": + return list_agents_query(**arguments) + elif system.operation == "get": + return get_agent_query(**arguments) + elif system.operation == "create": + return create_agent_query(**arguments) + elif system.operation == "update": + return update_agent_query(**arguments) + elif system.operation == "delete": + return delete_agent_query(**arguments) + + # USERS + elif system.resource == "user": + # DOCS SUBRESOURCE + if system.subresource == "doc": + # Define the arguments for the user doc queries + user_doc_args = { + **{ + "owner_type": "user", + "owner_id": arguments["user_id"], + }, + **arguments, + } + user_doc_args.pop("user_id") + + if system.operation == "list": + return list_docs_query(**user_doc_args) + + elif system.operation == "create": + # The `create_user_doc` function requires `x_developer_id` instead of `developer_id`. + arguments["x_developer_id"] = arguments.pop("developer_id") + return await create_user_doc( + data=CreateDocRequest(**arguments.pop("data")), + background_tasks=BackgroundTasks(), + **arguments, + ) + + elif system.operation == "delete": + return delete_doc_query(**user_doc_args) + + elif system.operation == "search": + # The `search_user_docs` function requires `x_developer_id` instead of `developer_id`. + arguments["x_developer_id"] = arguments.pop("developer_id") + + if "text" in arguments and "vector" in arguments: + search_params = HybridDocSearchRequest( + text=arguments.pop("text"), + vector=arguments.pop("vector"), + limit=arguments.get("limit", 10), + ) + + elif "text" in arguments: + search_params = TextOnlyDocSearchRequest( + text=arguments.pop("text"), + limit=arguments.get("limit", 10), + ) + elif "vector" in arguments: + search_params = VectorDocSearchRequest( + vector=arguments.pop("vector"), + limit=arguments.get("limit", 10), + ) + + return await search_user_docs( + search_params=search_params, + **arguments, + ) + + # NO SUBRESOURCE + elif system.subresource == None: + if system.operation == "list": + return list_users_query(**arguments) + elif system.operation == "get": + return get_user_query(**arguments) + elif system.operation == "create": + return create_user_query(**arguments) + elif system.operation == "update": + return update_user_query(**arguments) + elif system.operation == "delete": + return delete_user_query(**arguments) + + # SESSIONS + elif system.resource == "session": + if system.operation == "list": + return list_sessions_query(**arguments) + elif system.operation == "get": + return get_session_query(**arguments) + elif system.operation == "create": + return create_session_query(**arguments) + elif system.operation == "update": + return update_session_query(**arguments) + elif system.operation == "delete": + return update_session_query(**arguments) + elif system.operation == "delete": + return delete_session_query(**arguments) + # TASKS + elif system.resource == "task": + if system.operation == "list": + return list_tasks_query(**arguments) + elif system.operation == "get": + return get_task_query(**arguments) + elif system.operation == "create": + return create_task_query(**arguments) + elif system.operation == "update": + return update_task_query(**arguments) + elif system.operation == "delete": + return delete_task_query(**arguments) + + raise NotImplementedError(f"System call not implemented for { + system.resource}.{system.operation}") + + except BaseException as e: + if activity.in_activity(): + activity.logger.error(f"Error in execute_system_call: {e}") + raise + + +# Mock and activity definition +mock_execute_system = execute_system + +execute_system = activity.defn(name="execute_system")( + execute_system if not testing else mock_execute_system +) diff --git a/agents-api/agents_api/activities/task_steps/base_evaluate.py b/agents-api/agents_api/activities/task_steps/base_evaluate.py index 0263345ec..c6b83ba89 100644 --- a/agents-api/agents_api/activities/task_steps/base_evaluate.py +++ b/agents-api/agents_api/activities/task_steps/base_evaluate.py @@ -12,7 +12,7 @@ @beartype async def base_evaluate( - exprs: str | list[str] | dict[str, str], + exprs: str | list[str] | dict[str, str] | dict[str, dict[str, str]], values: dict[str, Any] = {}, extra_lambda_strs: dict[str, str] | None = None, ) -> Any | list[Any] | dict[str, Any]: @@ -46,20 +46,29 @@ async def base_evaluate( evaluator = get_evaluator(names=values, extra_functions=extra_lambdas) try: + result = None match exprs: case str(): - return evaluator.eval(exprs) - + result = evaluator.eval(exprs) case list(): - return [evaluator.eval(expr) for expr in exprs] - - case dict(): - return {k: evaluator.eval(v) for k, v in exprs.items()} + result = [evaluator.eval(expr) for expr in exprs] + case dict() as d if all( + isinstance(v, dict) or isinstance(v, str) for v in d.values() + ): + result = { + k: {ik: evaluator.eval(iv) for ik, iv in v.items()} + if isinstance(v, dict) + else evaluator.eval(v) + for k, v in d.items() + } + case _: + raise ValueError(f"Invalid expression: {exprs}") + + return result except BaseException as e: if activity.in_activity(): activity.logger.error(f"Error in base_evaluate: {e}") - raise diff --git a/agents-api/agents_api/activities/task_steps/prompt_step.py b/agents-api/agents_api/activities/task_steps/prompt_step.py index d04dc99a6..bdc8a5c6e 100644 --- a/agents-api/agents_api/activities/task_steps/prompt_step.py +++ b/agents-api/agents_api/activities/task_steps/prompt_step.py @@ -1,6 +1,8 @@ from beartype import beartype from temporalio import activity +from temporalio.exceptions import ApplicationError +from ...autogen.Tools import Tool from ...clients import ( litellm, # We dont directly import `acompletion` so we can mock it ) @@ -9,6 +11,22 @@ from ...models.tools.list_tools import list_tools +# FIXME: This shouldn't be here. +def format_agent_tool(tool: Tool) -> dict: + if tool.function: + return { + "type": "function", + "function": { + "name": tool.name, + "description": tool.description, + "parameters": tool.function.parameters, + }, + } + # TODO: Add integration | system | api_call tool types + else: + return {} + + @activity.defn @beartype async def prompt_step(context: StepContext) -> StepOutcome: @@ -22,7 +40,6 @@ async def prompt_step(context: StepContext) -> StepOutcome: context_data, skip_vars=["developer_id"], ) - # Get settings and run llm agent_default_settings: dict = ( context.execution_input.agent.default_settings.model_dump() @@ -46,15 +63,7 @@ async def prompt_step(context: StepContext) -> StepOutcome: # Format agent_tools for litellm formatted_agent_tools = [ - { - "type": tool.type, - "function": { - "name": tool.function.name, - "description": tool.function.description, - "parameters": tool.function.parameters, - }, - } - for tool in agent_tools + format_agent_tool(tool) for tool in agent_tools if format_agent_tool(tool) ] if context.current_step.settings: @@ -64,18 +73,29 @@ async def prompt_step(context: StepContext) -> StepOutcome: else: passed_settings: dict = {} + # Wrap the prompt in a list if it is not already + if isinstance(prompt, str): + prompt = [{"role": "user", "content": prompt}] + completion_data: dict = { "model": agent_model, "tools": formatted_agent_tools or None, - ("messages" if isinstance(prompt, list) else "prompt"): prompt, + "messages": prompt, **agent_default_settings, **passed_settings, } + response = await litellm.acompletion( **completion_data, ) + if context.current_step.unwrap: + if response.choices[0].finish_reason == "tool_calls": + raise ApplicationError("Tool calls cannot be unwrapped") + + response = response.choices[0].message.content + return StepOutcome( - output=response.model_dump(), + output=response.model_dump() if hasattr(response, "model_dump") else response, next=None, ) diff --git a/agents-api/agents_api/activities/task_steps/raise_complete_async.py b/agents-api/agents_api/activities/task_steps/raise_complete_async.py index 3944c914f..54fd8a32c 100644 --- a/agents-api/agents_api/activities/task_steps/raise_complete_async.py +++ b/agents-api/agents_api/activities/task_steps/raise_complete_async.py @@ -1,3 +1,5 @@ +import base64 + from temporalio import activity from ...autogen.openapi_model import CreateTransitionRequest @@ -10,21 +12,26 @@ @activity.defn async def raise_complete_async(context: StepContext, output: StepOutcome) -> None: - # TODO: Create a transtition to "wait" and save the captured_token to the transition + activity_info = activity.info() + + captured_token = base64.b64encode(activity_info.task_token).decode("ascii") + activity_id = activity_info.activity_id + workflow_run_id = activity_info.workflow_run_id + workflow_id = activity_info.workflow_id - captured_token = activity.info().task_token - captured_token = captured_token.decode("latin-1") transition_info = CreateTransitionRequest( current=context.cursor, type="wait", next=None, output=output, task_token=captured_token, + metadata={ + "x-activity-id": activity_id, + "x-run-id": workflow_run_id, + "x-workflow-id": workflow_id, + }, ) await original_transition_step(context, transition_info) - # await transition(context, output=output, type="wait", next=None, task_token=captured_token) - - print("transition to wait called") activity.raise_complete_async() diff --git a/agents-api/agents_api/activities/task_steps/tool_call_step.py b/agents-api/agents_api/activities/task_steps/tool_call_step.py index 85a119deb..8d5d2fc8c 100644 --- a/agents-api/agents_api/activities/task_steps/tool_call_step.py +++ b/agents-api/agents_api/activities/task_steps/tool_call_step.py @@ -1,20 +1,66 @@ +import base64 +import secrets + from beartype import beartype from temporalio import activity +from temporalio.exceptions import ApplicationError +from ...activities.task_steps.base_evaluate import base_evaluate +from ...autogen.openapi_model import TaskToolDef, Tool, ToolCallStep from ...common.protocol.tasks import ( StepContext, + StepOutcome, ) +# FIXME: This shouldn't be here. +def generate_call_id(): + # Generate 18 random bytes (which will result in 24 base64 characters) + random_bytes = secrets.token_bytes(18) + # Encode to base64 and remove padding + base64_string = base64.urlsafe_b64encode(random_bytes).decode("ascii").rstrip("=") + # Add the "call_" prefix + return f"call_{base64_string}" + + +# FIXME: This shouldn't be here, and shouldn't be done this way. Should be refactored. +def construct_tool_call(tool: TaskToolDef, arguments: dict, call_id: str) -> dict: + return { + tool.type: { + "arguments": arguments, + "name": tool.name, + } + if tool.type != "system" + else { + "resource": tool.spec["resource"], + "operation": tool.spec["operation"], + "resource_id": tool.spec["resource_id"], + "subresource": tool.spec["subresource"], + "arguments": arguments, + }, + "id": call_id, + "type": tool.type, + } + + @activity.defn @beartype -async def tool_call_step(context: StepContext) -> dict: - raise NotImplementedError() - # assert isinstance(context.current_step, ToolCallStep) +async def tool_call_step(context: StepContext) -> StepOutcome: + assert isinstance(context.current_step, ToolCallStep) + + tools: list[Tool] = context.tools + tool_name = context.current_step.tool + + tool = next((t for t in tools if t.name == tool_name), None) + + if tool is None: + raise ApplicationError(f"Tool {tool_name} not found in the toolset") + + arguments = await base_evaluate( + context.current_step.arguments, context.model_dump() + ) - # context.current_step.tool_id - # context.current_step.arguments - # # get tool by id - # # call tool + call_id = generate_call_id() + tool_call = construct_tool_call(tool, arguments, call_id) - # return {} + return StepOutcome(output=tool_call) diff --git a/agents-api/agents_api/activities/truncation.py b/agents-api/agents_api/activities/truncation.py index 4742ee6d4..afdb43da4 100644 --- a/agents-api/agents_api/activities/truncation.py +++ b/agents-api/agents_api/activities/truncation.py @@ -3,7 +3,7 @@ from beartype import beartype from temporalio import activity -from agents_api.autogen.openapi_model import Entry +from ..autogen.openapi_model import Entry # from agents_api.models.entry.entries_summarization import get_toplevel_entries_query diff --git a/agents-api/agents_api/activities/utils.py b/agents-api/agents_api/activities/utils.py index f9f7ded12..fca62578a 100644 --- a/agents-api/agents_api/activities/utils.py +++ b/agents-api/agents_api/activities/utils.py @@ -1,20 +1,33 @@ +import base64 +import datetime as dt +import functools +import itertools import json -from functools import reduce -from itertools import accumulate -from random import random -from time import time -from typing import Any, Callable +import math +import random +import statistics +import string +import time +import urllib.parse +from typing import Any, Callable, ParamSpec, Type, TypeVar, cast import re2 import yaml +import zoneinfo from beartype import beartype from simpleeval import EvalWithCompoundTypes, SimpleEval -from yaml import CSafeLoader +from yaml import CSafeDumper, CSafeLoader + +T = TypeVar("T") + + +P = ParamSpec("P") +R = TypeVar("R") + # TODO: We need to make sure that we dont expose any security issues ALLOWED_FUNCTIONS = { "abs": abs, - "accumulate": accumulate, "all": all, "any": any, "bool": bool, @@ -25,23 +38,169 @@ "int": int, "len": len, "list": list, - "load_json": json.loads, - "load_yaml": lambda string: yaml.load(string, Loader=CSafeLoader), "map": map, - "match_regex": lambda pattern, string: bool(re2.fullmatch(pattern, string)), "max": max, "min": min, - "random": random, "range": range, - "reduce": reduce, "round": round, - "search_regex": lambda pattern, string: re2.search(pattern, string), "set": set, "str": str, "sum": sum, - "time": time, "tuple": tuple, + "reduce": functools.reduce, "zip": zip, + "search_regex": lambda pattern, string: re2.search(pattern, string), + "load_json": json.loads, + "load_yaml": lambda string: yaml.load(string, Loader=CSafeLoader), + "match_regex": lambda pattern, string: bool(re2.fullmatch(pattern, string)), +} + + +class stdlib_re: + fullmatch = re2.fullmatch + search = re2.search + escape = re2.escape + findall = re2.findall + finditer = re2.finditer + match = re2.match + split = re2.split + sub = re2.sub + subn = re2.subn + + +class stdlib_json: + loads = json.loads + dumps = json.dumps + + +class stdlib_yaml: + load = lambda string: yaml.load(string, Loader=CSafeLoader) # noqa: E731 + dump = lambda value: yaml.dump(value, Dumper=CSafeDumper) # noqa: E731 + + +class stdlib_time: + strftime = time.strftime + strptime = time.strptime + time = time + + +class stdlib_random: + choice = random.choice + choices = random.choices + sample = random.sample + shuffle = random.shuffle + randrange = random.randrange + randint = random.randint + random = random.random + + +class stdlib_itertools: + accumulate = itertools.accumulate + + +class stdlib_functools: + partial = functools.partial + reduce = functools.reduce + + +class stdlib_base64: + b64encode = base64.b64encode + b64decode = base64.b64decode + + +class stdlib_urllib: + class parse: + urlparse = urllib.parse.urlparse + urlencode = urllib.parse.urlencode + unquote = urllib.parse.unquote + quote = urllib.parse.quote + parse_qs = urllib.parse.parse_qs + parse_qsl = urllib.parse.parse_qsl + urlsplit = urllib.parse.urlsplit + urljoin = urllib.parse.urljoin + unwrap = urllib.parse.unwrap + + +class stdlib_string: + ascii_letters = string.ascii_letters + ascii_lowercase = string.ascii_lowercase + ascii_uppercase = string.ascii_uppercase + digits = string.digits + hexdigits = string.hexdigits + octdigits = string.octdigits + punctuation = string.punctuation + whitespace = string.whitespace + printable = string.printable + + +class stdlib_zoneinfo: + ZoneInfo = zoneinfo.ZoneInfo + + +class stdlib_datetime: + class timezone: + class utc: + utc = dt.timezone.utc + + class datetime: + now = dt.datetime.now + datetime = dt.datetime + timedelta = dt.timedelta + date = dt.date + time = dt.time + + timedelta = dt.timedelta + + +class stdlib_math: + sqrt = math.sqrt + exp = math.exp + ceil = math.ceil + floor = math.floor + isinf = math.isinf + isnan = math.isnan + log = math.log + log10 = math.log10 + log2 = math.log2 + pow = math.pow + sin = math.sin + cos = math.cos + tan = math.tan + asin = math.asin + acos = math.acos + atan = math.atan + atan2 = math.atan2 + + pi = math.pi + e = math.e + + +class stdlib_statistics: + mean = statistics.mean + stdev = statistics.stdev + geometric_mean = statistics.geometric_mean + median = statistics.median + median_low = statistics.median_low + median_high = statistics.median_high + mode = statistics.mode + quantiles = statistics.quantiles + + +stdlib = { + "re": stdlib_re, + "json": stdlib_json, + "yaml": stdlib_yaml, + "time": stdlib_time, + "random": stdlib_random, + "itertools": stdlib_itertools, + "functools": stdlib_functools, + "base64": stdlib_base64, + "urllib": stdlib_urllib, + "string": stdlib_string, + "zoneinfo": stdlib_zoneinfo, + "datetime": stdlib_datetime, + "math": stdlib_math, + "statistics": stdlib_statistics, } @@ -50,7 +209,7 @@ def get_evaluator( names: dict[str, Any], extra_functions: dict[str, Callable] | None = None ) -> SimpleEval: evaluator = EvalWithCompoundTypes( - names=names, functions=ALLOWED_FUNCTIONS | (extra_functions or {}) + names=names | stdlib, functions=ALLOWED_FUNCTIONS | (extra_functions or {}) ) return evaluator diff --git a/agents-api/agents_api/autogen/Common.py b/agents-api/agents_api/autogen/Common.py index cb8d88035..a2d6b99a6 100644 --- a/agents-api/agents_api/autogen/Common.py +++ b/agents-api/agents_api/autogen/Common.py @@ -9,6 +9,16 @@ from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, RootModel +class JinjaTemplate(RootModel[str]): + model_config = ConfigDict( + populate_by_name=True, + ) + root: str + """ + A valid jinja template. + """ + + class Limit(RootModel[int]): model_config = ConfigDict( populate_by_name=True, diff --git a/agents-api/agents_api/autogen/Docs.py b/agents-api/agents_api/autogen/Docs.py index a7023ddfc..0c1524e48 100644 --- a/agents-api/agents_api/autogen/Docs.py +++ b/agents-api/agents_api/autogen/Docs.py @@ -57,6 +57,13 @@ class Doc(BaseModel): """ Contents of the document """ + embeddings: Annotated[ + list[float] | list[list[float]] | None, + Field(None, json_schema_extra={"readOnly": True}), + ] + """ + Embeddings for the document + """ class DocOwner(BaseModel): diff --git a/agents-api/agents_api/autogen/Sessions.py b/agents-api/agents_api/autogen/Sessions.py index f167efec5..75e5252cd 100644 --- a/agents-api/agents_api/autogen/Sessions.py +++ b/agents-api/agents_api/autogen/Sessions.py @@ -43,6 +43,16 @@ class CreateSessionRequest(BaseModel): """ Action to start on context window overflow """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + """ metadata: dict[str, Any] | None = None @@ -70,6 +80,16 @@ class PatchSessionRequest(BaseModel): """ Action to start on context window overflow """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + """ metadata: dict[str, Any] | None = None @@ -97,6 +117,16 @@ class Session(BaseModel): """ Action to start on context window overflow """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + """ id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] metadata: dict[str, Any] | None = None created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] @@ -160,6 +190,16 @@ class UpdateSessionRequest(BaseModel): """ Action to start on context window overflow """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + """ metadata: dict[str, Any] | None = None @@ -194,6 +234,16 @@ class CreateOrUpdateSessionRequest(CreateSessionRequest): """ Action to start on context window overflow """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + """ metadata: dict[str, Any] | None = None diff --git a/agents-api/agents_api/autogen/Tasks.py b/agents-api/agents_api/autogen/Tasks.py index c1e69d492..77dcfefd6 100644 --- a/agents-api/agents_api/autogen/Tasks.py +++ b/agents-api/agents_api/autogen/Tasks.py @@ -9,13 +9,7 @@ from pydantic import AwareDatetime, BaseModel, ConfigDict, Field, StrictBool from .Chat import ChatSettings -from .Docs import ( - EmbedQueryRequest, - HybridDocSearchRequest, - TextOnlyDocSearchRequest, - VectorDocSearchRequest, -) -from .Tools import CreateToolRequest +from .Tools import CreateToolRequest, NamedToolChoice class CaseThen(BaseModel): @@ -33,12 +27,36 @@ class CaseThen(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep + | WaitForInputStep + ) + """ + The steps to run if the condition is true + """ + + +class CaseThenUpdateItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + case: Literal["_"] | str + """ + The condition to evaluate + """ + then: ( + EvaluateStep + | ToolCallStep + | PromptStepUpdateItem + | GetStep + | SetStep + | LogStep | YieldStep + | ReturnStep + | SleepStep + | ErrorWorkflowStep | WaitForInputStep ) """ @@ -74,6 +92,14 @@ class ContentModel(BaseModel): """ +class ContentModel1(Content): + pass + + +class ContentModel2(ContentModel): + pass + + class CreateTaskRequest(BaseModel): """ Payload for creating a task @@ -92,12 +118,10 @@ class CreateTaskRequest(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep - | YieldStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep @@ -125,22 +149,6 @@ class CreateTaskRequest(BaseModel): metadata: dict[str, Any] | None = None -class EmbedStep(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - kind_: Annotated[ - Literal["embed"], Field("embed", json_schema_extra={"readOnly": True}) - ] - """ - The kind of step - """ - embed: EmbedQueryRequest - """ - The text to embed - """ - - class ErrorWorkflowStep(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -183,14 +191,38 @@ class ForeachDo(BaseModel): VALIDATION: Should NOT return more than 1000 elements. """ do: ( - EvaluateStep + WaitForInputStep + | EvaluateStep | ToolCallStep | PromptStep | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep + ) + """ + The steps to run for each iteration + """ + + +class ForeachDoUpdateItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + in_: Annotated[str, Field(alias="in")] + """ + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + """ + do: ( + WaitForInputStep + | EvaluateStep + | ToolCallStep + | PromptStepUpdateItem + | GetStep + | SetStep + | LogStep + | YieldStep ) """ The steps to run for each iteration @@ -213,6 +245,20 @@ class ForeachStep(BaseModel): """ +class ForeachStepUpdateItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + kind_: str | None = None + """ + Discriminator property for BaseWorkflowStep. + """ + foreach: ForeachDoUpdateItem + """ + The steps to run for each iteration + """ + + class GetStep(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -248,12 +294,10 @@ class IfElseWorkflowStep(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep - | YieldStep | WaitForInputStep ) """ @@ -266,12 +310,58 @@ class IfElseWorkflowStep(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep + | WaitForInputStep + | None, + Field(None, alias="else"), + ] + """ + The steps to run if the condition is false + """ + + +class IfElseWorkflowStepUpdateItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + kind_: str | None = None + """ + Discriminator property for BaseWorkflowStep. + """ + if_: Annotated[str, Field(alias="if")] + """ + The condition to evaluate + """ + then: ( + EvaluateStep + | ToolCallStep + | PromptStepUpdateItem + | GetStep + | SetStep + | LogStep + | YieldStep + | ReturnStep + | SleepStep + | ErrorWorkflowStep + | WaitForInputStep + ) + """ + The steps to run if the condition is true + """ + else_: Annotated[ + EvaluateStep + | ToolCallStep + | PromptStepUpdateItem + | GetStep + | SetStep + | LogStep | YieldStep + | ReturnStep + | SleepStep + | ErrorWorkflowStep | WaitForInputStep | None, Field(None, alias="else"), @@ -334,8 +424,7 @@ class Main(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep ) """ The steps to run for each iteration @@ -371,12 +460,11 @@ class MainModel(BaseModel): map: ( EvaluateStep | ToolCallStep - | PromptStep + | PromptStepUpdateItem | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep ) """ The steps to run for each iteration @@ -415,8 +503,32 @@ class ParallelStep(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep + ], + Field(max_length=100), + ] + """ + The steps to run in parallel. Max concurrency will depend on the platform. + """ + + +class ParallelStepUpdateItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + kind_: str | None = None + """ + Discriminator property for BaseWorkflowStep. + """ + parallel: Annotated[ + list[ + EvaluateStep + | ToolCallStep + | PromptStepUpdateItem + | GetStep + | SetStep + | LogStep + | YieldStep ], Field(max_length=100), ] @@ -438,21 +550,19 @@ class PatchTaskRequest(BaseModel): list[ EvaluateStep | ToolCallStep - | PromptStep + | PromptStepUpdateItem | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep - | YieldStep | WaitForInputStep - | IfElseWorkflowStep - | SwitchStep - | ForeachStep - | ParallelStep + | IfElseWorkflowStepUpdateItem + | SwitchStepUpdateItem + | ForeachStepUpdateItem + | ParallelStepUpdateItem | MainModel ] | None, @@ -520,41 +630,87 @@ class PromptStep(BaseModel): """ The prompt to run """ + tools: Literal["all"] | list[ToolRef | CreateToolRequest] = [] + """ + The tools to use for the prompt + """ + tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None + """ + The tool choice for the prompt + """ settings: ChatSettings | None = None """ Settings for the prompt """ + unwrap: StrictBool = False + """ + Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + """ -class ReturnStep(BaseModel): + +class PromptStepUpdateItem(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - kind_: Annotated[ - Literal["return"], Field("return", json_schema_extra={"readOnly": True}) - ] + kind_: str | None = None """ - The kind of step + Discriminator property for BaseWorkflowStep. """ - return_: Annotated[dict[str, str], Field(alias="return")] + prompt: list[PromptItem] | str """ - The value to return + The prompt to run + """ + tools: Literal["all"] | list[ToolRefUpdateItem | CreateToolRequest] = [] + """ + The tools to use for the prompt + """ + tool_choice: Literal["auto", "none"] | NamedToolChoice | None = None + """ + The tool choice for the prompt + """ + settings: ChatSettings | None = None + """ + Settings for the prompt + """ + unwrap: StrictBool = False + """ + Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + """ + forward_tool_results: StrictBool | None = None + """ + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. """ -class SearchStep(BaseModel): +class ReturnStep(BaseModel): model_config = ConfigDict( populate_by_name=True, ) kind_: Annotated[ - Literal["search"], Field("search", json_schema_extra={"readOnly": True}) + Literal["return"], Field("return", json_schema_extra={"readOnly": True}) ] """ The kind of step """ - search: VectorDocSearchRequest | TextOnlyDocSearchRequest | HybridDocSearchRequest + return_: Annotated[dict[str, str], Field(alias="return")] """ - The search query + The value to return """ @@ -626,6 +782,20 @@ class SwitchStep(BaseModel): """ +class SwitchStepUpdateItem(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + kind_: str | None = None + """ + Discriminator property for BaseWorkflowStep. + """ + switch: Annotated[list[CaseThenUpdateItem], Field(min_length=1)] + """ + The cond tree + """ + + class Task(BaseModel): """ Object describing a Task @@ -644,12 +814,10 @@ class Task(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep - | YieldStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep @@ -706,18 +874,62 @@ class ToolCallStep(BaseModel): """ The kind of step """ - tool: Annotated[ - str, Field(pattern="^(function|integration|system|api_call)\\.(\\w+)$") - ] + tool: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ The tool to run """ - arguments: dict[str, str] | Literal["_"] = "_" + arguments: dict[str, dict[str, str] | str] | Literal["_"] = "_" """ The input parameters for the tool (defaults to last step output) """ +class ToolRef(BaseModel): + """ + Reference to a tool + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + ref: ToolRefById | ToolRefByName + + +class ToolRefById(BaseModel): + """ + Reference to a tool by id + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + id: UUID | None = None + + +class ToolRefByName(BaseModel): + """ + Reference to a tool by name + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + name: Annotated[str | None, Field(None, max_length=40, pattern="^[^\\W0-9]\\w*$")] + """ + Valid python identifier names + """ + + +class ToolRefUpdateItem(BaseModel): + """ + Reference to a tool + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + + class UpdateTaskRequest(BaseModel): """ Payload for updating a task @@ -735,12 +947,10 @@ class UpdateTaskRequest(BaseModel): | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep + | YieldStep | ReturnStep | SleepStep | ErrorWorkflowStep - | YieldStep | WaitForInputStep | IfElseWorkflowStep | SwitchStep diff --git a/agents-api/agents_api/autogen/Tools.py b/agents-api/agents_api/autogen/Tools.py index 7664af1af..423896e89 100644 --- a/agents-api/agents_api/autogen/Tools.py +++ b/agents-api/agents_api/autogen/Tools.py @@ -6,7 +6,122 @@ from typing import Annotated, Any, Literal from uuid import UUID -from pydantic import AwareDatetime, BaseModel, ConfigDict, Field +from pydantic import AnyUrl, AwareDatetime, BaseModel, ConfigDict, Field, StrictBool + + +class ApiCallDef(BaseModel): + """ + API call definition + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + method: Literal[ + "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE" + ] + """ + The HTTP method to use + """ + url: AnyUrl + """ + The URL to call + """ + headers: dict[str, str] | None = None + """ + The headers to send with the request + """ + content: str | None = None + """ + The content as base64 to send with the request + """ + data: dict[str, Any] | None = None + """ + The data to send as form data + """ + json_: Annotated[dict[str, Any] | None, Field(None, alias="json")] + """ + JSON body to send with the request + """ + cookies: dict[str, str] | None = None + """ + Cookies + """ + params: str | dict[str, Any] | None = None + """ + The parameters to send with the request + """ + follow_redirects: StrictBool | None = None + """ + Follow redirects + """ + timeout: int | None = None + """ + The timeout for the request + """ + + +class ApiCallDefUpdate(BaseModel): + """ + API call definition + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + method: ( + Literal[ + "GET", + "POST", + "PUT", + "DELETE", + "PATCH", + "HEAD", + "OPTIONS", + "CONNECT", + "TRACE", + ] + | None + ) = None + """ + The HTTP method to use + """ + url: AnyUrl | None = None + """ + The URL to call + """ + headers: dict[str, str] | None = None + """ + The headers to send with the request + """ + content: str | None = None + """ + The content as base64 to send with the request + """ + data: dict[str, Any] | None = None + """ + The data to send as form data + """ + json_: Annotated[dict[str, Any] | None, Field(None, alias="json")] + """ + JSON body to send with the request + """ + cookies: dict[str, str] | None = None + """ + Cookies + """ + params: str | dict[str, Any] | None = None + """ + The parameters to send with the request + """ + follow_redirects: StrictBool | None = None + """ + Follow redirects + """ + timeout: int | None = None + """ + The timeout for the request + """ class ChosenToolCall(BaseModel): @@ -22,9 +137,6 @@ class ChosenToolCall(BaseModel): Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) """ function: FunctionCallOption | None = None - integration: Any | None = None - system: Any | None = None - api_call: Any | None = None id: Annotated[UUID, Field(json_schema_extra={"readOnly": True})] @@ -36,21 +148,30 @@ class CreateToolRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - type: Literal["function", "integration", "system", "api_call"] = "function" - """ - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - """ name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ - function: FunctionDef + description: str | None = None + """ + Description of the tool + """ + function: FunctionDef | None = None """ The function to call """ - integration: Any | None = None - system: Any | None = None - api_call: Any | None = None + integration: IntegrationDef | None = None + """ + The integration to call + """ + system: SystemDef | None = None + """ + The system to call + """ + api_call: ApiCallDef | None = None + """ + The API call to make + """ class FunctionCallOption(BaseModel): @@ -75,16 +196,9 @@ class FunctionDef(BaseModel): """ DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. """ - description: Annotated[ - str | None, - Field( - None, - max_length=120, - pattern="^[\\p{L}\\p{Nl}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]+[\\p{ID_Start}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Pattern_Syntax}\\p{Pattern_White_Space}]*$", - ), - ] + description: Any | None = None """ - Description of the function + DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. """ parameters: dict[str, Any] | None = None """ @@ -92,18 +206,88 @@ class FunctionDef(BaseModel): """ -class NamedToolChoice(BaseModel): +class IntegrationDef(BaseModel): + """ + Integration definition + """ + model_config = ConfigDict( populate_by_name=True, ) - type: Literal["function", "integration", "system", "api_call"] + provider: ( + Literal[ + "dummy", + "hacker_news", + "weather", + "wikipedia", + "spider", + "brave", + "browserbase", + "email", + ] + | str + ) """ - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) + The provider of the integration + """ + method: str | None = None + """ + The specific method of the integration to call + """ + setup: dict[str, Any] | None = None """ + The setup parameters the integration accepts + """ + arguments: dict[str, Any] | None = None + """ + The arguments to pre-apply to the integration call + """ + + +class IntegrationDefUpdate(BaseModel): + """ + Integration definition + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + provider: ( + Literal[ + "dummy", + "hacker_news", + "weather", + "wikipedia", + "spider", + "brave", + "browserbase", + "email", + ] + | str + | None + ) = None + """ + The provider of the integration + """ + method: str | None = None + """ + The specific method of the integration to call + """ + setup: dict[str, Any] | None = None + """ + The setup parameters the integration accepts + """ + arguments: dict[str, Any] | None = None + """ + The arguments to pre-apply to the integration call + """ + + +class NamedToolChoice(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) function: FunctionCallOption | None = None - integration: Any | None = None - system: Any | None = None - api_call: Any | None = None class PatchToolRequest(BaseModel): @@ -114,42 +298,151 @@ class PatchToolRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - type: Literal["function", "integration", "system", "api_call"] = "function" - """ - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - """ name: Annotated[str | None, Field(None, max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ + description: str | None = None + """ + Description of the tool + """ function: FunctionDef | None = None """ The function to call """ - integration: Any | None = None - system: Any | None = None - api_call: Any | None = None + integration: IntegrationDefUpdate | None = None + """ + The integration to call + """ + system: SystemDefUpdate | None = None + """ + The system to call + """ + api_call: ApiCallDefUpdate | None = None + """ + The API call to make + """ -class Tool(BaseModel): +class SystemDef(BaseModel): + """ + System definition + """ + model_config = ConfigDict( populate_by_name=True, ) - type: Literal["function", "integration", "system", "api_call"] = "function" + resource: Literal["agent", "user", "task", "execution", "doc", "session", "job"] + """ + Resource is the name of the resource to use + """ + operation: Literal[ + "create", + "update", + "patch", + "create_or_update", + "embed", + "change_status", + "search", + "chat", + "history", + "delete", + "get", + "list", + ] """ - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) + Operation is the name of the operation to perform + """ + resource_id: UUID | None = None + """ + Resource id (if applicable) + """ + subresource: Literal["tool", "doc", "execution", "transition"] | None = None + """ + Sub-resource type (if applicable) + """ + arguments: dict[str, Any] | None = None + """ + The arguments to pre-apply to the system call + """ + + +class SystemDefUpdate(BaseModel): + """ + System definition + """ + + model_config = ConfigDict( + populate_by_name=True, + ) + resource: ( + Literal["agent", "user", "task", "execution", "doc", "session", "job"] | None + ) = None + """ + Resource is the name of the resource to use + """ + operation: ( + Literal[ + "create", + "update", + "patch", + "create_or_update", + "embed", + "change_status", + "search", + "chat", + "history", + "delete", + "get", + "list", + ] + | None + ) = None + """ + Operation is the name of the operation to perform + """ + resource_id: UUID | None = None + """ + Resource id (if applicable) """ + subresource: Literal["tool", "doc", "execution", "transition"] | None = None + """ + Sub-resource type (if applicable) + """ + arguments: dict[str, Any] | None = None + """ + The arguments to pre-apply to the system call + """ + + +class Tool(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ - function: FunctionDef + description: str | None = None + """ + Description of the tool + """ + function: FunctionDef | None = None """ The function to call """ - integration: Any | None = None - system: Any | None = None - api_call: Any | None = None + integration: IntegrationDef | None = None + """ + The integration to call + """ + system: SystemDef | None = None + """ + The system to call + """ + api_call: ApiCallDef | None = None + """ + The API call to make + """ created_at: Annotated[AwareDatetime, Field(json_schema_extra={"readOnly": True})] """ When this resource was created as UTC date-time @@ -180,35 +473,33 @@ class UpdateToolRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, ) - type: Literal["function", "integration", "system", "api_call"] = "function" - """ - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - """ name: Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] """ Name of the tool (must be unique for this agent and a valid python identifier string ) """ - function: FunctionDef + description: str | None = None """ - The function to call + Description of the tool """ - integration: Any | None = None - system: Any | None = None - api_call: Any | None = None - - -class ChosenFunctionCall(ChosenToolCall): - model_config = ConfigDict( - populate_by_name=True, - ) - type: Literal["function"] = "function" - function: FunctionCallOption + function: FunctionDef | None = None """ The function to call """ + integration: IntegrationDef | None = None + """ + The integration to call + """ + system: SystemDef | None = None + """ + The system to call + """ + api_call: ApiCallDef | None = None + """ + The API call to make + """ -class NamedFunctionChoice(NamedToolChoice): +class ChosenFunctionCall(ChosenToolCall): model_config = ConfigDict( populate_by_name=True, ) diff --git a/agents-api/agents_api/autogen/openapi_model.py b/agents-api/agents_api/autogen/openapi_model.py index 3e329581c..fd06f38a8 100644 --- a/agents-api/agents_api/autogen/openapi_model.py +++ b/agents-api/agents_api/autogen/openapi_model.py @@ -1,10 +1,18 @@ # ruff: noqa: F401, F403, F405 +import ast from typing import Annotated, Any, Generic, Literal, Self, Type, TypeVar, get_args from uuid import UUID +import jinja2 from litellm.utils import _select_tokenizer as select_tokenizer from litellm.utils import token_counter -from pydantic import AwareDatetime, Field +from pydantic import ( + AwareDatetime, + Field, + computed_field, + field_validator, + model_validator, +) from ..common.utils.datetime import utcnow from .Agents import * @@ -68,6 +76,236 @@ class InputChatMLMessage(Message): pass +# Patches +# ------- + + +def type_property(self: BaseModel) -> str: + return ( + "function" + if self.function + else "integration" + if self.integration + else "system" + if self.system + else "api_call" + if self.api_call + else None + ) + + +# Patch original Tool class to add 'type' property +TaskTool.type = computed_field(property(type_property)) + +# Patch original Tool class to add 'type' property +Tool.type = computed_field(property(type_property)) + +# Patch original UpdateToolRequest class to add 'type' property +UpdateToolRequest.type = computed_field(property(type_property)) + +# Patch original PatchToolRequest class to add 'type' property +PatchToolRequest.type = computed_field(property(type_property)) + + +# Patch Task Workflow Steps +# ------------------------- + + +def validate_python_expression(expr: str) -> tuple[bool, str]: + try: + ast.parse(expr) + return True, "" + except SyntaxError as e: + return False, f"SyntaxError in '{expr}': {str(e)}" + + +def validate_jinja_template(template: str) -> tuple[bool, str]: + env = jinja2.Environment() + try: + parsed_template = env.parse(template) + for node in parsed_template.body: + if isinstance(node, jinja2.nodes.Output): + for child in node.nodes: + if isinstance(child, jinja2.nodes.Name): + # Check if the variable is a valid Python expression + is_valid, error = validate_python_expression(child.name) + if not is_valid: + return ( + False, + f"Invalid Python expression in Jinja template '{template}': {error}", + ) + return True, "" + except jinja2.exceptions.TemplateSyntaxError as e: + return False, f"TemplateSyntaxError in '{template}': {str(e)}" + + +@field_validator("evaluate") +def validate_evaluate_expressions(cls, v): + for key, expr in v.items(): + is_valid, error = validate_python_expression(expr) + if not is_valid: + raise ValueError(f"Invalid Python expression in key '{key}': {error}") + return v + + +EvaluateStep.validate_evaluate_expressions = validate_evaluate_expressions + + +@field_validator("arguments") +def validate_arguments(cls, v): + if isinstance(v, dict): + for key, expr in v.items(): + if isinstance(expr, str): + is_valid, error = validate_python_expression(expr) + if not is_valid: + raise ValueError( + f"Invalid Python expression in arguments key '{key}': {error}" + ) + return v + + +ToolCallStep.validate_arguments = validate_arguments + + +# Add the new validator function +@field_validator("prompt") +def validate_prompt(cls, v): + if isinstance(v, str): + is_valid, error = validate_jinja_template(v) + if not is_valid: + raise ValueError(f"Invalid Jinja template in prompt: {error}") + elif isinstance(v, list): + for item in v: + if "content" in item: + is_valid, error = validate_jinja_template(item["content"]) + if not is_valid: + raise ValueError( + f"Invalid Jinja template in prompt content: {error}" + ) + return v + + +# Patch the original PromptStep class to add the new validator +PromptStep.validate_prompt = validate_prompt + + +@field_validator("set") +def validate_set_expressions(cls, v): + for key, expr in v.items(): + is_valid, error = validate_python_expression(expr) + if not is_valid: + raise ValueError(f"Invalid Python expression in set key '{key}': {error}") + return v + + +SetStep.validate_set_expressions = validate_set_expressions + + +@field_validator("log") +def validate_log_template(cls, v): + is_valid, error = validate_jinja_template(v) + if not is_valid: + raise ValueError(f"Invalid Jinja template in log: {error}") + return v + + +LogStep.validate_log_template = validate_log_template + + +@field_validator("return_") +def validate_return_expressions(cls, v): + for key, expr in v.items(): + is_valid, error = validate_python_expression(expr) + if not is_valid: + raise ValueError( + f"Invalid Python expression in return key '{key}': {error}" + ) + return v + + +ReturnStep.validate_return_expressions = validate_return_expressions + + +@field_validator("arguments") +def validate_yield_arguments(cls, v): + if isinstance(v, dict): + for key, expr in v.items(): + is_valid, error = validate_python_expression(expr) + if not is_valid: + raise ValueError( + f"Invalid Python expression in yield arguments key '{key}': {error}" + ) + return v + + +YieldStep.validate_yield_arguments = validate_yield_arguments + + +@field_validator("if_") +def validate_if_expression(cls, v): + is_valid, error = validate_python_expression(v) + if not is_valid: + raise ValueError(f"Invalid Python expression in if condition: {error}") + return v + + +IfElseWorkflowStep.validate_if_expression = validate_if_expression + + +@field_validator("over") +def validate_over_expression(cls, v): + is_valid, error = validate_python_expression(v) + if not is_valid: + raise ValueError(f"Invalid Python expression in over: {error}") + return v + + +@field_validator("reduce") +def validate_reduce_expression(cls, v): + if v is not None: + is_valid, error = validate_python_expression(v) + if not is_valid: + raise ValueError(f"Invalid Python expression in reduce: {error}") + return v + + +MapReduceStep.validate_over_expression = validate_over_expression +MapReduceStep.validate_reduce_expression = validate_reduce_expression + + +# Patch workflow +# -------------- + +_CreateTaskRequest = CreateTaskRequest + +CreateTaskRequest.model_config = ConfigDict( + **{ + **_CreateTaskRequest.model_config, + "extra": "allow", + } +) + + +@model_validator(mode="after") +def validate_subworkflows(self): + subworkflows = { + k: v + for k, v in self.model_dump().items() + if k not in _CreateTaskRequest.model_fields + } + + for workflow_name, workflow_definition in subworkflows.items(): + try: + WorkflowType.model_validate(workflow_definition) + setattr(self, workflow_name, WorkflowType(workflow_definition)) + except Exception as e: + raise ValueError(f"Invalid subworkflow '{workflow_name}': {str(e)}") + return self + + +CreateTaskRequest.validate_subworkflows = validate_subworkflows + + # Custom types (not generated correctly) # -------------------------------------- @@ -162,8 +400,6 @@ def from_model_input( | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep | ReturnStep | SleepStep | ErrorWorkflowStep @@ -200,6 +436,7 @@ class TaskSpec(_Task): model_config = ConfigDict(extra="ignore") workflows: list[Workflow] + tools: list[TaskToolDef] # Remove main field from the model main: None = None @@ -227,17 +464,26 @@ class Task(_Task): # Patch some models to allow extra fields # -------------------------------------- - -_CreateTaskRequest = CreateTaskRequest - - -class CreateTaskRequest(_CreateTaskRequest): - model_config = ConfigDict( - **{ - **_CreateTaskRequest.model_config, - "extra": "allow", - } - ) +WorkflowType = RootModel[ + list[ + EvaluateStep + | ToolCallStep + | PromptStep + | GetStep + | SetStep + | LogStep + | ReturnStep + | SleepStep + | ErrorWorkflowStep + | YieldStep + | WaitForInputStep + | IfElseWorkflowStep + | SwitchStep + | ForeachStep + | ParallelStep + | MapReduceStep + ] +] CreateOrUpdateTaskRequest = CreateTaskRequest diff --git a/agents-api/agents_api/clients/integrations.py b/agents-api/agents_api/clients/integrations.py new file mode 100644 index 000000000..5423fb664 --- /dev/null +++ b/agents-api/agents_api/clients/integrations.py @@ -0,0 +1,31 @@ +from typing import Any, List + +from beartype import beartype +from httpx import AsyncClient + +from ..env import integration_service_url + +__all__: List[str] = ["run_integration_service"] + + +@beartype +async def run_integration_service( + *, + provider: str, + arguments: dict, + setup: dict | None = None, + method: str | None = None, +) -> Any: + slug = f"{provider}/{method}" if method else provider + url = f"{integration_service_url}/execute/{slug}" + + setup = setup or None + + async with AsyncClient() as client: + response = await client.post( + url, + json={"arguments": arguments, "setup": setup}, + ) + response.raise_for_status() + + return response.json() diff --git a/agents-api/agents_api/clients/temporal.py b/agents-api/agents_api/clients/temporal.py index 5f14b84f6..4bb25cbc9 100644 --- a/agents-api/agents_api/clients/temporal.py +++ b/agents-api/agents_api/clients/temporal.py @@ -5,6 +5,7 @@ from ..autogen.openapi_model import TransitionTarget from ..common.protocol.tasks import ExecutionInput +from ..common.retry_policies import DEFAULT_RETRY_POLICY from ..env import ( temporal_client_cert, temporal_namespace, @@ -54,6 +55,7 @@ async def run_task_execution_workflow( task_queue=temporal_task_queue, id=str(job_id), run_timeout=timedelta(days=31), + retry_policy=DEFAULT_RETRY_POLICY, # TODO: Should add search_attributes for queryability ) diff --git a/agents-api/agents_api/clients/worker/worker.py b/agents-api/agents_api/clients/worker/worker.py index 1deb8d1c3..8befa3080 100644 --- a/agents-api/agents_api/clients/worker/worker.py +++ b/agents-api/agents_api/clients/worker/worker.py @@ -1,7 +1,6 @@ import httpx -from agents_api.env import temporal_worker_url - +from ...env import temporal_worker_url from .types import ( MemoryManagementTask, MemoryManagementTaskArgs, diff --git a/agents-api/agents_api/common/exceptions/__init__.py b/agents-api/agents_api/common/exceptions/__init__.py index a38a546a2..571691082 100644 --- a/agents-api/agents_api/common/exceptions/__init__.py +++ b/agents-api/agents_api/common/exceptions/__init__.py @@ -1,12 +1,14 @@ """ -This module defines a structured hierarchy of custom exceptions for the agents API, aimed at handling specific error scenarios encountered across various operations. These exceptions are designed to provide clear, actionable error messages and appropriate HTTP status codes, enhancing the API's robustness and usability. +This module defines a structured hierarchy of custom exceptions for the agents API, aimed at handling specific error scenarios encountered across various operations. +These exceptions are designed to provide clear, actionable error messages and appropriate HTTP status codes, enhancing the API's robustness and usability. Exceptions are organized into categories based on the domain of operation, including: - Agent-related operations (agents.py): Exceptions such as `AgentNotFoundError` and `AgentToolNotFoundError` cater to errors specific to agent management. - Session management (sessions.py): Defines exceptions like `SessionNotFoundError` for handling errors related to session operations. - User interactions (users.py): Includes exceptions such as `UserNotFoundError` for addressing issues encountered during user-related operations. -All custom exceptions extend from `BaseCommonException`, which encapsulates common attributes and behavior, including the error message and HTTP status code. This structured approach to exception handling facilitates precise and meaningful error feedback to API consumers, thereby improving the overall developer experience. +All custom exceptions extend from `BaseCommonException`, which encapsulates common attributes and behavior, including the error message and HTTP status code. +This structured approach to exception handling facilitates precise and meaningful error feedback to API consumers, thereby improving the overall developer experience. """ diff --git a/agents-api/agents_api/common/exceptions/agents.py b/agents-api/agents_api/common/exceptions/agents.py index c412eba35..e58f25104 100644 --- a/agents-api/agents_api/common/exceptions/agents.py +++ b/agents-api/agents_api/common/exceptions/agents.py @@ -12,7 +12,12 @@ class BaseAgentException(BaseCommonException): class AgentNotFoundError(BaseAgentException): - """Exception raised when a requested agent cannot be found.""" + """ + Exception raised when a requested agent cannot be found. + Attributes: + developer_id (UUID | str): The ID of the developer attempting the operation. + agent_id (UUID | str): The ID of the agent that was not found. + """ def __init__(self, developer_id: UUID | str, agent_id: UUID | str): # Initialize the exception with a message indicating the missing agent and developer ID. @@ -23,7 +28,12 @@ def __init__(self, developer_id: UUID | str, agent_id: UUID | str): class AgentToolNotFoundError(BaseAgentException): - """Exception raised when a requested tool associated with an agent cannot be found.""" + """ + Exception raised when a requested tool associated with an agent cannot be found. + Attributes: + agent_id (UUID | str): The ID of the agent that was not found. + tool_id (UUID | str): The ID of the tool that was not found. + """ def __init__(self, agent_id: UUID | str, tool_id: UUID | str): # Initialize the exception with a message indicating the missing tool and agent ID. @@ -33,7 +43,12 @@ def __init__(self, agent_id: UUID | str, tool_id: UUID | str): class AgentDocNotFoundError(BaseAgentException): - """Exception raised when a requested document associated with an agent cannot be found.""" + """ + Exception raised when a requested document associated with an agent cannot be found. + Attributes: + agent_id (UUID | str): The ID of the agent that was not found. + doc_id (UUID | str): The ID of the document that was not found. + """ def __init__(self, agent_id: UUID | str, doc_id: UUID | str): # Initialize the exception with a message indicating the missing document and agent ID. @@ -43,6 +58,8 @@ def __init__(self, agent_id: UUID | str, doc_id: UUID | str): class AgentModelNotValid(BaseAgentException): + """Exception raised when requested model is not recognized.""" + def __init__(self, model: str, all_models: list[str]): super().__init__( f"Unknown model: {model}. Please provide a valid model name." @@ -52,6 +69,8 @@ def __init__(self, model: str, all_models: list[str]): class MissingAgentModelAPIKeyError(BaseAgentException): + """Exception raised when API key for requested model is missing.""" + def __init__(self, model: str): super().__init__( f"API key missing for model: {model}. Please provide a valid API key in the configuration", diff --git a/agents-api/agents_api/common/exceptions/sessions.py b/agents-api/agents_api/common/exceptions/sessions.py index d6c04aff5..6e9941d43 100644 --- a/agents-api/agents_api/common/exceptions/sessions.py +++ b/agents-api/agents_api/common/exceptions/sessions.py @@ -8,29 +8,24 @@ from . import BaseCommonException -""" -Base exception class for session-related errors. - -This class serves as a base for all session-related exceptions, allowing for a structured exception handling approach specific to session operations. -""" - class BaseSessionException(BaseCommonException): - pass - + """ + Base exception class for session-related errors. -""" -Exception raised when a session cannot be found. + This class serves as a base for all session-related exceptions, allowing for a structured exception handling approach specific to session operations. + """ -This exception is used to indicate that a specific session, identified by its session ID, does not exist or is not accessible for the given developer. -""" + pass class SessionNotFoundError(BaseSessionException): """ - Initializes a new instance of the SessionNotFoundError. + Exception raised when a session cannot be found. + + This exception is used to indicate that a specific session, identified by its session ID, does not exist or is not accessible for the given developer. - Args: + Attributes: developer_id (UUID | str): The unique identifier of the developer attempting to access the session. session_id (UUID | str): The unique identifier of the session that was not found. """ diff --git a/agents-api/agents_api/common/exceptions/tasks.py b/agents-api/agents_api/common/exceptions/tasks.py new file mode 100644 index 000000000..81331234c --- /dev/null +++ b/agents-api/agents_api/common/exceptions/tasks.py @@ -0,0 +1,118 @@ +""" +This module defines non-retryable error types and provides a function to check +if a given error is non-retryable. These are used in conjunction with custom +Temporal interceptors to prevent unnecessary retries of certain error types. +""" + +import asyncio + +import beartype +import beartype.roar +import box +import box.exceptions +import fastapi +import httpx +import jinja2 +import jsonschema.exceptions +import litellm +import pydantic +import requests +import temporalio.exceptions + +# List of error types that should not be retried +NON_RETRYABLE_ERROR_TYPES = ( + # Temporal-specific errors + temporalio.exceptions.WorkflowAlreadyStartedError, + temporalio.exceptions.TerminatedError, + temporalio.exceptions.CancelledError, + # + # Built-in Python exceptions + TypeError, + AssertionError, + SyntaxError, + ValueError, + ZeroDivisionError, + IndexError, + AttributeError, + LookupError, + BufferError, + ArithmeticError, + KeyError, + NameError, + NotImplementedError, + RecursionError, + RuntimeError, + StopIteration, + StopAsyncIteration, + IndentationError, + TabError, + # + # Unicode-related errors + UnicodeError, + UnicodeEncodeError, + UnicodeDecodeError, + UnicodeTranslateError, + # + # HTTP and API-related errors + fastapi.exceptions.HTTPException, + fastapi.exceptions.RequestValidationError, + httpx.RequestError, + httpx.HTTPStatusError, + # + # Asynchronous programming errors + asyncio.CancelledError, + asyncio.InvalidStateError, + GeneratorExit, + # + # Third-party library exceptions + jinja2.exceptions.TemplateSyntaxError, + jinja2.exceptions.TemplateNotFound, + jsonschema.exceptions.ValidationError, + pydantic.ValidationError, + requests.exceptions.InvalidURL, + requests.exceptions.MissingSchema, + # + # Box exceptions + box.exceptions.BoxKeyError, + box.exceptions.BoxTypeError, + box.exceptions.BoxValueError, + # + # Beartype exceptions + beartype.roar.BeartypeException, + beartype.roar.BeartypeDecorException, + beartype.roar.BeartypeDecorHintException, + beartype.roar.BeartypeDecorHintNonpepException, + beartype.roar.BeartypeDecorHintPepException, + beartype.roar.BeartypeDecorHintPepUnsupportedException, + beartype.roar.BeartypeDecorHintTypeException, + beartype.roar.BeartypeDecorParamException, + beartype.roar.BeartypeDecorParamNameException, + beartype.roar.BeartypeCallHintParamViolation, + beartype.roar.BeartypeCallHintReturnViolation, + beartype.roar.BeartypeDecorHintParamDefaultViolation, + beartype.roar.BeartypeDoorHintViolation, + # + # LiteLLM exceptions + litellm.exceptions.NotFoundError, + litellm.exceptions.InvalidRequestError, + litellm.exceptions.AuthenticationError, + litellm.exceptions.ServiceUnavailableError, + litellm.exceptions.OpenAIError, + litellm.exceptions.APIError, +) + + +def is_non_retryable_error(error: BaseException) -> bool: + """ + Determines if the given error is non-retryable. + + This function checks if the error is an instance of any of the error types + defined in NON_RETRYABLE_ERROR_TYPES. + + Args: + error (Exception): The error to check. + + Returns: + bool: True if the error is non-retryable, False otherwise. + """ + return isinstance(error, NON_RETRYABLE_ERROR_TYPES) diff --git a/agents-api/agents_api/common/exceptions/users.py b/agents-api/agents_api/common/exceptions/users.py index 2f7f58ed6..cf4e995ad 100644 --- a/agents-api/agents_api/common/exceptions/users.py +++ b/agents-api/agents_api/common/exceptions/users.py @@ -6,13 +6,18 @@ class BaseUserException(BaseCommonException): - """Base exception class for user-related errors. This class serves as a parent for all user-related exceptions to facilitate catching errors specific to user operations.""" + """ + Base exception class for user-related errors. + + This class serves as a parent for all user-related exceptions to facilitate catching errors specific to user operations. + """ pass class UserNotFoundError(BaseUserException): - """Exception raised when a requested user cannot be found. + """ + Exception raised when a requested user cannot be found. Attributes: developer_id (UUID | str): The ID of the developer attempting the operation. user_id (UUID | str): The ID of the user that was not found. @@ -27,7 +32,8 @@ def __init__(self, developer_id: UUID | str, user_id: UUID | str): class UserDocNotFoundError(BaseUserException): - """Exception raised when a specific document related to a user cannot be found. + """ + Exception raised when a specific document related to a user cannot be found. Attributes: user_id (UUID | str): The ID of the user associated with the document. doc_id (UUID | str): The ID of the document that was not found. diff --git a/agents-api/agents_api/common/interceptors.py b/agents-api/agents_api/common/interceptors.py new file mode 100644 index 000000000..c6e8e2eaf --- /dev/null +++ b/agents-api/agents_api/common/interceptors.py @@ -0,0 +1,92 @@ +""" +This module defines custom interceptors for Temporal activities and workflows. +The main purpose of these interceptors is to handle errors and prevent retrying +certain types of errors that are known to be non-retryable. +""" + +from typing import Optional, Type + +from temporalio.exceptions import ApplicationError +from temporalio.worker import ( + ActivityInboundInterceptor, + ExecuteActivityInput, + ExecuteWorkflowInput, + Interceptor, + WorkflowInboundInterceptor, + WorkflowInterceptorClassInput, +) + +from .exceptions.tasks import is_non_retryable_error + + +class CustomActivityInterceptor(ActivityInboundInterceptor): + """ + Custom interceptor for Temporal activities. + + This interceptor catches exceptions during activity execution and + raises them as non-retryable ApplicationErrors if they are identified + as non-retryable errors. + """ + + async def execute_activity(self, input: ExecuteActivityInput): + try: + return await super().execute_activity(input) + except BaseException as e: + if is_non_retryable_error(e): + raise ApplicationError( + str(e), + type=type(e).__name__, + non_retryable=True, + ) + raise + + +class CustomWorkflowInterceptor(WorkflowInboundInterceptor): + """ + Custom interceptor for Temporal workflows. + + This interceptor catches exceptions during workflow execution and + raises them as non-retryable ApplicationErrors if they are identified + as non-retryable errors. + """ + + async def execute_workflow(self, input: ExecuteWorkflowInput): + try: + return await super().execute_workflow(input) + except BaseException as e: + if is_non_retryable_error(e): + raise ApplicationError( + str(e), + type=type(e).__name__, + non_retryable=True, + ) + raise + + +class CustomInterceptor(Interceptor): + """ + Custom Interceptor that combines both activity and workflow interceptors. + + This class is responsible for creating and returning the custom + interceptors for both activities and workflows. + """ + + def intercept_activity( + self, next: ActivityInboundInterceptor + ) -> ActivityInboundInterceptor: + """ + Creates and returns a CustomActivityInterceptor. + + This method is called by Temporal to intercept activity executions. + """ + return CustomActivityInterceptor(super().intercept_activity(next)) + + def workflow_interceptor_class( + self, input: WorkflowInterceptorClassInput + ) -> Optional[Type[WorkflowInboundInterceptor]]: + """ + Returns the CustomWorkflowInterceptor class. + + This method is called by Temporal to get the workflow interceptor class. + """ + return CustomWorkflowInterceptor diff --git a/agents-api/agents_api/common/protocol/agents.py b/agents-api/agents_api/common/protocol/agents.py index 222f91f01..89f7f4a2d 100644 --- a/agents-api/agents_api/common/protocol/agents.py +++ b/agents-api/agents_api/common/protocol/agents.py @@ -4,17 +4,23 @@ class AgentDefaultSettings(BaseModel): """Defines default settings for an agent. These settings control various aspects of the agent's behavior during operation.""" - """Temperature setting influencing the randomness of the agent's responses. Higher values lead to more random responses.""" temperature: float = 0.0 - """Top-p sampling setting controlling the nucleus of the probability distribution to sample from.""" + """Temperature setting influencing the randomness of the agent's responses. Higher values lead to more random responses.""" + top_p: float = 1.0 - """Penalty applied to discourage repetition in the agent's responses.""" + """Top-p sampling setting controlling the nucleus of the probability distribution to sample from.""" + repetition_penalty: float = 1.0 - """Penalty for longer responses, encouraging more concise outputs.""" + """Penalty applied to discourage repetition in the agent's responses.""" + length_penalty: float = 1.0 - """Penalty applied based on the presence of certain words, influencing content generation.""" + """Penalty for longer responses, encouraging more concise outputs.""" + presence_penalty: float = 0.0 - """Penalty that decreases the likelihood of frequently used words in the agent's responses.""" + """Penalty applied based on the presence of certain words, influencing content generation.""" + frequency_penalty: float = 0.0 - """Minimum probability threshold for including a word in the agent's response.""" + """Penalty that decreases the likelihood of frequently used words in the agent's responses.""" + min_p: float = 0.01 + """Minimum probability threshold for including a word in the agent's response.""" diff --git a/agents-api/agents_api/common/protocol/tasks.py b/agents-api/agents_api/common/protocol/tasks.py index 81a04bb4a..bd4aaa5a2 100644 --- a/agents-api/agents_api/common/protocol/tasks.py +++ b/agents-api/agents_api/common/protocol/tasks.py @@ -72,7 +72,7 @@ "error": [], "cancelled": [], # Intermediate states - "wait": ["resume", "cancelled", "finish", "finish_branch"], + "wait": ["resume", "step", "cancelled", "finish", "finish_branch"], "resume": [ "wait", "error", @@ -118,7 +118,8 @@ } # type: ignore -PartialTransition: Type[BaseModel] = create_partial_model(CreateTransitionRequest) +class PartialTransition(create_partial_model(CreateTransitionRequest)): + user_state: dict[str, Any] = Field(default_factory=dict) class ExecutionInput(BaseModel): @@ -126,7 +127,7 @@ class ExecutionInput(BaseModel): execution: Execution task: TaskSpecDef agent: Agent - tools: list[Tool] + agent_tools: list[Tool] arguments: dict[str, Any] # Not used at the moment @@ -139,6 +140,23 @@ class StepContext(BaseModel): inputs: list[Any] cursor: TransitionTarget + @computed_field + @property + def tools(self) -> list[Tool]: + execution_input = self.execution_input + task = execution_input.task + agent_tools = execution_input.agent_tools + + if not task.inherit_tools: + return task.tools + + # Remove duplicates from agent_tools + filtered_tools = [ + t for t in agent_tools if t.name not in map(lambda x: x.name, task.tools) + ] + + return filtered_tools + task.tools + @computed_field @property def outputs(self) -> list[dict[str, Any]]: # included in dump @@ -201,19 +219,28 @@ def task_to_spec( task: Task | CreateTaskRequest | UpdateTaskRequest | PatchTaskRequest, **model_opts ) -> TaskSpecDef | PartialTaskSpecDef: task_data = task.model_dump(**model_opts) - main = task_data.pop("main") - workflows = [Workflow(name="main", steps=main)] + if "tools" in task_data: + del task_data["tools"] + + tools = [] + for tool in task.tools: + tool_spec = getattr(tool, tool.type) - for k in list(task_data.keys()): - if k in TaskSpec.model_fields.keys(): - continue + tools.append( + TaskToolDef( + type=tool.type, + spec=tool_spec.model_dump(), + **tool.model_dump(exclude={"type"}), + ) + ) - steps = task_data.pop(k) - workflows.append(Workflow(name=k, steps=steps)) + workflows = [Workflow(name="main", steps=task_data.pop("main"))] - tools = task_data.pop("tools", []) - tools = [TaskToolDef(spec=tool.pop(tool["type"]), **tool) for tool in tools] + for key, steps in list(task_data.items()): + if key not in TaskSpec.model_fields: + workflows.append(Workflow(name=key, steps=steps)) + del task_data[key] cls = PartialTaskSpecDef if isinstance(task, PatchTaskRequest) else TaskSpecDef diff --git a/agents-api/agents_api/common/retry_policies.py b/agents-api/agents_api/common/retry_policies.py new file mode 100644 index 000000000..c6c1c362c --- /dev/null +++ b/agents-api/agents_api/common/retry_policies.py @@ -0,0 +1,14 @@ +# from datetime import timedelta + +# from temporalio.common import RetryPolicy + +# DEFAULT_RETRY_POLICY = RetryPolicy( +# initial_interval=timedelta(seconds=1), +# backoff_coefficient=2, +# maximum_attempts=25, +# maximum_interval=timedelta(seconds=300), +# ) + +# FIXME: Adding both interceptors and retry policy (even with `non_retryable_errors` not set) +# is causing the errors to be retried. We need to find a workaround for this. +DEFAULT_RETRY_POLICY = None diff --git a/agents-api/agents_api/common/utils/json.py b/agents-api/agents_api/common/utils/json.py index 3157af9c8..f1b82742a 100644 --- a/agents-api/agents_api/common/utils/json.py +++ b/agents-api/agents_api/common/utils/json.py @@ -11,28 +11,35 @@ class CustomJSONEncoder(json.JSONEncoder): """A custom JSON encoder subclass that handles None values and UUIDs for JSON serialization. It allows specifying a default value for None objects during initialization.""" def __init__(self, *args, **kwargs) -> None: - """Initializes the custom JSON encoder. + """ + Initializes the custom JSON encoder. Parameters: *args: Variable length argument list. **kwargs: Arbitrary keyword arguments. The 'default_empty_value' keyword argument specifies the default value to use for None objects during serialization. """ + self._default_empty_value = kwargs.pop("default_empty_value") super().__init__(*args, **kwargs) def encode(self, o) -> str: - """Encodes the given object into a JSON formatted string. + """ + Encodes the given object into a JSON formatted string. Parameters: o: The object to encode. - Returns: A JSON formatted string representing 'o'.""" + Returns: A JSON formatted string representing 'o'. + """ + # Use the overridden default method for serialization before encoding return super().encode(self.default(o)) def default(self, obj) -> Any: - """Provides a default serialization for objects that the standard JSON encoder cannot serialize. + """ + Provides a default serialization for objects that the standard JSON encoder cannot serialize. Parameters: obj: The object to serialize. Returns: A serializable object or raises a TypeError if the object is not serializable. """ + if obj is None: return self._default_empty_value @@ -46,12 +53,15 @@ def default(self, obj) -> Any: def dumps(obj: Any, default_empty_value="", cls=None) -> str: - """Serializes an object to a JSON formatted string using the custom JSON encoder. + """ + Serializes an object to a JSON formatted string using the custom JSON encoder. Parameters: obj: The object to serialize. default_empty_value: The default value to use for None objects. cls: The custom encoder class to use, defaults to CustomJSONEncoder. - Returns: A JSON formatted string.""" + Returns: A JSON formatted string. + """ + return json.dumps( obj, cls=cls or CustomJSONEncoder, default_empty_value=default_empty_value ) diff --git a/agents-api/agents_api/common/utils/messages.py b/agents-api/agents_api/common/utils/messages.py index fd971296c..c94808324 100644 --- a/agents-api/agents_api/common/utils/messages.py +++ b/agents-api/agents_api/common/utils/messages.py @@ -1,7 +1,7 @@ import json from typing import cast -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ChatMLImageContentPart, ChatMLTextContentPart, ) diff --git a/agents-api/agents_api/dependencies/query_filter.py b/agents-api/agents_api/dependencies/query_filter.py new file mode 100644 index 000000000..c100f1489 --- /dev/null +++ b/agents-api/agents_api/dependencies/query_filter.py @@ -0,0 +1,54 @@ +from typing import Any, Callable + +from fastapi import Request + + +def convert_value(value: str) -> Any: + """ + Attempts to convert a string value to an int or float. Returns the original string if conversion fails. + """ + for convert in (int, float): + try: + return convert(value) + except ValueError: + continue + return value + + +def create_filter_extractor( + prefix: str = "filter", +) -> Callable[[Request], dict[str, Any]]: + """ + Creates a dependency function to extract filter parameters with a given prefix. + + Args: + prefix (str): The prefix to identify filter parameters. + + Returns: + Callable[[Request], dict[str, Any]]: The dependency function. + """ + + # Add a dot to the prefix to allow for nested filters + prefix += "." + + def extract_filters(request: Request) -> dict[str, Any]: + """ + Extracts query parameters that start with the specified prefix and returns them as a dictionary. + + Args: + request (Request): The incoming HTTP request. + + Returns: + dict[str, Any]: A dictionary containing the filter parameters. + """ + + filters: dict[str, Any] = {} + + for key, value in request.query_params.items(): + if key.startswith(prefix): + filter_key = key[len(prefix) :] + filters[filter_key] = convert_value(value) + + return filters + + return extract_filters diff --git a/agents-api/agents_api/env.py b/agents-api/agents_api/env.py index daee79172..2b016fd40 100644 --- a/agents-api/agents_api/env.py +++ b/agents-api/agents_api/env.py @@ -40,6 +40,10 @@ summarization_model_name: str = env.str( "SUMMARIZATION_MODEL_NAME", default="gpt-4-turbo" ) +do_verify_developer: bool = env.bool("DO_VERIFY_DEVELOPER", default=True) +do_verify_developer_owns_resource: bool = env.bool( + "DO_VERIFY_DEVELOPER_OWNS_RESOURCE", default=True +) # Auth @@ -68,6 +72,13 @@ embedding_dimensions: int = env.int("EMBEDDING_DIMENSIONS", default=1024) +# Integration service +# ------------------- +integration_service_url: str = env.str( + "INTEGRATION_SERVICE_URL", default="http://0.0.0.0:8000" +) + + # Temporal # -------- temporal_worker_url: str = env.str("TEMPORAL_WORKER_URL", default="localhost:7233") diff --git a/agents-api/agents_api/exceptions.py b/agents-api/agents_api/exceptions.py index fbb8f00f8..4fbf8a2b9 100644 --- a/agents-api/agents_api/exceptions.py +++ b/agents-api/agents_api/exceptions.py @@ -3,11 +3,15 @@ class AgentsBaseException(Exception): class ModelNotSupportedError(AgentsBaseException): + """Exception raised when model is not supported.""" + def __init__(self, model_name) -> None: super().__init__(f"model {model_name} is not supported") class PromptTooBigError(AgentsBaseException): + """Exception raised when prompt is too big.""" + def __init__(self, token_count, max_tokens) -> None: super().__init__( f"prompt is too big, {token_count} tokens provided, exceeds maximum of {max_tokens}" @@ -15,5 +19,7 @@ def __init__(self, token_count, max_tokens) -> None: class UnknownTokenizerError(AgentsBaseException): + """Exception raised when tokenizer is unknown.""" + def __init__(self) -> None: super().__init__("unknown tokenizer") diff --git a/agents-api/agents_api/models/agent/create_agent.py b/agents-api/agents_api/models/agent/create_agent.py index 73be4ec77..98daab540 100644 --- a/agents-api/agents_api/models/agent/create_agent.py +++ b/agents-api/agents_api/models/agent/create_agent.py @@ -30,11 +30,24 @@ lambda e: isinstance(e, QueryException) and "asserted to return some results, but returned none" in str(e): lambda *_: HTTPException( - detail="developer not found", status_code=403 + detail="Developer not found. Please ensure the provided auth token (which refers to your developer_id) is valid and the developer has the necessary permissions to create an agent.", + status_code=403, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", ), - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), } ) @wrap_in_class( @@ -55,12 +68,12 @@ def create_agent( Constructs and executes a datalog query to create a new agent in the database. Parameters: - - agent_id (UUID | None): The unique identifier for the agent. - - developer_id (UUID): The unique identifier for the developer creating the agent. - - data (CreateAgentRequest): The data for the new agent. + agent_id (UUID | None): The unique identifier for the agent. + developer_id (UUID): The unique identifier for the developer creating the agent. + data (CreateAgentRequest): The data for the new agent. Returns: - - Agent: The newly created agent record. + Agent: The newly created agent record. """ agent_id = agent_id or uuid4() diff --git a/agents-api/agents_api/models/agent/create_or_update_agent.py b/agents-api/agents_api/models/agent/create_or_update_agent.py index 156c8ae61..08adcfefd 100644 --- a/agents-api/agents_api/models/agent/create_or_update_agent.py +++ b/agents-api/agents_api/models/agent/create_or_update_agent.py @@ -27,9 +27,21 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class( @@ -47,18 +59,18 @@ def create_or_update_agent( Constructs and executes a datalog query to create a new agent in the database. Parameters: - - agent_id (UUID): The unique identifier for the agent. - - developer_id (UUID): The unique identifier for the developer creating the agent. - - name (str): The name of the agent. - - about (str): A description of the agent. - - instructions (list[str], optional): A list of instructions for using the agent. Defaults to an empty list. - - model (str, optional): The model identifier for the agent. Defaults to "gpt-4o". - - metadata (dict, optional): A dictionary of metadata for the agent. Defaults to an empty dict. - - default_settings (dict, optional): A dictionary of default settings for the agent. Defaults to an empty dict. - - client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. + agent_id (UUID): The unique identifier for the agent. + developer_id (UUID): The unique identifier for the developer creating the agent. + name (str): The name of the agent. + about (str): A description of the agent. + instructions (list[str], optional): A list of instructions for using the agent. Defaults to an empty list. + model (str, optional): The model identifier for the agent. Defaults to "gpt-4o". + metadata (dict, optional): A dictionary of metadata for the agent. Defaults to an empty dict. + default_settings (dict, optional): A dictionary of default settings for the agent. Defaults to an empty dict. + client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. Returns: - Agent: The newly created agent record. + Agent: The newly created agent record. """ # Extract the agent data from the payload @@ -71,7 +83,11 @@ def create_or_update_agent( data.default_settings = data.default_settings or {} agent_data = data.model_dump() - default_settings = agent_data.pop("default_settings") + default_settings = ( + data.default_settings.model_dump(exclude_none=True) + if data.default_settings + else {} + ) settings_cols, settings_vals = cozo_process_mutate_data( { @@ -124,6 +140,7 @@ def create_or_update_agent( input[_agent_id, developer_id, model, name, about, metadata, instructions, updated_at], *agents{ agent_id, + developer_id, created_at, }, agent_id = to_uuid(_agent_id), @@ -132,6 +149,7 @@ def create_or_update_agent( input[_agent_id, developer_id, model, name, about, metadata, instructions, updated_at], not *agents{ agent_id, + developer_id, }, created_at = now(), agent_id = to_uuid(_agent_id), diff --git a/agents-api/agents_api/models/agent/delete_agent.py b/agents-api/agents_api/models/agent/delete_agent.py index 926007bdf..60de66292 100644 --- a/agents-api/agents_api/models/agent/delete_agent.py +++ b/agents-api/agents_api/models/agent/delete_agent.py @@ -30,11 +30,24 @@ lambda e: isinstance(e, QueryException) and "Developer does not own resource" in e.resp["display"]: lambda *_: HTTPException( - detail="developer not found or doesnt own resource", status_code=404 + detail="The specified developer does not own the requested resource. Please verify the ownership or check if the developer ID is correct.", + status_code=404, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", ), - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), } ) @wrap_in_class( @@ -54,12 +67,12 @@ def delete_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict Constructs and returns a datalog query for deleting an agent and its default settings from the database. Parameters: - - developer_id (UUID): The UUID of the developer owning the agent. - - agent_id (UUID): The UUID of the agent to be deleted. - - client (CozoClient, optional): An instance of the CozoClient to execute the query. + developer_id (UUID): The UUID of the developer owning the agent. + agent_id (UUID): The UUID of the agent to be deleted. + client (CozoClient, optional): An instance of the CozoClient to execute the query. Returns: - - ResourceDeletedResponse: The response indicating the deletion of the agent. + ResourceDeletedResponse: The response indicating the deletion of the agent. """ queries = [ diff --git a/agents-api/agents_api/models/agent/get_agent.py b/agents-api/agents_api/models/agent/get_agent.py index 956fa46a5..008e39454 100644 --- a/agents-api/agents_api/models/agent/get_agent.py +++ b/agents-api/agents_api/models/agent/get_agent.py @@ -46,12 +46,12 @@ def get_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict]: This function constructs and executes a datalog query to retrieve information about a specific agent, including its default settings, based on the provided agent_id and developer_id. Parameters: - - developer_id (UUID): The unique identifier for the developer. - - agent_id (UUID): The unique identifier for the agent. - - client (CozoClient, optional): The database client used to execute the query. + developer_id (UUID): The unique identifier for the developer. + agent_id (UUID): The unique identifier for the agent. + client (CozoClient, optional): The database client used to execute the query. Returns: - - Agent + Agent """ # Constructing a datalog query to retrieve agent details and default settings. # The query uses input parameters for agent_id and developer_id to filter the results. @@ -71,6 +71,7 @@ def get_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict]: instructions, ] := input[id], *agents { + developer_id: to_uuid($developer_id), agent_id: id, model, name, @@ -101,6 +102,8 @@ def get_agent(*, developer_id: UUID, agent_id: UUID) -> tuple[list[str], dict]: "min_p": min_p, "preset": preset, } + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/agent/patch_agent.py b/agents-api/agents_api/models/agent/patch_agent.py index 72fdc7811..364d1a974 100644 --- a/agents-api/agents_api/models/agent/patch_agent.py +++ b/agents-api/agents_api/models/agent/patch_agent.py @@ -46,13 +46,13 @@ def patch_agent( """Patches agent data based on provided updates. Parameters: - agent_id (UUID): The unique identifier for the agent. - developer_id (UUID): The unique identifier for the developer. - default_settings (dict, optional): Default settings to apply to the agent. - **update_data: Arbitrary keyword arguments representing data to update. + agent_id (UUID): The unique identifier for the agent. + developer_id (UUID): The unique identifier for the developer. + default_settings (dict, optional): Default settings to apply to the agent. + **update_data: Arbitrary keyword arguments representing data to update. Returns: - ResourceUpdatedResponse: The updated agent data. + ResourceUpdatedResponse: The updated agent data. """ update_data = data.model_dump(exclude_unset=True) diff --git a/agents-api/agents_api/models/agent/update_agent.py b/agents-api/agents_api/models/agent/update_agent.py index be7e9ea21..992bb9796 100644 --- a/agents-api/agents_api/models/agent/update_agent.py +++ b/agents-api/agents_api/models/agent/update_agent.py @@ -46,13 +46,13 @@ def update_agent( Constructs and executes a datalog query to update an agent and its default settings in the 'cozodb' database. Parameters: - - agent_id (UUID): The unique identifier of the agent to be updated. - - developer_id (UUID): The unique identifier of the developer associated with the agent. - - data (UpdateAgentRequest): The request payload containing the updated agent data. - - client (CozoClient, optional): The database client used to execute the query. Defaults to a pre-configured client instance. + agent_id (UUID): The unique identifier of the agent to be updated. + developer_id (UUID): The unique identifier of the developer associated with the agent. + data (UpdateAgentRequest): The request payload containing the updated agent data. + client (CozoClient, optional): The database client used to execute the query. Defaults to a pre-configured client instance. Returns: - ResourceUpdatedResponse: The updated agent data. + ResourceUpdatedResponse: The updated agent data. """ default_settings = ( data.default_settings.model_dump(exclude_none=True) diff --git a/agents-api/agents_api/models/chat/gather_messages.py b/agents-api/agents_api/models/chat/gather_messages.py index c1683653f..b6bfdc217 100644 --- a/agents-api/agents_api/models/chat/gather_messages.py +++ b/agents-api/agents_api/models/chat/gather_messages.py @@ -6,8 +6,7 @@ from pycozo.client import QueryException from pydantic import ValidationError -from agents_api.autogen.Chat import ChatInput - +from ...autogen.Chat import ChatInput from ...autogen.openapi_model import DocReference, History from ...clients import litellm from ...common.protocol.developers import Developer diff --git a/agents-api/agents_api/models/chat/get_cached_response.py b/agents-api/agents_api/models/chat/get_cached_response.py index 5440a6703..368c88567 100644 --- a/agents-api/agents_api/models/chat/get_cached_response.py +++ b/agents-api/agents_api/models/chat/get_cached_response.py @@ -9,6 +9,7 @@ def get_cached_response(key: str) -> tuple[str, dict]: query = """ input[key] <- [[$key]] ?[key, value] := input[key], *session_cache{key, value} + :limit 1 """ return (query, {"key": key}) diff --git a/agents-api/agents_api/models/chat/prepare_chat_context.py b/agents-api/agents_api/models/chat/prepare_chat_context.py index 4d521acb0..f77686d7a 100644 --- a/agents-api/agents_api/models/chat/prepare_chat_context.py +++ b/agents-api/agents_api/models/chat/prepare_chat_context.py @@ -90,12 +90,13 @@ def prepare_chat_context( participant_type: "agent", }, - *tools { agent_id, tool_id, name, type, spec, updated_at, created_at }, + *tools { agent_id, tool_id, name, type, spec, description, updated_at, created_at }, tool = { "id": tool_id, "name": name, "type": type, "spec": spec, + "description": description, "updated_at": updated_at, "created_at": created_at, } @@ -119,6 +120,8 @@ def prepare_chat_context( ?[{', '.join(session_data_fields)}, toolsets] := *_session_data_json {{ {', '.join(session_data_fields)} }}, *_toolsets_json {{ toolsets }} + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/developer/get_developer.py b/agents-api/agents_api/models/developer/get_developer.py index 31ade5334..0ae5421aa 100644 --- a/agents-api/agents_api/models/developer/get_developer.py +++ b/agents-api/agents_api/models/developer/get_developer.py @@ -67,6 +67,8 @@ def get_developer( created_at, updated_at, } + + :limit 1 """ return (query, {"developer_id": developer_id}) diff --git a/agents-api/agents_api/models/docs/create_doc.py b/agents-api/agents_api/models/docs/create_doc.py index ee26df484..1c667bd51 100644 --- a/agents-api/agents_api/models/docs/create_doc.py +++ b/agents-api/agents_api/models/docs/create_doc.py @@ -50,10 +50,10 @@ def create_doc( Constructs and executes a datalog query to create a new document and its associated snippets in the 'cozodb' database. Parameters: - - owner_type (Literal["user", "agent"]): The type of the owner of the document. - - owner_id (UUID): The UUID of the document owner. - - id (UUID): The UUID of the document to be created. - - data (CreateDocRequest): The content of the document. + owner_type (Literal["user", "agent"]): The type of the owner of the document. + owner_id (UUID): The UUID of the document owner. + id (UUID): The UUID of the document to be created. + data (CreateDocRequest): The content of the document. """ doc_id = str(doc_id or uuid4()) diff --git a/agents-api/agents_api/models/docs/embed_snippets.py b/agents-api/agents_api/models/docs/embed_snippets.py index e810d0379..8d8ae1e62 100644 --- a/agents-api/agents_api/models/docs/embed_snippets.py +++ b/agents-api/agents_api/models/docs/embed_snippets.py @@ -49,9 +49,9 @@ def embed_snippets( """Embeds document snippets in the cozodb database. Parameters: - doc_id (UUID): The unique identifier for the document. - snippet_indices (list[int]): Indices of the snippets in the document. - embeddings (list[list[float]]): Embedding vectors for the snippets. + doc_id (UUID): The unique identifier for the document. + snippet_indices (list[int]): Indices of the snippets in the document. + embeddings (list[list[float]]): Embedding vectors for the snippets. """ doc_id = str(doc_id) @@ -81,6 +81,7 @@ def embed_snippets( }}, index > {max(snippet_indices)} + :limit 1 :assert none """ diff --git a/agents-api/agents_api/models/docs/get_doc.py b/agents-api/agents_api/models/docs/get_doc.py index 84cd181ec..e81084985 100644 --- a/agents-api/agents_api/models/docs/get_doc.py +++ b/agents-api/agents_api/models/docs/get_doc.py @@ -37,6 +37,7 @@ one=True, transform=lambda d: { "content": [s[1] for s in sorted(d["snippet_data"], key=lambda x: x[0])], + "embeddings": [s[2] for s in sorted(d["snippet_data"], key=lambda x: x[0])], **d, }, ) @@ -68,8 +69,9 @@ def get_doc( doc_id, index, content, + embedding, }, - snippet_data = [index, content] + snippet_data = [index, content, embedding] ?[ id, @@ -85,6 +87,8 @@ def get_doc( metadata, }, snippets[snippet_data] + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/docs/list_docs.py b/agents-api/agents_api/models/docs/list_docs.py index afdf06c2d..8f8d8c7a0 100644 --- a/agents-api/agents_api/models/docs/list_docs.py +++ b/agents-api/agents_api/models/docs/list_docs.py @@ -34,6 +34,7 @@ Doc, transform=lambda d: { "content": [s[1] for s in sorted(d["snippet_data"], key=lambda x: x[0])], + "embeddings": [s[2] for s in sorted(d["snippet_data"], key=lambda x: x[0])], **d, }, ) @@ -49,6 +50,7 @@ def list_docs( sort_by: Literal["created_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] = {}, + include_without_embeddings: bool = False, ) -> tuple[list[str], dict]: # Transforms the metadata_filter dictionary into a string representation for the datalog query. metadata_filter_str = ", ".join( @@ -67,8 +69,10 @@ def list_docs( doc_id: id, index, content, + embedding, }}, - snippet_data = [index, content] + {"" if include_without_embeddings else "not is_null(embedding),"} + snippet_data = [index, content, embedding] ?[ owner_type, @@ -88,7 +92,8 @@ def list_docs( created_at, metadata, }}, - snippets[id, snippet_data] + snippets[id, snippet_data], + {metadata_filter_str} :limit $limit :offset $offset @@ -110,6 +115,5 @@ def list_docs( "owner_type": owner_type, "limit": limit, "offset": offset, - "metadata_filter": metadata_filter_str, }, ) diff --git a/agents-api/agents_api/models/docs/search_docs_by_embedding.py b/agents-api/agents_api/models/docs/search_docs_by_embedding.py index d6bed97fc..83418aa21 100644 --- a/agents-api/agents_api/models/docs/search_docs_by_embedding.py +++ b/agents-api/agents_api/models/docs/search_docs_by_embedding.py @@ -56,12 +56,12 @@ def search_docs_by_embedding( Searches for document snippets in CozoDB by embedding query. Parameters: - - owner_type (Literal["user", "agent"]): The type of the owner of the documents. - - owner_id (UUID): The unique identifier of the owner. - - query_embedding (list[float]): The embedding vector of the query. - - k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. - - confidence (float, optional): The confidence threshold for filtering results. Defaults to 0.8. - - mmr_lambda (float, optional): The lambda parameter for MMR. Defaults to 0.25. + owner_type (Literal["user", "agent"]): The type of the owner of the documents. + owner_id (UUID): The unique identifier of the owner. + query_embedding (list[float]): The embedding vector of the query. + k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. + confidence (float, optional): The confidence threshold for filtering results. Defaults to 0.8. + mmr_lambda (float, optional): The lambda parameter for MMR. Defaults to 0.25. """ assert len(query_embedding) == embedding_size diff --git a/agents-api/agents_api/models/docs/search_docs_by_text.py b/agents-api/agents_api/models/docs/search_docs_by_text.py index eeae8362c..bb700a494 100644 --- a/agents-api/agents_api/models/docs/search_docs_by_text.py +++ b/agents-api/agents_api/models/docs/search_docs_by_text.py @@ -53,9 +53,9 @@ def search_docs_by_text( Searches for document snippets in CozoDB by embedding query. Parameters: - - owners (list[tuple[Literal["user", "agent"], UUID]]): The type of the owner of the documents. - - query (str): The query string. - - k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. + owners (list[tuple[Literal["user", "agent"], UUID]]): The type of the owner of the documents. + query (str): The query string. + k (int, optional): The number of nearest neighbors to retrieve. Defaults to 3. """ owners: list[list[str]] = [ diff --git a/agents-api/agents_api/models/entry/delete_entries.py b/agents-api/agents_api/models/entry/delete_entries.py index 48c37cd25..c98b6c7d2 100644 --- a/agents-api/agents_api/models/entry/delete_entries.py +++ b/agents-api/agents_api/models/entry/delete_entries.py @@ -49,7 +49,7 @@ def delete_entries_for_session( Constructs and returns a datalog query for deleting entries associated with a given session ID from the 'cozodb' database. Parameters: - - session_id (UUID): The unique identifier of the session whose entries are to be deleted. + session_id (UUID): The unique identifier of the session whose entries are to be deleted. """ delete_query = """ diff --git a/agents-api/agents_api/models/entry/get_history.py b/agents-api/agents_api/models/entry/get_history.py index 8918d357f..bd3c0397a 100644 --- a/agents-api/agents_api/models/entry/get_history.py +++ b/agents-api/agents_api/models/entry/get_history.py @@ -131,7 +131,9 @@ def get_history( session_relations[relations], session_id = to_uuid($session_id), created_at = now() - """ + + :limit 1 + """ queries = [ verify_developer_id_query(developer_id), diff --git a/agents-api/agents_api/models/execution/create_execution_transition.py b/agents-api/agents_api/models/execution/create_execution_transition.py index 42c6f1c22..2b1c09ae8 100644 --- a/agents-api/agents_api/models/execution/create_execution_transition.py +++ b/agents-api/agents_api/models/execution/create_execution_transition.py @@ -141,6 +141,8 @@ def create_execution_transition( found = length(prev_transitions), valid = if($next_type == "init", found == 0, found > 0), assert(valid, "Invalid transition"), + + :limit 1 """ # Prepare the insert query @@ -174,7 +176,7 @@ def create_execution_transition( data=UpdateExecutionRequest( status=transition_to_execution_status[data.type] ), - output=data.output if data.type == "finish" else None, + output=data.output if data.type != "error" else None, error=str(data.output) if data.type == "error" and data.output else None, diff --git a/agents-api/agents_api/models/execution/get_execution_transition.py b/agents-api/agents_api/models/execution/get_execution_transition.py index d3ebf3783..e2b38789a 100644 --- a/agents-api/agents_api/models/execution/get_execution_transition.py +++ b/agents-api/agents_api/models/execution/get_execution_transition.py @@ -65,7 +65,9 @@ def get_execution_transition( is_null(next_tuple), null, {"workflow": next_tuple->0, "step": next_tuple->1}, - ), + ) + + :limit 1 """ get_query += filter diff --git a/agents-api/agents_api/models/execution/get_paused_execution_token.py b/agents-api/agents_api/models/execution/get_paused_execution_token.py index d8b0945c1..44eb8a4da 100644 --- a/agents-api/agents_api/models/execution/get_paused_execution_token.py +++ b/agents-api/agents_api/models/execution/get_paused_execution_token.py @@ -45,11 +45,12 @@ def get_paused_execution_token( execution_id = to_uuid($execution_id), status = "awaiting_input" + :limit 1 :assert some """ get_query = """ - ?[task_token, max(created_at)] := + ?[task_token, created_at, metadata] := execution_id = to_uuid($execution_id), *executions { execution_id, @@ -59,9 +60,12 @@ def get_paused_execution_token( created_at, task_token, type, + metadata, }, type = "wait" + :sort -created_at + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/execution/get_temporal_workflow_data.py b/agents-api/agents_api/models/execution/get_temporal_workflow_data.py index bb0a462ef..8b1bf4604 100644 --- a/agents-api/agents_api/models/execution/get_temporal_workflow_data.py +++ b/agents-api/agents_api/models/execution/get_temporal_workflow_data.py @@ -45,6 +45,8 @@ def get_temporal_workflow_data( result_run_id, first_execution_run_id, } + + :limit 1 """ return ( diff --git a/agents-api/agents_api/models/execution/lookup_temporal_data.py b/agents-api/agents_api/models/execution/lookup_temporal_data.py index e3c369b94..35f09129b 100644 --- a/agents-api/agents_api/models/execution/lookup_temporal_data.py +++ b/agents-api/agents_api/models/execution/lookup_temporal_data.py @@ -43,6 +43,8 @@ def lookup_temporal_data( *temporal_executions_lookup { id, execution_id, run_id, first_execution_run_id, result_run_id } + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/execution/prepare_execution_input.py b/agents-api/agents_api/models/execution/prepare_execution_input.py index 5bc14939a..513c44a16 100644 --- a/agents-api/agents_api/models/execution/prepare_execution_input.py +++ b/agents-api/agents_api/models/execution/prepare_execution_input.py @@ -39,13 +39,10 @@ transform=lambda d: { **d, "task": { - "tools": [ - {tool["type"]: tool.pop("spec"), **tool} - for tool in map(fix_uuid_if_present, d["task"].pop("tools")) - ], + "tools": [*map(fix_uuid_if_present, d["task"].pop("tools"))], **d["task"], }, - "tools": [ + "agent_tools": [ {tool["type"]: tool.pop("spec"), **tool} for tool in map(fix_uuid_if_present, d["tools"]) ], @@ -152,6 +149,7 @@ def prepare_execution_input( "name", "type", "spec", + "description", "created_at", "updated_at", ) @@ -190,6 +188,8 @@ def prepare_execution_input( user = null, session = null, arguments = execution->"input" + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/execution/update_execution.py b/agents-api/agents_api/models/execution/update_execution.py index c2f40c7ff..4d0367ae4 100644 --- a/agents-api/agents_api/models/execution/update_execution.py +++ b/agents-api/agents_api/models/execution/update_execution.py @@ -82,6 +82,8 @@ def update_execution( ?[num] := valid_status[num], assert(num > 0, 'Invalid status') + + :limit 1 """ update_query = f""" diff --git a/agents-api/agents_api/models/session/delete_session.py b/agents-api/agents_api/models/session/delete_session.py index af9e331c7..81f8e1f7c 100644 --- a/agents-api/agents_api/models/session/delete_session.py +++ b/agents-api/agents_api/models/session/delete_session.py @@ -51,11 +51,11 @@ def delete_session( Deletes a session and its related data from the 'cozodb' database. Parameters: - - developer_id (UUID): The unique identifier for the developer. - - session_id (UUID): The unique identifier for the session to be deleted. + developer_id (UUID): The unique identifier for the developer. + session_id (UUID): The unique identifier for the session to be deleted. Returns: - - ResourceDeletedResponse: The response indicating the deletion of the session. + ResourceDeletedResponse: The response indicating the deletion of the session. """ session_id = str(session_id) developer_id = str(developer_id) diff --git a/agents-api/agents_api/models/session/get_session.py b/agents-api/agents_api/models/session/get_session.py index 2d8956eb7..45d971c3f 100644 --- a/agents-api/agents_api/models/session/get_session.py +++ b/agents-api/agents_api/models/session/get_session.py @@ -95,7 +95,10 @@ def get_session( token_budget, context_overflow, @ "END" - }, updated_at = to_int(validity) + }, + updated_at = to_int(validity) + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/session/list_sessions.py b/agents-api/agents_api/models/session/list_sessions.py index 14f4cad0d..b7d5c0049 100644 --- a/agents-api/agents_api/models/session/list_sessions.py +++ b/agents-api/agents_api/models/session/list_sessions.py @@ -41,7 +41,8 @@ def list_sessions( direction: Literal["asc", "desc"] = "desc", metadata_filter: dict[str, Any] = {}, ) -> tuple[list[str], dict]: - """Lists sessions from the 'cozodb' database based on the provided filters. + """ + Lists sessions from the 'cozodb' database based on the provided filters. Parameters: developer_id (UUID): The developer's ID to filter sessions by. diff --git a/agents-api/agents_api/models/session/patch_session.py b/agents-api/agents_api/models/session/patch_session.py index a9f3121b9..4a119a684 100644 --- a/agents-api/agents_api/models/session/patch_session.py +++ b/agents-api/agents_api/models/session/patch_session.py @@ -60,12 +60,13 @@ def patch_session( developer_id: UUID, data: PatchSessionRequest, ) -> tuple[list[str], dict]: - """Patch session data in the 'cozodb' database. + """ + Patch session data in the 'cozodb' database. Parameters: - - session_id (UUID): The unique identifier for the session to be updated. - - developer_id (UUID): The unique identifier for the developer making the update. - - data (PatchSessionRequest): The request payload containing the updates to apply. + session_id (UUID): The unique identifier for the session to be updated. + developer_id (UUID): The unique identifier for the developer making the update. + data (PatchSessionRequest): The request payload containing the updates to apply. """ update_data = data.model_dump(exclude_unset=True) diff --git a/agents-api/agents_api/models/session/prepare_session_data.py b/agents-api/agents_api/models/session/prepare_session_data.py index e8cfb7fc7..83ee0c219 100644 --- a/agents-api/agents_api/models/session/prepare_session_data.py +++ b/agents-api/agents_api/models/session/prepare_session_data.py @@ -56,12 +56,13 @@ def prepare_session_data( # This query retrieves session information by using `input` to pass parameters, get_query = """ - input[session_id] <- [[ + input[session_id, developer_id] <- [[ to_uuid($session_id), + to_uuid($developer_id), ]] participants[collect(participant_id), participant_type] := - input[session_id], + input[session_id, developer_id], *session_lookup{ session_id, participant_id, @@ -102,9 +103,11 @@ def prepare_session_data( } agent_data[collect(record)] := + input[session_id, developer_id], agents[agent_ids], agent_id in agent_ids, *agents{ + developer_id, agent_id, model, name, @@ -129,9 +132,11 @@ def prepare_session_data( # Version where we don't have default settings agent_data[collect(record)] := + input[session_id, developer_id], agents[agent_ids], agent_id in agent_ids, *agents{ + developer_id, agent_id, model, name, @@ -155,9 +160,11 @@ def prepare_session_data( } user_data[collect(record)] := + input[session_id, developer_id], users[user_ids], user_id in user_ids, *users{ + developer_id, user_id, name, about, @@ -175,8 +182,9 @@ def prepare_session_data( } session_data[record] := - input[session_id], + input[session_id, developer_id], *sessions{ + developer_id, session_id, situation, summary, @@ -209,6 +217,8 @@ def prepare_session_data( session_data[session], user_data[users], agent_data[agents] + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/task/create_or_update_task.py b/agents-api/agents_api/models/task/create_or_update_task.py index af7e258d9..d787d78b5 100644 --- a/agents-api/agents_api/models/task/create_or_update_task.py +++ b/agents-api/agents_api/models/task/create_or_update_task.py @@ -64,7 +64,9 @@ def create_or_update_task( data.metadata = data.metadata or {} data.input_schema = data.input_schema or {} - task_data = task_to_spec(data).model_dump(exclude_none=True, exclude_unset=True) + task_data = task_to_spec(data).model_dump( + exclude_none=True, exclude_unset=True, mode="json" + ) task_data.pop("task_id", None) task_data["created_at"] = utcnow().timestamp() diff --git a/agents-api/agents_api/models/task/create_task.py b/agents-api/agents_api/models/task/create_task.py index a44146c34..9affe0ead 100644 --- a/agents-api/agents_api/models/task/create_task.py +++ b/agents-api/agents_api/models/task/create_task.py @@ -55,7 +55,7 @@ def create_task( # Prepares the update data by filtering out None values and adding user_id and developer_id. columns, values = cozo_process_mutate_data( { - **task_spec.model_dump(exclude_none=True, exclude_unset=True), + **task_spec.model_dump(exclude_none=True, exclude_unset=True, mode="json"), "task_id": str(task_id), "agent_id": str(agent_id), } diff --git a/agents-api/agents_api/models/task/get_task.py b/agents-api/agents_api/models/task/get_task.py index 4bb3d06b6..4e5b2fb97 100644 --- a/agents-api/agents_api/models/task/get_task.py +++ b/agents-api/agents_api/models/task/get_task.py @@ -68,20 +68,6 @@ def get_task( }, updated_at = to_int(updated_at_ms) / 1000 - tool_data[collect(tool_def)] := - task_data[_, agent_id, _, _, _, _, _, _, _, _, _], - *tools { - agent_id, - type, - name, - spec, - }, tool_def = { - "type": type, - "name": name, - "spec": spec, - "inherited": true, - } - ?[ id, agent_id, @@ -95,20 +81,19 @@ def get_task( updated_at, metadata, ] := - tool_data[inherited_tools], task_data[ id, agent_id, name, description, input_schema, - task_tools, + tools, inherit_tools, workflows, created_at, updated_at, metadata, - ], tools = task_tools ++ if(inherit_tools, inherited_tools, []) + ] :limit 1 """ diff --git a/agents-api/agents_api/models/task/list_tasks.py b/agents-api/agents_api/models/task/list_tasks.py index 35c52d184..a443ce9e2 100644 --- a/agents-api/agents_api/models/task/list_tasks.py +++ b/agents-api/agents_api/models/task/list_tasks.py @@ -74,20 +74,6 @@ def list_tasks( }}, updated_at = to_int(updated_at_ms) / 1000 - tool_data[collect(tool_def)] := - input[agent_id], - *tools {{ - agent_id, - type, - name, - spec, - }}, tool_def = {{ - "type": type, - "name": name, - "spec": spec, - "inherited": true, - }} - ?[ task_id, agent_id, @@ -101,20 +87,19 @@ def list_tasks( updated_at, metadata, ] := - tool_data[inherited_tools], task_data[ task_id, agent_id, name, description, input_schema, - task_tools, + tools, inherit_tools, workflows, created_at, updated_at, metadata, - ], tools = task_tools ++ if(inherit_tools, inherited_tools, []) + ] :limit $limit :offset $offset diff --git a/agents-api/agents_api/models/tools/__init__.py b/agents-api/agents_api/models/tools/__init__.py index 98f3a5e3a..b1775f1a9 100644 --- a/agents-api/agents_api/models/tools/__init__.py +++ b/agents-api/agents_api/models/tools/__init__.py @@ -14,6 +14,7 @@ from .create_tools import create_tools from .delete_tool import delete_tool from .get_tool import get_tool +from .get_tool_args_from_metadata import get_tool_args_from_metadata from .list_tools import list_tools from .patch_tool import patch_tool from .update_tool import update_tool diff --git a/agents-api/agents_api/models/tools/create_tools.py b/agents-api/agents_api/models/tools/create_tools.py index dd8397797..b98a751d0 100644 --- a/agents-api/agents_api/models/tools/create_tools.py +++ b/agents-api/agents_api/models/tools/create_tools.py @@ -51,11 +51,11 @@ def create_tools( Constructs a datalog query for inserting tool records into the 'agent_functions' relation in the CozoDB. Parameters: - - agent_id (UUID): The unique identifier for the agent. - - data (list[CreateToolRequest]): A list of function definitions to be inserted. + agent_id (UUID): The unique identifier for the agent. + data (list[CreateToolRequest]): A list of function definitions to be inserted. Returns: - list[Tool] + list[Tool] """ tools_data = [ @@ -65,31 +65,35 @@ def create_tools( tool.type, tool.name, getattr(tool, tool.type).dict(), + tool.description if hasattr(tool, "description") else None, ] for tool in data ] ensure_tool_name_unique_query = """ - input[agent_id, tool_id, type, name, spec] <- $records + input[agent_id, tool_id, type, name, spec, description] <- $records ?[tool_id] := - input[agent_id, _, type, name, _], + input[agent_id, _, type, name, _, _], *tools{ agent_id: to_uuid(agent_id), tool_id, type, name, + spec, + description, } + :limit 1 :assert none """ - # Datalog query for inserting new tool records into the 'agent_functions' relation + # Datalog query for inserting new tool records into the 'tools' relation create_query = """ - input[agent_id, tool_id, type, name, spec] <- $records + input[agent_id, tool_id, type, name, spec, description] <- $records # Do not add duplicate - ?[agent_id, tool_id, type, name, spec] := - input[agent_id, tool_id, type, name, spec], + ?[agent_id, tool_id, type, name, spec, description] := + input[agent_id, tool_id, type, name, spec, description], not *tools{ agent_id: to_uuid(agent_id), type, @@ -102,6 +106,7 @@ def create_tools( type, name, spec, + description, } :returning """ diff --git a/agents-api/agents_api/models/tools/get_tool.py b/agents-api/agents_api/models/tools/get_tool.py index 5ea009064..465fd2efe 100644 --- a/agents-api/agents_api/models/tools/get_tool.py +++ b/agents-api/agents_api/models/tools/get_tool.py @@ -68,6 +68,8 @@ def get_tool( updated_at, created_at, } + + :limit 1 """ queries = [ diff --git a/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py b/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py new file mode 100644 index 000000000..2cdb92cb9 --- /dev/null +++ b/agents-api/agents_api/models/tools/get_tool_args_from_metadata.py @@ -0,0 +1,148 @@ +from typing import Literal +from uuid import UUID + +from beartype import beartype +from fastapi import HTTPException +from pycozo.client import QueryException +from pydantic import ValidationError + +from ..utils import ( + cozo_query, + partialclass, + rewrap_exceptions, + verify_developer_id_query, + verify_developer_owns_resource_query, + wrap_in_class, +) + + +def tool_args_for_task( + *, + developer_id: UUID, + agent_id: UUID, + task_id: UUID, + tool_type: Literal["integration", "api_call"] = "integration", + arg_type: Literal["args", "setup"] = "args", +) -> tuple[list[str], dict]: + agent_id = str(agent_id) + task_id = str(task_id) + + get_query = f""" + input[agent_id, task_id] <- [[to_uuid($agent_id), to_uuid($task_id)]] + + ?[values] := + input[agent_id, task_id], + *tasks {{ + task_id, + metadata: task_metadata, + }}, + *agents {{ + agent_id, + metadata: agent_metadata, + }}, + task_{arg_type} = get(task_metadata, "x-{tool_type}-{arg_type}", {{}}), + agent_{arg_type} = get(agent_metadata, "x-{tool_type}-{arg_type}", {{}}), + + # Right values overwrite left values + # See: https://docs.cozodb.org/en/latest/functions.html#Func.Vector.concat + values = concat(agent_{arg_type}, task_{arg_type}), + + :limit 1 + """ + + queries = [ + verify_developer_id_query(developer_id), + verify_developer_owns_resource_query( + developer_id, "tasks", task_id=task_id, parents=[("agents", "agent_id")] + ), + get_query, + ] + + return (queries, {"agent_id": agent_id, "task_id": task_id}) + + +def tool_args_for_session( + *, + developer_id: UUID, + session_id: UUID, + agent_id: UUID, + arg_type: Literal["args", "setup"] = "args", + tool_type: Literal["integration", "api_call"] = "integration", +) -> tuple[list[str], dict]: + session_id = str(session_id) + + get_query = f""" + input[session_id, agent_id] <- [[to_uuid($session_id), to_uuid($agent_id)]] + + ?[values] := + input[session_id, agent_id], + *sessions {{ + session_id, + metadata: session_metadata, + }}, + *agents {{ + agent_id, + metadata: agent_metadata, + }}, + session_{arg_type} = get(session_metadata, "x-{tool_type}-{arg_type}", {{}}), + agent_{arg_type} = get(agent_metadata, "x-{tool_type}-{arg_type}", {{}}), + + # Right values overwrite left values + # See: https://docs.cozodb.org/en/latest/functions.html#Func.Vector.concat + values = concat(agent_{arg_type}, session_{arg_type}), + + :limit 1 + """ + + queries = [ + verify_developer_id_query(developer_id), + verify_developer_owns_resource_query( + developer_id, "sessions", session_id=session_id + ), + get_query, + ] + + return (queries, {"agent_id": agent_id, "session_id": session_id}) + + +@rewrap_exceptions( + { + QueryException: partialclass(HTTPException, status_code=400), + ValidationError: partialclass(HTTPException, status_code=400), + TypeError: partialclass(HTTPException, status_code=400), + } +) +@wrap_in_class(dict, transform=lambda x: x["values"], one=True) +@cozo_query +@beartype +def get_tool_args_from_metadata( + *, + developer_id: UUID, + agent_id: UUID, + session_id: UUID | None = None, + task_id: UUID | None = None, + tool_type: Literal["integration", "api_call"] = "integration", + arg_type: Literal["args", "setup", "headers"] = "args", +) -> tuple[list[str], dict]: + common: dict = dict( + developer_id=developer_id, + agent_id=agent_id, + tool_type=tool_type, + arg_type=arg_type, + ) + + match session_id, task_id: + case (None, task_id) if task_id is not None: + return tool_args_for_task( + **common, + task_id=task_id, + ) + + case (session_id, None) if session_id is not None: + return tool_args_for_session( + **common, + session_id=session_id, + ) + + case (_, _): + raise ValueError("Either session_id or task_id must be provided") diff --git a/agents-api/agents_api/models/tools/list_tools.py b/agents-api/agents_api/models/tools/list_tools.py index 931ca3ca9..727bf8028 100644 --- a/agents-api/agents_api/models/tools/list_tools.py +++ b/agents-api/agents_api/models/tools/list_tools.py @@ -30,7 +30,11 @@ @wrap_in_class( Tool, transform=lambda d: { - d["type"]: {**d.pop("spec"), "name": d["name"]}, + d["type"]: { + **d.pop("spec"), + "name": d["name"], + "description": d["description"], + }, **d, }, ) @@ -58,6 +62,7 @@ def list_tools( name, type, spec, + description, updated_at, created_at, ] := input[agent_id], @@ -67,6 +72,7 @@ def list_tools( name, type, spec, + description, updated_at, created_at, }} diff --git a/agents-api/agents_api/models/tools/patch_tool.py b/agents-api/agents_api/models/tools/patch_tool.py index 5bbfe1c91..0d8304d7d 100644 --- a/agents-api/agents_api/models/tools/patch_tool.py +++ b/agents-api/agents_api/models/tools/patch_tool.py @@ -40,16 +40,16 @@ def patch_tool( *, developer_id: UUID, agent_id: UUID, tool_id: UUID, data: PatchToolRequest ) -> tuple[list[str], dict]: """ - # Execute the datalog query and return the results as a DataFrame + Execute the datalog query and return the results as a DataFrame Updates the tool information for a given agent and tool ID in the 'cozodb' database. Parameters: - - agent_id (UUID): The unique identifier of the agent. - - tool_id (UUID): The unique identifier of the tool to be updated. - - data (PatchToolRequest): The request payload containing the updated tool information. + agent_id (UUID): The unique identifier of the agent. + tool_id (UUID): The unique identifier of the tool to be updated. + data (PatchToolRequest): The request payload containing the updated tool information. Returns: - - ResourceUpdatedResponse: The updated tool data. + ResourceUpdatedResponse: The updated tool data. """ agent_id = str(agent_id) diff --git a/agents-api/agents_api/models/user/create_or_update_user.py b/agents-api/agents_api/models/user/create_or_update_user.py index 9e9045e74..13260a038 100644 --- a/agents-api/agents_api/models/user/create_or_update_user.py +++ b/agents-api/agents_api/models/user/create_or_update_user.py @@ -26,9 +26,21 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class(User, one=True, transform=lambda d: {"id": UUID(d.pop("user_id")), **d}) @@ -44,15 +56,15 @@ def create_or_update_user( Constructs and executes a datalog query to create a new user in the database. Parameters: - - user_id (UUID): The unique identifier for the user. - - developer_id (UUID): The unique identifier for the developer creating the user. - - name (str): The name of the user. - - about (str): A description of the user. - - metadata (dict, optional): A dictionary of metadata for the user. Defaults to an empty dict. - - client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. + user_id (UUID): The unique identifier for the user. + developer_id (UUID): The unique identifier for the developer creating the user. + name (str): The name of the user. + about (str): A description of the user. + metadata (dict, optional): A dictionary of metadata for the user. Defaults to an empty dict. + client (CozoClient, optional): The CozoDB client instance to use for the query. Defaults to a preconfigured client instance. Returns: - User: The newly created user record. + User: The newly created user record. """ # Extract the user data from the payload @@ -70,6 +82,7 @@ def create_or_update_user( ?[user_id, developer_id, name, about, metadata, created_at, updated_at] := input[_user_id, developer_id, name, about, metadata, updated_at], *users{ + developer_id, user_id, created_at, }, @@ -78,6 +91,7 @@ def create_or_update_user( ?[user_id, developer_id, name, about, metadata, created_at, updated_at] := input[_user_id, developer_id, name, about, metadata, updated_at], not *users{ + developer_id, user_id, }, created_at = now(), user_id = to_uuid(_user_id), diff --git a/agents-api/agents_api/models/user/create_user.py b/agents-api/agents_api/models/user/create_user.py index 9dd036c57..270c0d44c 100644 --- a/agents-api/agents_api/models/user/create_user.py +++ b/agents-api/agents_api/models/user/create_user.py @@ -29,11 +29,24 @@ lambda e: isinstance(e, QueryException) and "asserted to return some results, but returned none" in str(e): lambda *_: HTTPException( - detail="developer not found", status_code=403 + detail="Developer not found. Please ensure the provided auth token (which refers to your developer_id) is valid and the developer has the necessary permissions to create an agent.", + status_code=403, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", ), - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), } ) @wrap_in_class( diff --git a/agents-api/agents_api/models/user/delete_user.py b/agents-api/agents_api/models/user/delete_user.py index b5fcb8424..7f08316be 100644 --- a/agents-api/agents_api/models/user/delete_user.py +++ b/agents-api/agents_api/models/user/delete_user.py @@ -27,9 +27,32 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), + lambda e: isinstance(e, QueryException) + and "Developer does not exist" in str(e): lambda *_: HTTPException( + detail="The specified developer does not exist.", + status_code=403, + ), + lambda e: isinstance(e, QueryException) + and "Developer does not own resource" + in e.resp["display"]: lambda *_: HTTPException( + detail="The specified developer does not own the requested resource. Please verify the ownership or check if the developer ID is correct.", + status_code=404, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class( @@ -49,12 +72,12 @@ def delete_user(*, developer_id: UUID, user_id: UUID) -> tuple[list[str], dict]: Constructs and returns a datalog query for deleting an user and its default settings from the database. Parameters: - - developer_id (UUID): The UUID of the developer owning the user. - - user_id (UUID): The UUID of the user to be deleted. - - client (CozoClient, optional): An instance of the CozoClient to execute the query. + developer_id (UUID): The UUID of the developer owning the user. + user_id (UUID): The UUID of the user to be deleted. + client (CozoClient, optional): An instance of the CozoClient to execute the query. Returns: - - ResourceDeletedResponse: The response indicating the deletion of the user. + ResourceDeletedResponse: The response indicating the deletion of the user. """ queries = [ diff --git a/agents-api/agents_api/models/user/get_user.py b/agents-api/agents_api/models/user/get_user.py index cc7c6f970..34ff2c6f4 100644 --- a/agents-api/agents_api/models/user/get_user.py +++ b/agents-api/agents_api/models/user/get_user.py @@ -23,17 +23,31 @@ @rewrap_exceptions( { lambda e: isinstance(e, QueryException) - and "Developer not found" in str(e): lambda *_: HTTPException( - detail="developer does not exist", status_code=403 + and "Developer does not exist" in str(e): lambda *_: HTTPException( + detail="The specified developer does not exist.", + status_code=403, ), lambda e: isinstance(e, QueryException) and "Developer does not own resource" in e.resp["display"]: lambda *_: HTTPException( - detail="developer doesnt own resource", status_code=404 + detail="The specified developer does not own the requested resource. Please verify the ownership or check if the developer ID is correct.", + status_code=404, + ), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", ), - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), } ) @wrap_in_class(User, one=True) @@ -67,7 +81,10 @@ def get_user( created_at, updated_at, metadata, - }""" + } + + :limit 1 + """ queries = [ verify_developer_id_query(developer_id), diff --git a/agents-api/agents_api/models/user/list_users.py b/agents-api/agents_api/models/user/list_users.py index 57dc9b8c8..7f59cbf57 100644 --- a/agents-api/agents_api/models/user/list_users.py +++ b/agents-api/agents_api/models/user/list_users.py @@ -22,9 +22,21 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class(User) @@ -43,13 +55,13 @@ def list_users( Queries the 'cozodb' database to list users associated with a specific developer. Parameters: - - developer_id (UUID): The unique identifier of the developer. - - limit (int): The maximum number of users to return. Defaults to 100. - - offset (int): The number of users to skip before starting to collect the result set. Defaults to 0. - - metadata_filter (dict[str, Any]): A dictionary representing filters to apply on user metadata. + developer_id (UUID): The unique identifier of the developer. + limit (int): The maximum number of users to return. Defaults to 100. + offset (int): The number of users to skip before starting to collect the result set. Defaults to 0. + metadata_filter (dict[str, Any]): A dictionary representing filters to apply on user metadata. Returns: - - pd.DataFrame: A DataFrame containing the queried user data. + pd.DataFrame: A DataFrame containing the queried user data. """ # Construct a filter string for the metadata based on the provided dictionary. metadata_filter_str = ", ".join( diff --git a/agents-api/agents_api/models/user/patch_user.py b/agents-api/agents_api/models/user/patch_user.py index faf38298c..152f66de7 100644 --- a/agents-api/agents_api/models/user/patch_user.py +++ b/agents-api/agents_api/models/user/patch_user.py @@ -26,9 +26,21 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class( @@ -49,12 +61,12 @@ def patch_user( Generates a datalog query for updating a user's information. Parameters: - - developer_id (UUID): The UUID of the developer. - - user_id (UUID): The UUID of the user to be updated. - - **update_data: Arbitrary keyword arguments representing the data to be updated. + developer_id (UUID): The UUID of the developer. + user_id (UUID): The UUID of the user to be updated. + **update_data: Arbitrary keyword arguments representing the data to be updated. Returns: - - tuple[str, dict]: A pandas DataFrame containing the results of the query execution. + tuple[str, dict]: A pandas DataFrame containing the results of the query execution. """ update_data = data.model_dump(exclude_unset=True) @@ -78,6 +90,7 @@ def patch_user( ?[{user_update_cols}, metadata] := input[{user_update_cols}], *users {{ + developer_id: to_uuid($developer_id), user_id: to_uuid($user_id), metadata: md, }}, @@ -101,5 +114,6 @@ def patch_user( "user_update_vals": user_update_vals, "metadata": metadata, "user_id": str(user_id), + "developer_id": str(developer_id), }, ) diff --git a/agents-api/agents_api/models/user/update_user.py b/agents-api/agents_api/models/user/update_user.py index 9a13d9369..964e550b4 100644 --- a/agents-api/agents_api/models/user/update_user.py +++ b/agents-api/agents_api/models/user/update_user.py @@ -23,9 +23,21 @@ @rewrap_exceptions( { - QueryException: partialclass(HTTPException, status_code=400), - ValidationError: partialclass(HTTPException, status_code=400), - TypeError: partialclass(HTTPException, status_code=400), + QueryException: partialclass( + HTTPException, + status_code=400, + detail="A database query failed to return the expected results. This might occur if the requested resource doesn't exist or your query parameters are incorrect.", + ), + ValidationError: partialclass( + HTTPException, + status_code=400, + detail="Input validation failed. Please check the provided data for missing or incorrect fields, and ensure it matches the required format.", + ), + TypeError: partialclass( + HTTPException, + status_code=400, + detail="A type mismatch occurred. This likely means the data provided is of an incorrect type (e.g., string instead of integer). Please review the input and try again.", + ), } ) @wrap_in_class( @@ -39,7 +51,8 @@ def update_user( *, developer_id: UUID, user_id: UUID, data: UpdateUserRequest ) -> tuple[list[str], dict]: - """Updates user information in the 'cozodb' database. + """ + Updates user information in the 'cozodb' database. Parameters: developer_id (UUID): The developer's unique identifier. diff --git a/agents-api/agents_api/models/utils.py b/agents-api/agents_api/models/utils.py index c97d92451..f63646e1c 100644 --- a/agents-api/agents_api/models/utils.py +++ b/agents-api/agents_api/models/utils.py @@ -8,6 +8,7 @@ from pydantic import BaseModel from ..common.utils.cozo import uuid_int_list_to_uuid4 +from ..env import do_verify_developer, do_verify_developer_owns_resource P = ParamSpec("P") T = TypeVar("T") @@ -117,6 +118,9 @@ def mark_session_updated_query(developer_id: UUID | str, session_id: UUID | str) def verify_developer_id_query(developer_id: UUID | str) -> str: + if not do_verify_developer: + return "?[exists] := exists = true" + return f""" matched[count(developer_id)] := *developers{{ @@ -127,6 +131,8 @@ def verify_developer_id_query(developer_id: UUID | str) -> str: matched[num], exists = num > 0, assert(exists, "Developer does not exist") + + :limit 1 """ @@ -136,6 +142,9 @@ def verify_developer_owns_resource_query( parents: list[tuple[str, str]] | None = None, **resource_id, ) -> str: + if not do_verify_developer_owns_resource: + return "?[exists] := exists = true" + parents = parents or [] resource_id_key, resource_id_value = next(iter(resource_id.items())) @@ -162,6 +171,8 @@ def verify_developer_owns_resource_query( found[num], exists = num > 0, assert(exists, "Developer does not own resource {resource} with {resource_id_key} {resource_id_value}") + + :limit 1 """ rule = rule_head + rule_body + assertion diff --git a/agents-api/agents_api/routers/agents/create_agent.py b/agents-api/agents_api/routers/agents/create_agent.py index a662bef15..2e1c4df0a 100644 --- a/agents-api/agents_api/routers/agents/create_agent.py +++ b/agents-api/agents_api/routers/agents/create_agent.py @@ -4,13 +4,12 @@ from fastapi import Depends from starlette.status import HTTP_201_CREATED -import agents_api.models as models - from ...autogen.openapi_model import ( CreateAgentRequest, ResourceCreatedResponse, ) from ...dependencies.developer_id import get_developer_id +from ...models.agent.create_agent import create_agent as create_agent_query from .router import router @@ -20,7 +19,7 @@ async def create_agent( data: CreateAgentRequest, ) -> ResourceCreatedResponse: # TODO: Validate model name - agent = models.agent.create_agent( + agent = create_agent_query( developer_id=x_developer_id, data=data, ) diff --git a/agents-api/agents_api/routers/agents/list_agents.py b/agents-api/agents_api/routers/agents/list_agents.py index 21cd736b5..ef9bb09db 100644 --- a/agents-api/agents_api/routers/agents/list_agents.py +++ b/agents-api/agents_api/routers/agents/list_agents.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import Agent, ListResponse from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.agent.list_agents import list_agents as list_agents_query from .router import router @@ -14,27 +13,24 @@ @router.get("/agents", tags=["agents"]) async def list_agents( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + # Expects the dot notation of object in query params + # Example: + # > ?metadata_filter.name=John&metadata_filter.age=30 + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Agent]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - agents = list_agents_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Agent](items=agents) diff --git a/agents-api/agents_api/routers/docs/create_doc.py b/agents-api/agents_api/routers/docs/create_doc.py index 0ba22c8d5..16754dbe3 100644 --- a/agents-api/agents_api/routers/docs/create_doc.py +++ b/agents-api/agents_api/routers/docs/create_doc.py @@ -8,6 +8,7 @@ from ...activities.types import EmbedDocsPayload from ...autogen.openapi_model import CreateDocRequest, ResourceCreatedResponse from ...clients import temporal +from ...common.retry_policies import DEFAULT_RETRY_POLICY from ...dependencies.developer_id import get_developer_id from ...env import temporal_task_queue, testing from ...models.docs.create_doc import create_doc as create_doc_query @@ -41,6 +42,7 @@ async def run_embed_docs_task( embed_payload, task_queue=temporal_task_queue, id=str(job_id), + retry_policy=DEFAULT_RETRY_POLICY, ) # TODO: Remove this conditional once we have a way to run workflows in diff --git a/agents-api/agents_api/routers/docs/list_docs.py b/agents-api/agents_api/routers/docs/list_docs.py index 2ba99a932..a4701646d 100644 --- a/agents-api/agents_api/routers/docs/list_docs.py +++ b/agents-api/agents_api/routers/docs/list_docs.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import Doc, ListResponse from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.docs.list_docs import list_docs as list_docs_query from .router import router @@ -14,21 +13,15 @@ @router.get("/users/{user_id}/docs", tags=["docs"]) async def list_user_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], user_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Doc]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - docs = list_docs_query( developer_id=x_developer_id, owner_type="user", @@ -37,7 +30,7 @@ async def list_user_docs( offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Doc](items=docs) @@ -46,21 +39,15 @@ async def list_user_docs( @router.get("/agents/{agent_id}/docs", tags=["docs"]) async def list_agent_docs( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], agent_id: UUID, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Doc]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - docs = list_docs_query( developer_id=x_developer_id, owner_type="agent", @@ -69,7 +56,7 @@ async def list_agent_docs( offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Doc](items=docs) diff --git a/agents-api/agents_api/routers/internal/__init__.py b/agents-api/agents_api/routers/internal/__init__.py new file mode 100644 index 000000000..237804332 --- /dev/null +++ b/agents-api/agents_api/routers/internal/__init__.py @@ -0,0 +1 @@ +from .router import router diff --git a/agents-api/agents_api/routers/internal/router.py b/agents-api/agents_api/routers/internal/router.py new file mode 100644 index 000000000..3293f2463 --- /dev/null +++ b/agents-api/agents_api/routers/internal/router.py @@ -0,0 +1,28 @@ +from fastapi import APIRouter, Request, Response +from google.protobuf import json_format +from temporalio.api.common.v1 import Payloads + +from ...worker.codec import PydanticEncodingPayloadConverter + +router: APIRouter = APIRouter() + +converter = PydanticEncodingPayloadConverter() + + +# Decode route +@router.post("/temporal/decode", tags=["temporal"]) +async def decode_payloads(req: Request) -> dict: + body = json_format.Parse(await req.body(), Payloads()) + payloads = body.payloads + + decoded_payloads = [] + + for p in payloads: + data = converter.from_payload(p) + + if hasattr(data, "model_dump"): + data = data.model_dump() + + decoded_payloads.append({"data": data, "metadata": p.metadata}) + + return {"payloads": decoded_payloads} diff --git a/agents-api/agents_api/routers/jobs/routers.py b/agents-api/agents_api/routers/jobs/routers.py index fe1b25fa3..dff4bed7b 100644 --- a/agents-api/agents_api/routers/jobs/routers.py +++ b/agents-api/agents_api/routers/jobs/routers.py @@ -4,8 +4,8 @@ from fastapi import APIRouter from temporalio.client import WorkflowExecutionStatus -from agents_api.autogen.openapi_model import JobStatus -from agents_api.clients.temporal import get_client +from ...autogen.openapi_model import JobStatus +from ...clients.temporal import get_client router: APIRouter = APIRouter() @@ -50,7 +50,7 @@ async def get_job_status(job_id: UUID) -> JobStatus: state = map_job_status(job_description.status) return JobStatus( - name=handle.id, + name=job_description.workflow_type, reason=f"Execution status: {state}", created_at=job_description.start_time, updated_at=job_description.execution_time, diff --git a/agents-api/agents_api/routers/sessions/list_sessions.py b/agents-api/agents_api/routers/sessions/list_sessions.py index 21d7b643b..6a4555e6e 100644 --- a/agents-api/agents_api/routers/sessions/list_sessions.py +++ b/agents-api/agents_api/routers/sessions/list_sessions.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import ListResponse, Session from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.session.list_sessions import list_sessions as list_sessions_query from .router import router @@ -14,27 +13,21 @@ @router.get("/sessions", tags=["sessions"]) async def list_sessions( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ] = {}, limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[Session]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - sessions = list_sessions_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) return ListResponse[Session](items=sessions) diff --git a/agents-api/agents_api/routers/tasks/create_or_update_task.py b/agents-api/agents_api/routers/tasks/create_or_update_task.py index e5245670a..50dbf19d9 100644 --- a/agents-api/agents_api/routers/tasks/create_or_update_task.py +++ b/agents-api/agents_api/routers/tasks/create_or_update_task.py @@ -6,15 +6,14 @@ from jsonschema.exceptions import SchemaError, ValidationError from starlette.status import HTTP_201_CREATED -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( CreateOrUpdateTaskRequest, ResourceUpdatedResponse, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.task.create_or_update_task import ( +from ...dependencies.developer_id import get_developer_id +from ...models.task.create_or_update_task import ( create_or_update_task as create_or_update_task_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/get_execution_details.py b/agents-api/agents_api/routers/tasks/get_execution_details.py index 8da7b98c8..95bccbc07 100644 --- a/agents-api/agents_api/routers/tasks/get_execution_details.py +++ b/agents-api/agents_api/routers/tasks/get_execution_details.py @@ -1,12 +1,11 @@ from uuid import UUID -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( Execution, ) -from agents_api.models.execution.get_execution import ( +from ...models.execution.get_execution import ( get_execution as get_execution_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/list_execution_transitions.py b/agents-api/agents_api/routers/tasks/list_execution_transitions.py index fd7be992a..9ce169509 100644 --- a/agents-api/agents_api/routers/tasks/list_execution_transitions.py +++ b/agents-api/agents_api/routers/tasks/list_execution_transitions.py @@ -1,14 +1,13 @@ from typing import Literal from uuid import UUID -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ListResponse, Transition, ) -from agents_api.models.execution.list_execution_transitions import ( +from ...models.execution.list_execution_transitions import ( list_execution_transitions as list_execution_transitions_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/list_task_executions.py b/agents-api/agents_api/routers/tasks/list_task_executions.py index f2961e54a..72cbd9b40 100644 --- a/agents-api/agents_api/routers/tasks/list_task_executions.py +++ b/agents-api/agents_api/routers/tasks/list_task_executions.py @@ -3,15 +3,14 @@ from fastapi import Depends -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( Execution, ListResponse, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.execution.list_executions import ( +from ...dependencies.developer_id import get_developer_id +from ...models.execution.list_executions import ( list_executions as list_task_executions_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/list_tasks.py b/agents-api/agents_api/routers/tasks/list_tasks.py index 43a7e9158..a53983006 100644 --- a/agents-api/agents_api/routers/tasks/list_tasks.py +++ b/agents-api/agents_api/routers/tasks/list_tasks.py @@ -3,13 +3,12 @@ from fastapi import Depends -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ListResponse, Task, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.task.list_tasks import list_tasks as list_tasks_query - +from ...dependencies.developer_id import get_developer_id +from ...models.task.list_tasks import list_tasks as list_tasks_query from .router import router diff --git a/agents-api/agents_api/routers/tasks/patch_execution.py b/agents-api/agents_api/routers/tasks/patch_execution.py index 0eb159c83..3cc45ee37 100644 --- a/agents-api/agents_api/routers/tasks/patch_execution.py +++ b/agents-api/agents_api/routers/tasks/patch_execution.py @@ -3,15 +3,14 @@ from fastapi import Depends -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ResourceUpdatedResponse, UpdateExecutionRequest, ) -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.execution.update_execution import ( +from ...dependencies.developer_id import get_developer_id +from ...models.execution.update_execution import ( update_execution as update_execution_query, ) - from .router import router diff --git a/agents-api/agents_api/routers/tasks/update_execution.py b/agents-api/agents_api/routers/tasks/update_execution.py index 3f6b30e8c..d887c455d 100644 --- a/agents-api/agents_api/routers/tasks/update_execution.py +++ b/agents-api/agents_api/routers/tasks/update_execution.py @@ -1,21 +1,21 @@ +import base64 from typing import Annotated from uuid import UUID from fastapi import Depends, HTTPException -from agents_api.autogen.openapi_model import ( +from ...autogen.openapi_model import ( ResumeExecutionRequest, StopExecutionRequest, ) -from agents_api.clients.temporal import get_client -from agents_api.dependencies.developer_id import get_developer_id -from agents_api.models.execution.get_paused_execution_token import ( +from ...clients.temporal import get_client +from ...dependencies.developer_id import get_developer_id +from ...models.execution.get_paused_execution_token import ( get_paused_execution_token, ) -from agents_api.models.execution.get_temporal_workflow_data import ( +from ...models.execution.get_temporal_workflow_data import ( get_temporal_workflow_data, ) - from .router import router @@ -29,19 +29,39 @@ async def update_execution( match data: case StopExecutionRequest(): - wf_handle = temporal_client.get_workflow_handle_for( - *get_temporal_workflow_data(execution_id=execution_id) - ) - await wf_handle.cancel() + try: + wf_handle = temporal_client.get_workflow_handle_for( + *get_temporal_workflow_data(execution_id=execution_id) + ) + await wf_handle.cancel() + except Exception as e: + raise HTTPException(status_code=500, detail="Failed to stop execution") case ResumeExecutionRequest(): token_data = get_paused_execution_token( developer_id=x_developer_id, execution_id=execution_id ) - act_handle = temporal_client.get_async_activity_handle( - task_token=str.encode(token_data["task_token"], encoding="latin-1") - ) - await act_handle.complete(data.input) - print("Resumed execution successfully") + activity_id = token_data["metadata"].get("x-activity-id", None) + run_id = token_data["metadata"].get("x-run-id", None) + workflow_id = token_data["metadata"].get("x-workflow-id", None) + if activity_id is None or run_id is None or workflow_id is None: + act_handle = temporal_client.get_async_activity_handle( + task_token=base64.b64decode( + token_data["task_token"].encode("ascii") + ), + ) + + else: + act_handle = temporal_client.get_async_activity_handle( + activity_id=activity_id, + workflow_id=workflow_id, + run_id=run_id, + ) + try: + await act_handle.complete(data.input) + except Exception as e: + raise HTTPException( + status_code=500, detail="Failed to resume execution" + ) case _: raise HTTPException(status_code=400, detail="Invalid request data") diff --git a/agents-api/agents_api/routers/users/list_users.py b/agents-api/agents_api/routers/users/list_users.py index 3f6b93cb2..a234d8a5f 100644 --- a/agents-api/agents_api/routers/users/list_users.py +++ b/agents-api/agents_api/routers/users/list_users.py @@ -1,12 +1,11 @@ -import json -from json import JSONDecodeError from typing import Annotated, Literal from uuid import UUID -from fastapi import Depends, HTTPException, status +from fastapi import Depends from ...autogen.openapi_model import ListResponse, User from ...dependencies.developer_id import get_developer_id +from ...dependencies.query_filter import create_filter_extractor from ...models.user.list_users import list_users as list_users_query from .router import router @@ -14,28 +13,21 @@ @router.get("/users", tags=["users"]) async def list_users( x_developer_id: Annotated[UUID, Depends(get_developer_id)], + metadata_filter: Annotated[ + dict, Depends(create_filter_extractor("metadata_filter")) + ], limit: int = 100, offset: int = 0, sort_by: Literal["created_at", "updated_at"] = "created_at", direction: Literal["asc", "desc"] = "desc", - metadata_filter: str = "{}", ) -> ListResponse[User]: - try: - metadata_filter = json.loads(metadata_filter) - except JSONDecodeError: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="metadata_filter is not a valid JSON", - ) - users = list_users_query( developer_id=x_developer_id, limit=limit, offset=offset, sort_by=sort_by, direction=direction, - metadata_filter=metadata_filter, + metadata_filter=metadata_filter or {}, ) - result = ListResponse[User](items=users) - return result + return ListResponse[User](items=users) diff --git a/agents-api/agents_api/web.py b/agents-api/agents_api/web.py index fc730fe82..56bdbb48a 100644 --- a/agents-api/agents_api/web.py +++ b/agents-api/agents_api/web.py @@ -13,6 +13,7 @@ from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from litellm.exceptions import APIError +from prometheus_fastapi_instrumentator import Instrumentator from pycozo.client import QueryException from scalar_fastapi import get_scalar_api_reference from temporalio.service import RPCError @@ -24,6 +25,7 @@ from .routers import ( agents, docs, + internal, jobs, sessions, tasks, @@ -99,6 +101,9 @@ def register_exceptions(app: FastAPI) -> None: root_path=api_prefix, ) +# Enable metrics +Instrumentator().instrument(app).expose(app) + # Create a new router for the docs scalar_router = APIRouter() @@ -122,6 +127,7 @@ async def scalar_html(): app.include_router(jobs.router, dependencies=[Depends(get_api_key)]) app.include_router(docs.router, dependencies=[Depends(get_api_key)]) app.include_router(tasks.router, dependencies=[Depends(get_api_key)]) +app.include_router(internal.router) # TODO: CORS should be enabled only for JWT auth # diff --git a/agents-api/agents_api/worker/worker.py b/agents-api/agents_api/worker/worker.py index 65e813023..54f2bcdd5 100644 --- a/agents-api/agents_api/worker/worker.py +++ b/agents-api/agents_api/worker/worker.py @@ -15,10 +15,14 @@ def create_worker(client: Client) -> Any: from ..activities import task_steps from ..activities.demo import demo_activity from ..activities.embed_docs import embed_docs + from ..activities.excecute_api_call import execute_api_call + from ..activities.execute_integration import execute_integration + from ..activities.execute_system import execute_system from ..activities.mem_mgmt import mem_mgmt from ..activities.mem_rating import mem_rating from ..activities.summarization import summarization from ..activities.truncation import truncation + from ..common.interceptors import CustomInterceptor from ..env import ( temporal_task_queue, ) @@ -49,12 +53,16 @@ def create_worker(client: Client) -> Any: activities=[ *task_activities, demo_activity, - summarization, + embed_docs, + execute_integration, + execute_system, + execute_api_call, mem_mgmt, mem_rating, - embed_docs, + summarization, truncation, ], + interceptors=[CustomInterceptor()], ) return worker diff --git a/agents-api/agents_api/workflows/demo.py b/agents-api/agents_api/workflows/demo.py index 61ad9d4a8..0599a4392 100644 --- a/agents-api/agents_api/workflows/demo.py +++ b/agents-api/agents_api/workflows/demo.py @@ -2,6 +2,8 @@ from temporalio import workflow +from ..common.retry_policies import DEFAULT_RETRY_POLICY + with workflow.unsafe.imports_passed_through(): from ..activities.demo import demo_activity @@ -14,4 +16,5 @@ async def run(self, a: int, b: int) -> int: demo_activity, args=[a, b], start_to_close_timeout=timedelta(seconds=30), + retry_policy=DEFAULT_RETRY_POLICY, ) diff --git a/agents-api/agents_api/workflows/embed_docs.py b/agents-api/agents_api/workflows/embed_docs.py index 62e0e65ae..83eefe907 100644 --- a/agents-api/agents_api/workflows/embed_docs.py +++ b/agents-api/agents_api/workflows/embed_docs.py @@ -8,6 +8,7 @@ with workflow.unsafe.imports_passed_through(): from ..activities.embed_docs import embed_docs from ..activities.types import EmbedDocsPayload + from ..common.retry_policies import DEFAULT_RETRY_POLICY @workflow.defn @@ -18,4 +19,5 @@ async def run(self, embed_payload: EmbedDocsPayload) -> None: embed_docs, embed_payload, schedule_to_close_timeout=timedelta(seconds=600), + retry_policy=DEFAULT_RETRY_POLICY, ) diff --git a/agents-api/agents_api/workflows/mem_rating.py b/agents-api/agents_api/workflows/mem_rating.py index 4b68a7198..0a87fd787 100644 --- a/agents-api/agents_api/workflows/mem_rating.py +++ b/agents-api/agents_api/workflows/mem_rating.py @@ -7,6 +7,7 @@ with workflow.unsafe.imports_passed_through(): from ..activities.mem_rating import mem_rating + from ..common.retry_policies import DEFAULT_RETRY_POLICY @workflow.defn @@ -17,4 +18,5 @@ async def run(self, memory: str) -> None: mem_rating, memory, schedule_to_close_timeout=timedelta(seconds=600), + retry_policy=DEFAULT_RETRY_POLICY, ) diff --git a/agents-api/agents_api/workflows/summarization.py b/agents-api/agents_api/workflows/summarization.py index 7946e9109..96ce4c460 100644 --- a/agents-api/agents_api/workflows/summarization.py +++ b/agents-api/agents_api/workflows/summarization.py @@ -7,6 +7,7 @@ with workflow.unsafe.imports_passed_through(): from ..activities.summarization import summarization + from ..common.retry_policies import DEFAULT_RETRY_POLICY @workflow.defn @@ -17,4 +18,5 @@ async def run(self, session_id: str) -> None: summarization, session_id, schedule_to_close_timeout=timedelta(seconds=600), + retry_policy=DEFAULT_RETRY_POLICY, ) diff --git a/agents-api/agents_api/workflows/task_execution/__init__.py b/agents-api/agents_api/workflows/task_execution/__init__.py index 2ff45e55c..155b49397 100644 --- a/agents-api/agents_api/workflows/task_execution/__init__.py +++ b/agents-api/agents_api/workflows/task_execution/__init__.py @@ -11,20 +11,23 @@ # Import necessary modules and types with workflow.unsafe.imports_passed_through(): from ...activities import task_steps + from ...activities.excecute_api_call import execute_api_call + from ...activities.execute_integration import execute_integration + from ...activities.execute_system import execute_system from ...autogen.openapi_model import ( - EmbedStep, + ApiCallDef, ErrorWorkflowStep, EvaluateStep, ForeachDo, ForeachStep, GetStep, IfElseWorkflowStep, + IntegrationDef, LogStep, MapReduceStep, ParallelStep, PromptStep, ReturnStep, - SearchStep, SetStep, SleepFor, SleepStep, @@ -35,12 +38,14 @@ WorkflowStep, YieldStep, ) + from ...autogen.Tools import SystemDef from ...common.protocol.tasks import ( ExecutionInput, PartialTransition, StepContext, StepOutcome, ) + from ...common.retry_policies import DEFAULT_RETRY_POLICY from ...env import debug, testing from .helpers import ( continue_as_child, @@ -52,6 +57,7 @@ ) from .transition import transition + # Supported steps # --------------- @@ -59,13 +65,11 @@ # WorkflowStep = ( # EvaluateStep # ✅ -# | ToolCallStep # ❌ <--- high priority +# | ToolCallStep # ✅ # | PromptStep # 🟡 <--- high priority # | GetStep # ✅ # | SetStep # ✅ # | LogStep # ✅ -# | EmbedStep # ❌ -# | SearchStep # ❌ # | ReturnStep # ✅ # | SleepStep # ✅ # | ErrorWorkflowStep # ✅ @@ -81,7 +85,7 @@ # Mapping of step types to their corresponding activities STEP_TO_ACTIVITY = { PromptStep: task_steps.prompt_step, - # ToolCallStep: tool_call_step, + ToolCallStep: task_steps.tool_call_step, WaitForInputStep: task_steps.wait_for_input_step, SwitchStep: task_steps.switch_step, LogStep: task_steps.log_step, @@ -114,30 +118,6 @@ # Main workflow definition @workflow.defn class TaskExecutionWorkflow: - user_state: dict[str, Any] = {} - - def __init__(self) -> None: - self.user_state = {} - - # TODO: Add endpoints for getting and setting user state for an execution - # Query methods for user state - @workflow.query - def get_user_state(self) -> dict[str, Any]: - return self.user_state - - @workflow.query - def get_user_state_by_key(self, key: str) -> Any: - return self.user_state.get(key) - - # Signal methods for updating user state - @workflow.signal - def set_user_state(self, key: str, value: Any) -> None: - self.user_state[key] = value - - @workflow.signal - def update_user_state(self, values: dict[str, Any]) -> None: - self.user_state.update(values) - # Main workflow run method @workflow.run async def run( @@ -145,11 +125,7 @@ async def run( execution_input: ExecutionInput, start: TransitionTarget = TransitionTarget(workflow="main", step=0), previous_inputs: list[Any] = [], - user_state: dict[str, Any] = {}, ) -> Any: - # Set the initial user state - self.user_state = user_state - workflow.logger.info( f"TaskExecutionWorkflow for task {execution_input.task.id}" f" [LOC {start.workflow}.{start.step}]" @@ -198,6 +174,7 @@ async def run( schedule_to_close_timeout=timedelta( seconds=30 if debug or testing else 600 ), + retry_policy=DEFAULT_RETRY_POLICY, ) workflow.logger.debug( f"Step {context.cursor.step} completed successfully" @@ -253,7 +230,6 @@ async def run( switch=switch, index=index, previous_inputs=previous_inputs, - user_state=self.user_state, ) state = PartialTransition(output=result) @@ -271,7 +247,6 @@ async def run( else_branch=else_branch, condition=condition, previous_inputs=previous_inputs, - user_state=self.user_state, ) state = PartialTransition(output=result) @@ -283,7 +258,6 @@ async def run( do_step=do_step, items=items, previous_inputs=previous_inputs, - user_state=self.user_state, ) state = PartialTransition(output=result) @@ -298,7 +272,6 @@ async def run( reduce=reduce, initial=initial, previous_inputs=previous_inputs, - user_state=self.user_state, ) state = PartialTransition(output=result) @@ -311,7 +284,6 @@ async def run( map_defn=map_defn, items=items, previous_inputs=previous_inputs, - user_state=self.user_state, initial=initial, reduce=reduce, parallelism=parallelism, @@ -371,7 +343,6 @@ async def run( context, start=yield_next_target, previous_inputs=[output], - user_state=self.user_state, ) state = PartialTransition(output=result) @@ -379,98 +350,184 @@ async def run( case WaitForInputStep(), StepOutcome(output=output): workflow.logger.info("Wait for input step: Waiting for external input") - await transition(context, type="wait", output=output) - result = await workflow.execute_activity( task_steps.raise_complete_async, args=[context, output], schedule_to_close_timeout=timedelta(days=31), + retry_policy=DEFAULT_RETRY_POLICY, ) state = PartialTransition(type="resume", output=result) - case PromptStep(), StepOutcome( + case PromptStep(unwrap=True), StepOutcome(output=response): + workflow.logger.debug(f"Prompt step: Received response: {response}") + state = PartialTransition(output=response) + + case PromptStep(forward_tool_results=False, unwrap=False), StepOutcome( output=response - ): # FIXME: if not response.choices[0].tool_calls: - # SCRUM-15 + ): + workflow.logger.debug(f"Prompt step: Received response: {response}") + state = PartialTransition(output=response) + + case PromptStep(unwrap=False), StepOutcome(output=response) if response[ + "choices" + ][0]["finish_reason"] != "tool_calls": workflow.logger.debug(f"Prompt step: Received response: {response}") - if response["choices"][0]["finish_reason"] != "tool_calls": - workflow.logger.debug("Prompt step: Received response") - state = PartialTransition(output=response) - else: - workflow.logger.debug("Prompt step: Received tool call") - message = response["choices"][0]["message"] - tool_calls_input = message["tool_calls"] - - # Enter a wait-for-input step to ask the developer to run the tool calls - tool_calls_results = await workflow.execute_activity( - task_steps.raise_complete_async, - args=[context, tool_calls_input], - schedule_to_close_timeout=timedelta(days=31), - ) - # Feed the tool call results back to the model - # context.inputs.append(tool_calls_results) - context.current_step.prompt.append(message) - context.current_step.prompt.append(tool_calls_results) - new_response = await workflow.execute_activity( - task_steps.prompt_step, - context, - schedule_to_close_timeout=timedelta( - seconds=30 if debug or testing else 600 - ), - ) - state = PartialTransition(output=new_response.output, type="resume") - - # case PromptStep(), StepOutcome( - # output=response - # ): # FIXME: if response.choices[0].tool_calls: - # # SCRUM-15 - # workflow.logger.debug("Prompt step: Received response") - # - # ## First, enter a wait-for-input step and ask developer to run the tool calls - # ## Then, continue the workflow with the input received from the developer - # ## This will be a dict with the tool call name as key and the tool call arguments as value - # ## The prompt is run again with the tool call arguments as input - # ## And the result is returned - # ## If model asks for more tool calls, repeat the process + state = PartialTransition(output=response) + + case PromptStep(unwrap=False), StepOutcome(output=response) if response[ + "choices" + ][0]["finish_reason"] == "tool_calls": + workflow.logger.debug("Prompt step: Received tool call") + message = response["choices"][0]["message"] + tool_calls_input = message["tool_calls"] + + # Enter a wait-for-input step to ask the developer to run the tool calls + tool_calls_results = await workflow.execute_activity( + task_steps.raise_complete_async, + args=[context, tool_calls_input], + schedule_to_close_timeout=timedelta(days=31), + retry_policy=DEFAULT_RETRY_POLICY, + ) + + # Feed the tool call results back to the model + context.current_step.prompt.append(message) + context.current_step.prompt.append(tool_calls_results) + new_response = await workflow.execute_activity( + task_steps.prompt_step, + context, + schedule_to_close_timeout=timedelta( + seconds=30 if debug or testing else 600 + ), + retry_policy=DEFAULT_RETRY_POLICY, + ) + state = PartialTransition(output=new_response.output, type="resume") case SetStep(), StepOutcome(output=evaluated_output): workflow.logger.info("Set step: Updating user state") - self.update_user_state(evaluated_output) # Pass along the previous output unchanged - state = PartialTransition(output=context.current_input) + state = PartialTransition( + output=context.current_input, user_state=evaluated_output + ) case GetStep(get=key), _: workflow.logger.info(f"Get step: Fetching '{key}' from user state") - value = self.get_user_state_by_key(key) + value = workflow.memo_value(key, default=None) workflow.logger.debug(f"Retrieved value: {value}") state = PartialTransition(output=value) - case EmbedStep(), _: - # FIXME: Implement EmbedStep - # SCRUM-19 - workflow.logger.error("EmbedStep not yet implemented") - raise ApplicationError("Not implemented") - - case SearchStep(), _: - # FIXME: Implement SearchStep - # SCRUM-18 - workflow.logger.error("SearchStep not yet implemented") - raise ApplicationError("Not implemented") - case ParallelStep(), _: # FIXME: Implement ParallelStep # SCRUM-17 workflow.logger.error("ParallelStep not yet implemented") raise ApplicationError("Not implemented") - case ToolCallStep(), _: - # FIXME: Implement ToolCallStep - # SCRUM-16 - workflow.logger.error("ToolCallStep not yet implemented") - raise ApplicationError("Not implemented") + case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ + "type" + ] == "function": + # Enter a wait-for-input step to ask the developer to run the tool calls + tool_call_response = await workflow.execute_activity( + task_steps.raise_complete_async, + args=[context, tool_call], + schedule_to_close_timeout=timedelta(days=31), + retry_policy=DEFAULT_RETRY_POLICY, + ) + + state = PartialTransition(output=tool_call_response, type="resume") + + case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ + "type" + ] == "integration": + call = tool_call["integration"] + tool_name = call["name"] + arguments = call["arguments"] + integration_spec = next( + (t for t in context.tools if t.name == tool_name), None + ) + + if integration_spec is None: + raise ApplicationError(f"Integration {tool_name} not found") + + integration = IntegrationDef( + provider=integration_spec.spec["provider"], + setup=integration_spec.spec["setup"], + method=integration_spec.spec["method"], + arguments=arguments, + ) + + tool_call_response = await workflow.execute_activity( + execute_integration, + args=[context, tool_name, integration, arguments], + schedule_to_close_timeout=timedelta( + seconds=30 if debug or testing else 600 + ), + retry_policy=DEFAULT_RETRY_POLICY, + ) + + state = PartialTransition(output=tool_call_response) + + case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ + "type" + ] == "api_call": + call = tool_call["api_call"] + tool_name = call["name"] + arguments = call["arguments"] + apicall_spec = next( + (t for t in context.tools if t.name == tool_name), None + ) + + if apicall_spec is None: + raise ApplicationError(f"Integration {tool_name} not found") + + api_call = ApiCallDef( + method=apicall_spec.spec["method"], + url=apicall_spec.spec["url"], + headers=apicall_spec.spec["headers"], + follow_redirects=apicall_spec.spec["follow_redirects"], + ) + + if "json_" in arguments: + arguments["json"] = arguments["json_"] + del arguments["json_"] + + # Execute the API call using the `execute_api_call` function + tool_call_response = await workflow.execute_activity( + execute_api_call, + args=[ + api_call, + arguments, + ], + schedule_to_close_timeout=timedelta( + seconds=30 if debug or testing else 600 + ), + ) + + state = PartialTransition(output=tool_call_response) + + case ToolCallStep(), StepOutcome(output=tool_call) if tool_call[ + "type" + ] == "system": + call = tool_call.get("system") + + system_call = SystemDef(**call) + tool_call_response = await workflow.execute_activity( + execute_system, + args=[context, system_call], + schedule_to_close_timeout=timedelta( + seconds=30 if debug or testing else 600 + ), + ) + + # FIXME: This is a hack to make the output of the system call match + # the expected output format (convert uuid/datetime to strings) + def model_dump(obj): + if isinstance(obj, list): + return [model_dump(item) for item in obj] + return obj.model_dump(mode="json") + + state = PartialTransition(output=model_dump(tool_call_response)) case _: workflow.logger.error( @@ -480,6 +537,7 @@ async def run( # 4. Transition to the next step workflow.logger.info(f"Transitioning after step {context.cursor.step}") + # The returned value is the transition finally created final_state = await transition(context, state) @@ -502,8 +560,8 @@ async def run( # Continue as a child workflow return await continue_as_child( - context, + context.execution_input, start=final_state.next, previous_inputs=previous_inputs + [final_state.output], - user_state=self.user_state, + user_state=state.user_state, ) diff --git a/agents-api/agents_api/workflows/task_execution/helpers.py b/agents-api/agents_api/workflows/task_execution/helpers.py index 88828b31b..271f33dbf 100644 --- a/agents-api/agents_api/workflows/task_execution/helpers.py +++ b/agents-api/agents_api/workflows/task_execution/helpers.py @@ -5,6 +5,8 @@ from temporalio import workflow from temporalio.exceptions import ApplicationError +from ...common.retry_policies import DEFAULT_RETRY_POLICY + with workflow.unsafe.imports_passed_through(): from ...activities import task_steps from ...autogen.openapi_model import ( @@ -25,14 +27,23 @@ async def continue_as_child( previous_inputs: list[Any], user_state: dict[str, Any] = {}, ) -> Any: - return await workflow.execute_child_workflow( - "TaskExecutionWorkflow", + info = workflow.info() + + if info.is_continue_as_new_suggested(): + run = workflow.continue_as_new + else: + run = lambda *args, **kwargs: workflow.execute_child_workflow( # noqa: E731 + info.workflow_type, *args, **kwargs + ) + + return await run( args=[ execution_input, start, previous_inputs, - user_state, ], + retry_policy=DEFAULT_RETRY_POLICY, + memo=workflow.memo() | user_state, ) @@ -43,7 +54,7 @@ async def execute_switch_branch( switch: list, index: int, previous_inputs: list[Any], - user_state: dict[str, Any], + user_state: dict[str, Any] = {}, ) -> Any: workflow.logger.info(f"Switch step: Chose branch {index}") chosen_branch = switch[index] @@ -74,7 +85,7 @@ async def execute_if_else_branch( else_branch: WorkflowStep, condition: bool, previous_inputs: list[Any], - user_state: dict[str, Any], + user_state: dict[str, Any] = {}, ) -> Any: workflow.logger.info(f"If-Else step: Condition evaluated to {condition}") chosen_branch = then_branch if condition else else_branch @@ -105,7 +116,7 @@ async def execute_foreach_step( do_step: WorkflowStep, items: list[Any], previous_inputs: list[Any], - user_state: dict[str, Any], + user_state: dict[str, Any] = {}, ) -> Any: workflow.logger.info(f"Foreach step: Iterating over {len(items)} items") results = [] @@ -139,7 +150,7 @@ async def execute_map_reduce_step( map_defn: WorkflowStep, items: list[Any], previous_inputs: list[Any], - user_state: dict[str, Any], + user_state: dict[str, Any] = {}, reduce: str | None = None, initial: Any = [], ) -> Any: @@ -169,6 +180,7 @@ async def execute_map_reduce_step( task_steps.base_evaluate, args=[reduce, {"results": result, "_": output}], schedule_to_close_timeout=timedelta(seconds=30), + retry_policy=DEFAULT_RETRY_POLICY, ) return result @@ -181,7 +193,7 @@ async def execute_map_reduce_step_parallel( map_defn: WorkflowStep, items: list[Any], previous_inputs: list[Any], - user_state: dict[str, Any], + user_state: dict[str, Any] = {}, initial: Any = [], reduce: str | None = None, parallelism: int = task_max_parallelism, @@ -244,6 +256,7 @@ async def execute_map_reduce_step_parallel( extra_lambda_strs, ], schedule_to_close_timeout=timedelta(seconds=30), + retry_policy=DEFAULT_RETRY_POLICY, ) except BaseException as e: diff --git a/agents-api/agents_api/workflows/task_execution/transition.py b/agents-api/agents_api/workflows/task_execution/transition.py index dbcd776e4..035322dad 100644 --- a/agents-api/agents_api/workflows/task_execution/transition.py +++ b/agents-api/agents_api/workflows/task_execution/transition.py @@ -10,6 +10,7 @@ TransitionTarget, ) from ...common.protocol.tasks import PartialTransition, StepContext +from ...common.retry_policies import DEFAULT_RETRY_POLICY async def transition( @@ -44,6 +45,7 @@ async def transition( task_steps.transition_step, args=[context, transition_request], schedule_to_close_timeout=timedelta(seconds=30), + retry_policy=DEFAULT_RETRY_POLICY, ) except Exception as e: diff --git a/agents-api/agents_api/workflows/truncation.py b/agents-api/agents_api/workflows/truncation.py index d3646ccbe..d12a186b9 100644 --- a/agents-api/agents_api/workflows/truncation.py +++ b/agents-api/agents_api/workflows/truncation.py @@ -7,6 +7,7 @@ with workflow.unsafe.imports_passed_through(): from ..activities.truncation import truncation + from ..common.retry_policies import DEFAULT_RETRY_POLICY @workflow.defn @@ -17,4 +18,5 @@ async def run(self, session_id: str, token_count_threshold: int) -> None: truncation, args=[session_id, token_count_threshold], schedule_to_close_timeout=timedelta(seconds=600), + retry_policy=DEFAULT_RETRY_POLICY, ) diff --git a/agents-api/docker-compose.yml b/agents-api/docker-compose.yml index 0770ded61..d385db0a8 100644 --- a/agents-api/docker-compose.yml +++ b/agents-api/docker-compose.yml @@ -12,6 +12,7 @@ x--shared-environment: &shared-environment COZO_HOST: ${COZO_HOST:-http://memory-store:9070} DEBUG: ${AGENTS_API_DEBUG:-False} EMBEDDING_MODEL_ID: ${EMBEDDING_MODEL_ID:-Alibaba-NLP/gte-large-en-v1.5} + INTEGRATION_SERVICE_URL: ${INTEGRATION_SERVICE_URL:-http://integrations:8000} LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} LITELLM_URL: ${LITELLM_URL:-http://litellm:4000} SUMMARIZATION_MODEL_NAME: ${SUMMARIZATION_MODEL_NAME:-gpt-4-turbo} @@ -23,7 +24,7 @@ x--shared-environment: &shared-environment WORKER_URL: ${WORKER_URL:-temporal:7233} x--base-agents-api: &base-agents-api - image: julepai/agents-api:${TAG} + image: julepai/agents-api:${TAG:-dev} depends_on: worker: condition: service_started @@ -33,6 +34,9 @@ x--base-agents-api: &base-agents-api context: . dockerfile: Dockerfile + ports: + - "8080:8080" + develop: watch: - action: sync+restart @@ -53,9 +57,6 @@ services: - '' # Acts as a default profile. See: https://stackoverflow.com/questions/75758174/how-to-make-profile-default-for-docker-compose - single-tenant - ports: - - "8080:8080" - agents-api-multi-tenant: <<: *base-agents-api profiles: @@ -66,7 +67,7 @@ services: AGENTS_API_PREFIX: "/api" worker: - image: julepai/worker:${TAG} + image: julepai/worker:${TAG:-dev} environment: <<: *shared-environment build: @@ -86,7 +87,7 @@ services: path: Dockerfile.worker cozo-migrate: - image: julepai/cozo-migrate:${TAG} + image: julepai/cozo-migrate:${TAG:-dev} container_name: cozo-migrate build: context: . diff --git a/agents-api/migrations/migrate_1727235852_add_forward_tool_calls_option.py b/agents-api/migrations/migrate_1727235852_add_forward_tool_calls_option.py new file mode 100644 index 000000000..aa1b8441a --- /dev/null +++ b/agents-api/migrations/migrate_1727235852_add_forward_tool_calls_option.py @@ -0,0 +1,87 @@ +# /usr/bin/env python3 + +MIGRATION_ID = "add_forward_tool_calls_option" +CREATED_AT = 1727235852.744035 + + +def run(client, queries): + joiner = "}\n\n{" + + query = joiner.join(queries) + query = f"{{\n{query}\n}}" + client.run(query) + + +add_forward_tool_calls_option_to_session_query = dict( + up=""" + ?[forward_tool_calls, token_budget, context_overflow, developer_id, session_id, updated_at, situation, summary, created_at, metadata, render_templates, token_budget, context_overflow] := *sessions{ + developer_id, + session_id, + updated_at, + situation, + summary, + created_at, + metadata, + render_templates, + token_budget, + context_overflow, + }, + forward_tool_calls = null + + :replace sessions { + developer_id: Uuid, + session_id: Uuid, + updated_at: Validity default [floor(now()), true], + => + situation: String, + summary: String? default null, + created_at: Float default now(), + metadata: Json default {}, + render_templates: Bool default false, + token_budget: Int? default null, + context_overflow: String? default null, + forward_tool_calls: Bool? default null, + } + """, + down=""" + ?[token_budget, context_overflow, developer_id, session_id, updated_at, situation, summary, created_at, metadata, render_templates, token_budget, context_overflow] := *sessions{ + developer_id, + session_id, + updated_at, + situation, + summary, + created_at, + metadata, + render_templates, + token_budget, + context_overflow, + } + + :replace sessions { + developer_id: Uuid, + session_id: Uuid, + updated_at: Validity default [floor(now()), true], + => + situation: String, + summary: String? default null, + created_at: Float default now(), + metadata: Json default {}, + render_templates: Bool default false, + token_budget: Int? default null, + context_overflow: String? default null, + } + """, +) + + +queries = [ + add_forward_tool_calls_option_to_session_query, +] + + +def up(client): + run(client, [q["up"] for q in queries]) + + +def down(client): + run(client, [q["down"] for q in reversed(queries)]) diff --git a/agents-api/migrations/migrate_1727922523_add_description_to_tools.py b/agents-api/migrations/migrate_1727922523_add_description_to_tools.py new file mode 100644 index 000000000..1d6724090 --- /dev/null +++ b/agents-api/migrations/migrate_1727922523_add_description_to_tools.py @@ -0,0 +1,64 @@ +# /usr/bin/env python3 + +MIGRATION_ID = "add_description_to_tools" +CREATED_AT = 1727922523.283493 + + +add_description_to_tools = dict( + up=""" + ?[agent_id, tool_id, type, name, description, spec, updated_at, created_at] := *tools { + agent_id, tool_id, type, name, spec, updated_at, created_at + }, description = null + + :replace tools { + agent_id: Uuid, + tool_id: Uuid, + => + type: String, + name: String, + description: String?, + spec: Json, + + updated_at: Float default now(), + created_at: Float default now(), + } + """, + down=""" + ?[agent_id, tool_id, type, name, spec, updated_at, created_at] := *tools { + agent_id, tool_id, type, name, spec, updated_at, created_at + } + + :replace tools { + agent_id: Uuid, + tool_id: Uuid, + => + type: String, + name: String, + spec: Json, + + updated_at: Float default now(), + created_at: Float default now(), + } + """, +) + + +queries_to_run = [ + add_description_to_tools, +] + + +def run(client, *queries): + joiner = "}\n\n{" + + query = joiner.join(queries) + query = f"{{\n{query}\n}}" + client.run(query) + + +def up(client): + run(client, *[q["up"] for q in queries_to_run]) + + +def down(client): + run(client, *[q["down"] for q in reversed(queries_to_run)]) diff --git a/agents-api/notebooks/01-revise-entities.ipynb b/agents-api/notebooks/01-revise-entities.ipynb index 00667cb82..27b2e1f0d 100644 --- a/agents-api/notebooks/01-revise-entities.ipynb +++ b/agents-api/notebooks/01-revise-entities.ipynb @@ -2,16 +2,64 @@ "cells": [ { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: openai in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.51.0)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.27.2)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.5.0)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (2.9.2)\n", + "Requirement already satisfied: sniffio in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.3.1)\n", + "Requirement already satisfied: tqdm>4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.66.5)\n", + "Requirement already satisfied: typing-extensions<5,>=4.11 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.12.2)\n", + "Requirement already satisfied: idna>=2.8 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from anyio<5,>=3.5.0->openai) (3.10)\n", + "Requirement already satisfied: certifi in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai) (0.14.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (2.23.4)\n" + ] + } + ], + "source": [ + "! pip install openai" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: python-dotenv in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.0.1)\n" + ] + } + ], + "source": [ + "! pip install python-dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "True" + "False" ] }, - "execution_count": 6, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -35,18 +83,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "from openai import Client\n", + "import openai\n", + "from openai import OpenAI\n", + "\n", + "api_key = \"YOUR_OPENAI_API_KEY\"\n", "\n", - "client = Client()" + "openai.api_key = api_key\n", + "client = OpenAI(api_key=api_key)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -69,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -89,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -106,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -290,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -314,7 +366,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -323,7 +375,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -339,7 +391,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -348,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -365,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -381,7 +433,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -460,7 +512,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -468,44 +520,37 @@ "output_type": "stream", "text": [ "Starting CoT generation\n", - "{'content': 'Planning step by step:\\n'\n", + "{'content': 'To add context for future entries, we should outline the main '\n", + " 'entities in the session. These entities are the main people, '\n", + " 'places, or things that are most relevant to the conversation.\\n'\n", " '\\n'\n", - " '1. Identify key entities such as characters, games, and '\n", - " 'technology mentioned in the conversation.\\n'\n", - " '2. Provide context for each entity, explaining its relevance to '\n", - " 'the conversation and any additional useful information.\\n'\n", - " '3. Ensure the entities and their descriptions encapsulate the '\n", - " 'essence of the conversation for future reference or follow-up '\n", - " 'discussions.\\n'\n", - " '\\n'\n", - " 'Entities will be identified and described based on the '\n", - " \"conversation's content and flow. This will include the games \"\n", - " 'discussed, characters within those games, and any technology '\n", - " 'issues mentioned.',\n", + " 'Entities:\\n'\n", + " '1. User (The participant initiating the conversation, interested '\n", + " 'in video games and experiencing technical issues).\\n'\n", + " '2. Assistant (Engages in conversation about video games and '\n", + " 'offers technical advice).\\n'\n", + " '3. Red Dead Redemption 2 (Video game discussed, specifically the '\n", + " '\"Blood Feuds, Ancient and Modern\" mission and the character '\n", + " 'development of Arthur and Dutch).\\n'\n", + " '4. Helldivers 2 (Another video game discussed, focusing on '\n", + " 'gameplay, strategy, and specific in-game items like the laser '\n", + " 'cannon and guard dog).\\n'\n", + " '5. Nvidia (Referenced in relation to driver issues, particularly '\n", + " 'in the context of compatibility with Linux operating systems).',\n", " 'role': 'assistant'}\n", "End CoT generation\n", "Starting chatml generation\n", "End chatml generation\n", - "{'content': '- **User**: Engages in discussions about video games and faces '\n", + "{'content': '- User: Engages in discussions about video games and experiences '\n", " 'technical issues with Nvidia drivers on Linux.\\n'\n", - " '- **Assistant**: Provides conversation on video games, offers '\n", - " 'suggestions on game strategies, and gives technical advice '\n", - " 'regarding Nvidia drivers.\\n'\n", - " '- **Red Dead Redemption 2 (RDR2)**: A video game discussed '\n", - " 'extensively, particularly its missions and character '\n", - " 'development.\\n'\n", - " '- **Arthur Morgan**: A central character in RDR2, noted for his '\n", - " 'moral complexity and development throughout the game.\\n'\n", - " '- **Dutch van der Linde**: Another key character from RDR2, whose '\n", - " \"increasingly erratic decisions impact the game's storyline.\\n\"\n", - " '- **Helldivers 2**: A cooperative multiplayer game mentioned by '\n", - " 'the user, known for its intense gameplay and strategic team '\n", - " 'dynamics.\\n'\n", - " '- **Nvidia**: Technology company referenced in relation to driver '\n", - " 'compatibility issues with Linux operating systems.\\n'\n", - " '- **Linux**: Operating system mentioned as having compatibility '\n", - " \"issues with Nvidia drivers, affecting the user's gaming \"\n", - " 'experience.',\n", + " '- Assistant: Provides insights and engages in discussions about '\n", + " 'video games, offers technical advice.\\n'\n", + " '- Red Dead Redemption 2: A video game discussed for its missions '\n", + " 'and character development.\\n'\n", + " '- Helldivers 2: Another video game mentioned, focusing on '\n", + " 'gameplay and strategies.\\n'\n", + " '- Nvidia: Mentioned in relation to driver compatibility issues '\n", + " 'with Linux.',\n", " 'role': 'assistant'}\n" ] } @@ -513,11 +558,18 @@ "source": [ "pprint(get_entities(chat_session))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "julep", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -531,7 +583,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.12.1" } }, "nbformat": 4, diff --git a/agents-api/notebooks/02-trim-messages.ipynb b/agents-api/notebooks/02-trim-messages.ipynb index 2a5c58da2..bf03a76a0 100644 --- a/agents-api/notebooks/02-trim-messages.ipynb +++ b/agents-api/notebooks/02-trim-messages.ipynb @@ -4,14 +4,62 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: openai in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.51.0)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.27.2)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.5.0)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (2.9.2)\n", + "Requirement already satisfied: sniffio in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.3.1)\n", + "Requirement already satisfied: tqdm>4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.66.5)\n", + "Requirement already satisfied: typing-extensions<5,>=4.11 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.12.2)\n", + "Requirement already satisfied: idna>=2.8 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from anyio<5,>=3.5.0->openai) (3.10)\n", + "Requirement already satisfied: certifi in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai) (0.14.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (2.23.4)\n" + ] + } + ], + "source": [ + "! pip install openai" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: python-dotenv in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.0.1)\n" + ] + } + ], + "source": [ + "! pip install python-dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "True" + "False" ] }, - "execution_count": 1, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -35,18 +83,22 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "from openai import Client\n", + "import openai\n", + "from openai import OpenAI\n", "\n", - "client = Client()" + "api_key = \"YOUR_OPENAI_API_KEY\"\n", + "\n", + "openai.api_key = api_key\n", + "client = OpenAI(api_key=api_key)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -69,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -89,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -106,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -290,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -351,7 +403,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -360,7 +412,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -376,7 +428,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -385,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -402,7 +454,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -418,7 +470,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -493,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -501,11 +553,11 @@ "output_type": "stream", "text": [ "Starting CoT generation\n", - "{'content': 'The messages are clear and concise, reflecting a casual '\n", - " 'conversation about gaming experiences and software issues. '\n", - " \"There's no need for trimming as each message contributes to the \"\n", - " 'flow of the conversation, maintaining user engagement and '\n", - " 'providing relevant information and responses.',\n", + "{'content': 'The conversation is generally concise and relevant to the casual, '\n", + " 'gaming-centered topic. Each message contributes to the dialogue '\n", + " 'by either providing information or prompting further discussion, '\n", + " 'and no excessive verbosity or extraneous details are present. '\n", + " 'Therefore, no trimming is required for this session.',\n", " 'role': 'assistant'}\n", "End CoT generation\n", "Starting chatml generation\n", @@ -701,11 +753,18 @@ "source": [ "pprint(trim_messages(chat_session))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "julep", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -719,7 +778,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.12.1" } }, "nbformat": 4, diff --git a/agents-api/notebooks/03-summarise.ipynb b/agents-api/notebooks/03-summarise.ipynb index a934fd1b9..7be4baf02 100644 --- a/agents-api/notebooks/03-summarise.ipynb +++ b/agents-api/notebooks/03-summarise.ipynb @@ -4,14 +4,62 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: openai in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.51.0)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.27.2)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.5.0)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (2.9.2)\n", + "Requirement already satisfied: sniffio in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.3.1)\n", + "Requirement already satisfied: tqdm>4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.66.5)\n", + "Requirement already satisfied: typing-extensions<5,>=4.11 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.12.2)\n", + "Requirement already satisfied: idna>=2.8 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from anyio<5,>=3.5.0->openai) (3.10)\n", + "Requirement already satisfied: certifi in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai) (0.14.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (2.23.4)\n" + ] + } + ], + "source": [ + "! pip install openai" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: python-dotenv in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.0.1)\n" + ] + } + ], + "source": [ + "! pip install python-dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "True" + "False" ] }, - "execution_count": 1, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -42,18 +90,22 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ - "from openai import Client\n", + "import openai\n", + "from openai import OpenAI\n", "\n", - "client = Client()" + "api_key = \"YOUR_OPENAI_API_KEY\"\n", + "\n", + "openai.api_key = api_key\n", + "client = OpenAI(api_key=api_key)" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -80,7 +132,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -100,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -124,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -315,7 +367,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -355,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -429,7 +481,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -474,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -490,7 +542,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -506,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -515,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -532,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -555,7 +607,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -636,7 +688,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -644,41 +696,37 @@ "output_type": "stream", "text": [ "Starting CoT generation\n", - "{'content': 'To provide a comprehensive overview of the entities in the '\n", - " 'session, we need to focus on the main people, places, things, and '\n", - " 'concepts that have been discussed:\\n'\n", - " '\\n'\n", - " '1. **User**: Engages in conversation about video games, '\n", - " 'specifically mentioning experiences with \"Red Dead Redemption 2\" '\n", - " 'and \"Helldivers 2.\" Also, shares technical issues related to '\n", - " 'Nvidia graphics drivers on Linux.\\n'\n", + "{'content': 'To summarize the important entities from this conversation:\\n'\n", " '\\n'\n", - " '2. **Assistant**: Offers insights and engages in discussions '\n", - " 'about the video games mentioned by the user, provides gameplay '\n", - " 'strategies, and offers technical advice regarding Nvidia driver '\n", - " 'issues on Linux.\\n'\n", + " '1. **User**: Engages in a casual and friendly chat with the '\n", + " 'Assistant, discussing video games and a technical issue.\\n'\n", + " '2. **Assistant**: Responds to the User, engaging in discussions '\n", + " 'about specific video games and offering technical advice '\n", + " 'regarding an Nvidia driver issue.\\n'\n", + " '3. **Video Games Discussed**:\\n'\n", + " ' - **Red Dead Redemption 2 (RDR2)**: User recently finished '\n", + " 'this game and discusses specific missions such as \"Blood Feuds, '\n", + " 'Ancient and Modern\".\\n'\n", + " ' - **Helldivers 2**: User is currently playing this game, '\n", + " 'mentioning favorite builds and discussing gameplay strategies.\\n'\n", + " '4. **Technical Issue**: User mentions having an Nvidia driver '\n", + " 'issue, particularly concerning its compatibility with Linux. The '\n", + " 'Assistant offers advice on handling this issue.\\n'\n", + " '5. **Game Characters**:\\n'\n", + " ' - **Arthur**: From RDR2, discussed in terms of his journey and '\n", + " 'character development.\\n'\n", + " ' - **Dutch**: Also from RDR2, discussed for his progressive '\n", + " 'craziness and leadership style.\\n'\n", + " '6. **Gaming Strategies**:\\n'\n", + " ' - **Run and Gun**: Mentioned by the User as a strategy used in '\n", + " 'Helldivers 2.\\n'\n", + " '7. **Operating System**:\\n'\n", + " ' - **Linux**: Mentioned in relation to the Nvidia driver '\n", + " 'compatibility issue.\\n'\n", " '\\n'\n", - " '3. **Red Dead Redemption 2 (RDR2)**: A video game discussed '\n", - " 'extensively in the conversation. Key aspects such as the '\n", - " 'character Arthur, missions like \"Blood Feuds, Ancient and '\n", - " 'Modern,\" and side quests are highlighted.\\n'\n", - " '\\n'\n", - " '4. **Helldivers 2**: Another video game mentioned by the user. '\n", - " 'The conversation covers gameplay elements like the laser cannon, '\n", - " 'guard dog, and challenges like the Charger enemy.\\n'\n", - " '\\n'\n", - " '5. **Nvidia Drivers**: A technical issue brought up by the user, '\n", - " 'particularly focusing on compatibility problems with Linux. The '\n", - " 'assistant provides troubleshooting advice and recommendations for '\n", - " 'dealing with these issues.\\n'\n", - " '\\n'\n", - " '6. **Linux**: Mentioned in the context of having compatibility '\n", - " \"issues with Nvidia drivers, highlighting the user's struggle with \"\n", - " 'technical aspects of gaming on this operating system.\\n'\n", - " '\\n'\n", - " 'These entities encapsulate the core topics and issues discussed '\n", - " \"in the session, providing a clear view of the conversation's \"\n", - " 'focus areas.',\n", + " 'These entities encapsulate the main topics and references made '\n", + " 'during the conversation, focusing on video gaming experiences, '\n", + " 'character analysis, and technical troubleshooting.',\n", " 'role': 'assistant'}\n", "End CoT generation\n", "Starting chatml generation\n", @@ -699,7 +747,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -766,7 +814,9 @@ " messages.append(user(start_message))\n", "\n", " print(\"Starting chatml generation\")\n", - " trim_result = generate(messages, model=\"gpt-4-turbo\", temperature=0.1, stop=[\"\\n'\n", + " \"- User greeted the assistant and asked what's good.\\n\"\n", + " '- Assistant replied casually, asking about recent games.\\n'\n", + " '- User mentioned finishing Red Dead Redemption 2, praising the '\n", + " 'final mission.\\n'\n", + " \"- Assistant inquired about the user's thoughts on Arthur's \"\n", + " 'journey and favorite moments.\\n'\n", + " '- User highlighted the \"Blood Feuds\" mission.\\n'\n", + " \"- Assistant discussed the mission's cinematic aspects and asked \"\n", + " \"about user's alignment with game characters.\\n\"\n", + " '- User preferred Arthur over Dutch.\\n'\n", + " '- Assistant discussed character development and suggested '\n", + " 'exploring side quests.\\n'\n", + " '- User mentioned completing side quests, liked the widow and '\n", + " 'bounty missions.\\n'\n", + " \"- Assistant praised the game's side missions and asked about \"\n", + " \"user's next gaming plans.\\n\"\n", + " '- User switched to playing Helldivers 2.\\n'\n", + " \"- Assistant described Helldivers 2's gameplay and asked about \"\n", + " \"user's experience.\\n\"\n", + " '- User shared favorite equipment setup.\\n'\n", + " '- Assistant discussed tactical options and asked about '\n", + " 'challenging missions.\\n'\n", + " '- User mentioned difficulty with a specific enemy.\\n'\n", + " \"- Assistant offered strategy tips and inquired about team's \"\n", + " 'handling of game challenges.\\n'\n", + " '- User described their run-and-gun approach.\\n'\n", + " '- Assistant acknowledged the strategy and asked about difficulty '\n", + " 'levels.\\n'\n", + " '- User mentioned needing to work and a technical issue with '\n", + " 'Nvidia drivers.\\n'\n", + " '- Assistant offered technical advice for driver issue and wished '\n", + " 'good luck with work.\\n'\n", + " '- User commented on Nvidia and Linux compatibility issues.\\n'\n", + " '- Assistant provided detailed advice for handling Nvidia drivers '\n", + " 'on Linux.\\n'\n", + " '- User ended the conversation, intending to leave.\\n'\n", + " '- Assistant said goodbye.\\n'\n", + " '',\n", " 'role': 'assistant'}\n", "End CoT generation\n", "Starting chatml generation\n", @@ -809,7 +885,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1009,7 +1085,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 22, "metadata": {}, "outputs": [], "source": [ @@ -1096,7 +1172,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1104,106 +1180,21 @@ "output_type": "stream", "text": [ "Starting CoT generation\n", - "{'content': '- Combine initial greetings and the start of the discussion about '\n", - " '\"Red Dead Redemption 2 (RDR2)\" into a summary.\\n'\n", - " '- Summarize the detailed conversation about specific missions and '\n", - " 'characters in \"RDR2\".\\n'\n", - " '- Retain individual entries about \"Helldivers 2\" due to the '\n", - " \"user's direct interaction and game preferences.\\n\"\n", - " '- Summarize discussions around \"Nvidia Drivers\" and \"Linux\" '\n", - " 'compatibility, emphasizing the solution offered.\\n'\n", - " '- Retain the closing conversation as it indicates the end of the '\n", - " 'session. \\n'\n", - " '\\n'\n", - " '\\n'\n", - " '[\\n'\n", - " ' {\\n'\n", - " ' \"role\": \"system\",\\n'\n", - " ' \"name\": \"summary\",\\n'\n", - " ' \"content\": \"Event: The user discussed finishing \\'Red Dead '\n", - " \"Redemption 2' and particularly enjoyed the last mission. They \"\n", - " 'also talked about favorite missions and characters, specifically '\n", - " 'Arthur over Dutch.\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 12,\\n'\n", - " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"im playing helldivers 2. do u know of it\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 13,\\n'\n", - " ' \"role\": \"assistant\",\\n'\n", - " ' \"content\": \"Yes, Helldivers 2! It\\'s a great choice if '\n", - " \"you're into intense co-op action. The game really ramps up with \"\n", - " 'its twin-stick shooter gameplay, and it\\\\u2019s super fun but '\n", - " 'also quite challenging. Working together with teammates to '\n", - " 'complete those missions can get pretty hectic. How are you '\n", - " 'finding the chaos and team dynamics so far?\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 14,\\n'\n", - " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"amazing. my fav build is laser cannon + guard '\n", - " 'dog. what about u\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 15,\\n'\n", - " ' \"role\": \"assistant\",\\n'\n", - " ' \"content\": \"Nice combo! The laser cannon is awesome for '\n", - " 'tearing through those enemy swarms, and the guard dog drone '\n", - " 'really helps in keeping the smaller threats at bay. I personally '\n", - " 'love using the railgun with a shield backpack. It gives a good '\n", - " 'balance of offense and defense, especially when things get really '\n", - " 'chaotic. What\\'s been the toughest mission for you so far?\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 16,\\n'\n", - " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"dude the charger is so difficult to kill.\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 17,\\n'\n", - " ' \"role\": \"assistant\",\\n'\n", - " ' \"content\": \"Yeah, the Charger can be brutal! They really test '\n", - " \"your reflexes and teamwork. It's all about timing and \"\n", - " 'coordination with your team to bring those heavy hitters down. '\n", - " 'Have you tried using more strategic traps or mines? Sometimes '\n", - " 'setting up the right position with static fields can really make '\n", - " 'a difference against them. How do your squadmates handle it?\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 18,\\n'\n", - " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"we just run and gun\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 19,\\n'\n", - " ' \"role\": \"assistant\",\\n'\n", - " ' \"content\": \"Classic strategy! That can definitely be fun, '\n", - " 'especially in a game as intense as Helldivers 2 where things get '\n", - " 'chaotic fast. Keeping on the move helps a ton. Just make sure '\n", - " \"someone's always got your back! Have you guys tried any of the \"\n", - " 'higher difficulty levels yet, or are you sticking to a certain '\n", - " 'comfort zone for now?\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"role\": \"system\",\\n'\n", - " ' \"name\": \"summary\",\\n'\n", - " ' \"content\": \"Event: The user discussed an Nvidia driver issue, '\n", - " 'particularly its incompatibility with Linux, and the assistant '\n", - " 'provided potential solutions and resources for assistance.\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 24,\\n'\n", - " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"yep. see u bye!\"\\n'\n", - " ' },\\n'\n", - " ' {\\n'\n", - " ' \"index\": 25,\\n'\n", - " ' \"role\": \"assistant\",\\n'\n", - " ' \"content\": \"See you, take care! Bye!\"\\n'\n", - " ' }\\n'\n", - " ']\\n',\n", + "{'content': '- Summarize the initial casual greeting between User and '\n", + " 'Assistant.\\n'\n", + " \"- Keep detailed discussion on RDR2, including User's favorite \"\n", + " 'moments and characters, as they directly relate to the entities '\n", + " 'outlined.\\n'\n", + " '- Summarize the transition from RDR2 discussion to Helldivers 2 '\n", + " 'without losing game-specific details.\\n'\n", + " '- Preserve details on Helldivers 2 gameplay strategies mentioned '\n", + " 'by User.\\n'\n", + " \"- Summarize User's mention of work and Nvidia driver issue while \"\n", + " 'retaining the essence of their tech problem.\\n'\n", + " \"- Retain Assistant's advice on Nvidia and Linux compatibility \"\n", + " \"issues, as it's relevant to the User's context.\\n\"\n", + " '- Keep the farewell message brief but intact to maintain the '\n", + " 'conversational closure.',\n", " 'role': 'assistant'}\n", "End CoT generation\n", "Starting chatml generation\n", @@ -1223,7 +1214,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1234,88 +1225,180 @@ " ' {\\n'\n", " ' \"role\": \"system\",\\n'\n", " ' \"name\": \"summary\",\\n'\n", - " ' \"content\": \"Event: The user discussed finishing \\'Red Dead '\n", - " \"Redemption 2' and particularly enjoyed the last mission. They \"\n", - " 'also talked about favorite missions and characters, specifically '\n", - " 'Arthur over Dutch.\"\\n'\n", + " ' \"content\": \"Event: Casual greeting between User and '\n", + " 'Assistant, with User mentioning they recently finished playing '\n", + " 'Red Dead Redemption 2.\"\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 12,\\n'\n", " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"im playing helldivers 2. do u know of it\"\\n'\n", + " ' \"content\": \"i just got done with finishing red dead '\n", + " 'redemption 2 recently. the last mission was so fkng coolll\",\\n'\n", + " ' \"index\": 4\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"assistant\",\\n'\n", + " ' \"content\": \"Oh man, RDR2 is epic! That ending is intense, '\n", + " \"right? What did you think about Arthur's journey throughout the \"\n", + " 'game? Got any favorite moments?\",\\n'\n", + " ' \"index\": 5\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"user\",\\n'\n", + " ' \"content\": \"blood feuds mission was amazing\",\\n'\n", + " ' \"index\": 6\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"assistant\",\\n'\n", + " ' \"content\": \"Absolutely, the \\\\\"Blood Feuds, Ancient and '\n", + " 'Modern\\\\\" mission is a standout! The whole shootout at '\n", + " 'Braithwaite Manor is intense. The atmosphere Rockstar created '\n", + " 'during that mission with the burning building in the background '\n", + " 'is just cinematic perfection. Did you side more with Arthur or '\n", + " 'Dutch throughout the game?\",\\n'\n", + " ' \"index\": 7\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"user\",\\n'\n", + " ' \"content\": \"arthur of course. dutch just kept becoming '\n", + " 'crazier and crazier.\",\\n'\n", + " ' \"index\": 8\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"assistant\",\\n'\n", + " ' \"content\": \"Totally get that. Arthur\\'s character development '\n", + " \"is really something else. He starts questioning Dutch's decisions \"\n", + " 'and looking at things more critically, which adds so much depth '\n", + " \"to his character. Watching Dutch's descent as the gang falls \"\n", + " 'apart is pretty intense. Have you thought about checking out any '\n", + " 'of the side quests or exploring more of the open world now that '\n", + " 'you\\'ve finished the main story?\",\\n'\n", + " ' \"index\": 9\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"user\",\\n'\n", + " ' \"content\": \"oh i\\'ve done all the side quests. the widow '\n", + " 'missions are great but i also loved the bounty missions (where u '\n", + " 'have to talk to gangsters for an author)\",\\n'\n", + " ' \"index\": 10\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"assistant\",\\n'\n", + " ' \"content\": \"Ah, the bounty missions for the author are a '\n", + " 'blast! Hunting down those gunslingers for the book gives you such '\n", + " \"a great tour of the game's diverse characters. And Charlotte's \"\n", + " \"missions, the widow, they're pretty touching, right? It\\\\u2019s \"\n", + " 'nice to see Arthur helping her adapt to wilderness life. Adds a '\n", + " 'softer side to the game amidst all the chaos.\\\\n\\\\nNow that '\n", + " 'you\\'ve conquered RDR2, any other games on your radar?\",\\n'\n", + " ' \"index\": 11\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"user\",\\n'\n", + " ' \"content\": \"im playing helldivers 2. do u know of it\",\\n'\n", + " ' \"index\": 12\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 13,\\n'\n", " ' \"role\": \"assistant\",\\n'\n", " ' \"content\": \"Yes, Helldivers 2! It\\'s a great choice if '\n", " \"you're into intense co-op action. The game really ramps up with \"\n", " 'its twin-stick shooter gameplay, and it\\\\u2019s super fun but '\n", " 'also quite challenging. Working together with teammates to '\n", " 'complete those missions can get pretty hectic. How are you '\n", - " 'finding the chaos and team dynamics so far?\"\\n'\n", + " 'finding the chaos and team dynamics so far?\",\\n'\n", + " ' \"index\": 13\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 14,\\n'\n", " ' \"role\": \"user\",\\n'\n", " ' \"content\": \"amazing. my fav build is laser cannon + guard '\n", - " 'dog. what about u\"\\n'\n", + " 'dog. what about u\",\\n'\n", + " ' \"index\": 14\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 15,\\n'\n", " ' \"role\": \"assistant\",\\n'\n", " ' \"content\": \"Nice combo! The laser cannon is awesome for '\n", " 'tearing through those enemy swarms, and the guard dog drone '\n", " 'really helps in keeping the smaller threats at bay. I personally '\n", " 'love using the railgun with a shield backpack. It gives a good '\n", " 'balance of offense and defense, especially when things get really '\n", - " 'chaotic. What\\'s been the toughest mission for you so far?\"\\n'\n", + " 'chaotic. What\\'s been the toughest mission for you so far?\",\\n'\n", + " ' \"index\": 15\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 16,\\n'\n", " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"dude the charger is so difficult to kill.\"\\n'\n", + " ' \"content\": \"dude the charger is so difficult to kill.\",\\n'\n", + " ' \"index\": 16\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 17,\\n'\n", " ' \"role\": \"assistant\",\\n'\n", " ' \"content\": \"Yeah, the Charger can be brutal! They really test '\n", " \"your reflexes and teamwork. It's all about timing and \"\n", " 'coordination with your team to bring those heavy hitters down. '\n", " 'Have you tried using more strategic traps or mines? Sometimes '\n", " 'setting up the right position with static fields can really make '\n", - " 'a difference against them. How do your squadmates handle it?\"\\n'\n", + " 'a difference against them. How do your squadmates handle it?\",\\n'\n", + " ' \"index\": 17\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 18,\\n'\n", " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"we just run and gun\"\\n'\n", + " ' \"content\": \"we just run and gun\",\\n'\n", + " ' \"index\": 18\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 19,\\n'\n", " ' \"role\": \"assistant\",\\n'\n", " ' \"content\": \"Classic strategy! That can definitely be fun, '\n", " 'especially in a game as intense as Helldivers 2 where things get '\n", " 'chaotic fast. Keeping on the move helps a ton. Just make sure '\n", " \"someone's always got your back! Have you guys tried any of the \"\n", " 'higher difficulty levels yet, or are you sticking to a certain '\n", - " 'comfort zone for now?\"\\n'\n", + " 'comfort zone for now?\",\\n'\n", + " ' \"index\": 19\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"role\": \"system\",\\n'\n", - " ' \"name\": \"summary\",\\n'\n", - " ' \"content\": \"Event: The user discussed an Nvidia driver issue, '\n", - " 'particularly its incompatibility with Linux, and the assistant '\n", - " 'provided potential solutions and resources for assistance.\"\\n'\n", + " ' \"role\": \"user\",\\n'\n", + " ' \"content\": \"i think i have to go work soon. also have this '\n", + " 'nvidia driver issue that\\'s bugging me\",\\n'\n", + " ' \"index\": 20\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"assistant\",\\n'\n", + " ' \"content\": \"Ah, bummer about the driver issue \\\\u2014 it\\'s '\n", + " 'annoying when tech stuff gets in the way of gaming. Maybe try '\n", + " \"doing a clean install of the drivers if you haven't already? It \"\n", + " 'can sometimes clear up persistent issues.\\\\n\\\\nAlso, good luck '\n", + " \"with work! Hopefully, you'll get some time later to sort out the \"\n", + " 'driver thing and jump back into some gaming. Let me know how it '\n", + " \"goes, and if you need more gaming chats or tech tips, I'm \"\n", + " 'here!\",\\n'\n", + " ' \"index\": 21\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"user\",\\n'\n", + " ' \"content\": \"nvidia and linux don\\'t go well together\",\\n'\n", + " ' \"index\": 22\\n'\n", + " ' },\\n'\n", + " ' {\\n'\n", + " ' \"role\": \"assistant\",\\n'\n", + " ' \"content\": \"That\\'s true, Nvidia drivers can be tricky to '\n", + " 'handle on Linux due to compatibility issues sometimes. You might '\n", + " 'want to check out the latest Nvidia driver from their official '\n", + " 'site or a stable version known to work well with your specific '\n", + " 'Linux distribution. Using proprietary drivers instead of Nouveau '\n", + " 'could also potentially solve a lot of issues. Additionally, '\n", + " 'forums and community support boards like those on Ubuntu, Arch, '\n", + " 'or even broader communities like Reddit\\\\u2019s r/linux_gaming '\n", + " 'can be really helpful.\\\\n\\\\nHope that helps, and your driver woes '\n", + " 'get sorted soon so you can enjoy your gaming hassle-free!\",\\n'\n", + " ' \"index\": 23\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 24,\\n'\n", " ' \"role\": \"user\",\\n'\n", - " ' \"content\": \"yep. see u bye!\"\\n'\n", + " ' \"content\": \"yep. see u bye!\",\\n'\n", + " ' \"index\": 24\\n'\n", " ' },\\n'\n", " ' {\\n'\n", - " ' \"index\": 25,\\n'\n", " ' \"role\": \"assistant\",\\n'\n", - " ' \"content\": \"See you, take care! Bye!\"\\n'\n", + " ' \"content\": \"See you, take care! Bye!\",\\n'\n", + " ' \"index\": 25\\n'\n", " ' }\\n'\n", " ']',\n", " 'role': 'assistant'}\n" @@ -1325,11 +1408,18 @@ "source": [ "pprint(summarized_messages)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "julep", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -1343,7 +1433,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.14" + "version": "3.12.1" } }, "nbformat": 4, diff --git a/agents-api/notebooks/RecSum-experiments.ipynb b/agents-api/notebooks/RecSum-experiments.ipynb index 43e6cfe33..466c7e6cb 100644 --- a/agents-api/notebooks/RecSum-experiments.ipynb +++ b/agents-api/notebooks/RecSum-experiments.ipynb @@ -1,45 +1,92 @@ { "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "3127f8fc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: openai in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.51.0)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.27.2)\n", + "Requirement already satisfied: jiter<1,>=0.4.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (0.5.0)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (2.9.2)\n", + "Requirement already satisfied: sniffio in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (1.3.1)\n", + "Requirement already satisfied: tqdm>4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.66.5)\n", + "Requirement already satisfied: typing-extensions<5,>=4.11 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from openai) (4.12.2)\n", + "Requirement already satisfied: idna>=2.8 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from anyio<5,>=3.5.0->openai) (3.10)\n", + "Requirement already satisfied: certifi in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpx<1,>=0.23.0->openai) (1.0.6)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai) (0.14.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->openai) (2.23.4)\n" + ] + } + ], + "source": [ + "! pip install openai" + ] + }, { "cell_type": "code", "execution_count": 2, + "id": "96efe2be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: python-dotenv in /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages (1.0.1)\n" + ] + } + ], + "source": [ + "! pip install python-dotenv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "id": "b03a4636-d57e-42e9-8a06-fdb7c6803708", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "True" + "False" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from dotenv import load_dotenv\n", + "\n", "load_dotenv(\"../../.env\")" ] }, - { - "cell_type": "code", - "execution_count": 3, - "id": "eb80a352-ad21-423c-9284-32b21d271eba", - "metadata": {}, - "outputs": [], - "source": [ - "from openai import Client" - ] - }, { "cell_type": "code", "execution_count": 4, - "id": "4619f484-55f6-4122-8e26-27ec9e3506d5", + "id": "eb80a352-ad21-423c-9284-32b21d271eba", "metadata": {}, "outputs": [], "source": [ - "client = Client()" + "import openai\n", + "from openai import OpenAI\n", + "\n", + "api_key = \"YOUR_OPENAI_API_KEY\"\n", + "\n", + "openai.api_key = api_key\n", + "client = OpenAI(api_key=api_key)" ] }, { @@ -56,7 +103,9 @@ "}\n", "\n", "user = lambda content, name=None: make_chatml(role=\"user\", content=content, name=name)\n", - "assistant = lambda content, name=None: make_chatml(role=\"assistant\", content=content, name=name)\n", + "assistant = lambda content, name=None: make_chatml(\n", + " role=\"assistant\", content=content, name=name\n", + ")\n", "system = lambda content, name=None: make_chatml(content, name=name)\n", "thought = lambda content: system(content, name=\"thought\")\n", "information = lambda content: system(content, name=\"information\")\n", @@ -76,7 +125,13 @@ " # ((chat_session, 0): (chat_summaries, 1)),\n", "]\n", "\n", - "generate = lambda history, model=\"gpt-3.5-turbo\", **kwargs: client.chat.completions.create(messages=history, model=model, **kwargs).choices[0].message.__dict__" + "generate = (\n", + " lambda history, model=\"gpt-3.5-turbo\", **kwargs: client.chat.completions.create(\n", + " messages=history, model=model, **kwargs\n", + " )\n", + " .choices[0]\n", + " .message.__dict__\n", + ")" ] }, { @@ -88,13 +143,14 @@ "source": [ "from pprint import pprint\n", "\n", + "\n", "def chat():\n", - " while (user_input := input('You: ')) != \"bye\":\n", + " while (user_input := input(\"You: \").lower()) != \"bye\": \n", " chat_session.append(user(user_input))\n", - " \n", + "\n", " result = generate(chat_session)\n", " print(f\"GPT: {result['content']}\")\n", - " \n", + "\n", " chat_session.append(make_chatml(**result))" ] }, @@ -106,23 +162,19 @@ "outputs": [], "source": [ "import json\n", + "\n", "example_chat = [\n", " {\n", " \"role\": \"system\",\n", " \"content\": \"just have a casual chat with a friend friend\",\n", " \"index\": 0,\n", " },\n", - " {\n", - " \"role\": \"user\",\n", - " \"content\": \"yo\",\n", - " \"index\": 1,\n", - " \"name\": \"Camille\"\n", - " },\n", + " {\"role\": \"user\", \"content\": \"yo\", \"index\": 1, \"name\": \"Camille\"},\n", " {\n", " \"role\": \"assistant\",\n", " \"content\": \"Hey, how's it going?\",\n", " \"index\": 2,\n", - " \"name\": \"JaneBot\"\n", + " \"name\": \"JaneBot\",\n", " },\n", " {\n", " \"role\": \"user\",\n", @@ -221,7 +273,7 @@ " },\n", " {\n", " \"role\": \"assistant\",\n", - " \"content\": \"Based on the themes of starting anew, embracing failure, and the journey from zero to one, I would guess that the title of this story is \\\"Back to One.\\\" It seems to capture the essence of the protagonist's experience and mindset throughout the story. How did I do?\",\n", + " \"content\": 'Based on the themes of starting anew, embracing failure, and the journey from zero to one, I would guess that the title of this story is \"Back to One.\" It seems to capture the essence of the protagonist\\'s experience and mindset throughout the story. How did I do?',\n", " \"index\": 22,\n", " },\n", " {\n", @@ -283,7 +335,7 @@ " \"role\": \"assistant\",\n", " \"content\": \"From my interactions with you so far, I can tell that you have a great sense of humor and enjoy playful banter. You seem open to random and fun conversations, and you're not afraid to keep things interesting with unexpected twists and turns.\\n\\nYour creativity shines through in the way you approach different topics, and you have a knack for surprising me with your responses. You're also quite adept at changing the direction of the conversation while maintaining a light and friendly tone.\\n\\nOverall, chatting with you has been enjoyable and entertaining, and I appreciate the lighthearted and casual vibe you bring to our interactions. I look forward to more fun conversations with you in the future!\",\n", " \"index\": 34,\n", - " }\n", + " },\n", "]" ] }, @@ -316,17 +368,23 @@ "2. JaneBot (The assistant): Engages in lighthearted conversation and tries to guess user's thoughts.\n", "3. Elon Musk: Polarizing tech and space industry figure.\n", "4. Bananas: User has a tattoo of one on their arm.\"\"\"),\n", - " summary(\"Event: Camille says hi to JaneBot and they reply that they are working and trying to stay busy.\"),\n", - " summary(\"Event: They discuss Elon Musk and agree that he can be a polarizing personality.\"),\n", + " summary(\n", + " \"Event: Camille says hi to JaneBot and they reply that they are working and trying to stay busy.\"\n", + " ),\n", + " summary(\n", + " \"Event: They discuss Elon Musk and agree that he can be a polarizing personality.\"\n", + " ),\n", " *example_chat[9:17],\n", " summary(\"Event: Camille appreciates JaneBot's sense of humor.\"),\n", " *example_chat[21:23],\n", - " summary('Event: Camille asks JaneBot to play \"What number I am thinking of?\" game but she keeps saying \"no\" to all guesses which JaneBot finds really funny.'),\n", + " summary(\n", + " 'Event: Camille asks JaneBot to play \"What number I am thinking of?\" game but she keeps saying \"no\" to all guesses which JaneBot finds really funny.'\n", + " ),\n", " example_chat[33],\n", " summary(\"\"\"Event: JaneBot wrote an essay about Camille. Summary of the essay:\n", "1. You have a great sense of humor and enjoy playful, lighthearted banter in conversations.\n", "2. Your creativity is evident in how you approach topics in unexpected ways and keep conversations interesting.\n", - "3. Chatting with you is enjoyable due to the casual, friendly tone you bring to interactions.\"\"\")\n", + "3. Chatting with you is enjoyable due to the casual, friendly tone you bring to interactions.\"\"\"),\n", "]" ] }, @@ -350,63 +408,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "You: hey\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GPT: Hey! How are you doing?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You: good, how about you?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GPT: I'm doing well, thank you for asking. Is there anything on your mind that you'd like to talk about or get some advice on?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You: no why do you say that? did I sound troubled?\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GPT: Not at all! I just thought I'd check in and see if there's anything on your mind that you might need some advice or someone to talk to about. But if you're doing well, that's great to hear!\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You: no I didnt say I was ok just that I hadnt thought of asking for advice yet\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GPT: Ah, I see. Well, I'm here whenever you need a listening ear or some advice. Just let me know how I can help!\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You: bye\n" + "GPT: Hey there! I just wanted to remind you that it's important to take care of yourself both mentally and physically. Make sure to prioritize self-care and engage in activities that bring you joy and peace. Remember, it's okay to say no to things that don't align with your values or make you uncomfortable. Trust your instincts and surround yourself with positive influences. You deserve to be happy and fulfilled, so don't be afraid to pursue your dreams and make choices that are best for you. If you ever need a listening ear or some guidance, I'm always here for you!\n", + "GPT: I'm just a program, so I don't have feelings like humans do, but I'm here and ready to help you with anything you need. How can I support you today?\n" ] } ], @@ -423,13 +426,14 @@ "source": [ "# Load test chat from json file\n", "import json\n", - "with open(\"./test-chat.json\", 'r') as f:\n", + "\n", + "with open(\"./test-chat.json\", \"r\") as f:\n", " chat_session = json.load(f)" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 13, "id": "95431b29-73e2-4954-b6fc-1c8814a9249f", "metadata": {}, "outputs": [], @@ -439,31 +443,30 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "1eaabfe2-f399-428b-84d2-ed8c237b7d3d", "metadata": {}, "outputs": [], "source": [ - "def get_leaf_nodes(chat_session=chat_session, chat_summaries=chat_summaries, session_summary_map=session_summary_map):\n", + "def get_leaf_nodes(\n", + " chat_session=chat_session,\n", + " chat_summaries=chat_summaries,\n", + " session_summary_map=session_summary_map,\n", + "):\n", " all_messages = [*chat_session, *chat_summaries]\n", "\n", " # Collect non-leaf nodes\n", - " non_leaf_nodes = [\n", - " source[idx]\n", - " for (source, idx), _ in session_summary_map\n", - " ]\n", - " \n", + " non_leaf_nodes = [source[idx] for (source, idx), _ in session_summary_map]\n", + "\n", " # Remove non-leaf nodes\n", - " remaining = [\n", - " msg for msg in all_messages if msg not in non_leaf_nodes\n", - " ]\n", + " remaining = [msg for msg in all_messages if msg not in non_leaf_nodes]\n", "\n", " return remaining" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "2a726b3c-493c-4df5-81a7-6b7b109c222e", "metadata": {}, "outputs": [], @@ -492,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 16, "id": "6323b7b2-0aaf-4cea-896b-0c887054ce6e", "metadata": {}, "outputs": [], @@ -501,16 +504,17 @@ "from pprint import pprint\n", "import time\n", "\n", + "\n", "def compactify(chat_session=chat_session):\n", " start = time.time()\n", " pprint(start)\n", - " \n", + "\n", " _sys_msg, *history_to_compact = get_leaf_nodes(chat_session=chat_session)\n", "\n", " history_to_compact = [\n", - " {\"index\": i+1, **msg} for i, msg in enumerate(history_to_compact)\n", + " {\"index\": i + 1, **msg} for i, msg in enumerate(history_to_compact)\n", " ]\n", - " \n", + "\n", " system_prompt = f\"\"\"\\\n", "You are given a session history of a chat between a user and a gpt-4-turbo language model created through the\n", "openai api.\n", @@ -552,8 +556,8 @@ "\n", " pprint(time.time() - start)\n", " print(\"Starting CoT generation\")\n", - " cot_result = generate(messages, model=\"gpt-4-turbo\", stop=['=3.2.0)", "brotlicffi"] @@ -149,13 +149,13 @@ files = [ [[package]] name = "anyio" -version = "4.5.0" +version = "4.6.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.5.0-py3-none-any.whl", hash = "sha256:fdeb095b7cc5a5563175eedd926ec4ae55413bb4be5770c424af0ba46ccb4a78"}, - {file = "anyio-4.5.0.tar.gz", hash = "sha256:c5a275fe5ca0afd788001f58fca1e69e29ce706d746e317d660e21f70c530ef9"}, + {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, + {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, ] [package.dependencies] @@ -180,13 +180,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.5.0" +version = "3.5.1" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.5.0-py3-none-any.whl", hash = "sha256:d4bcf3ff544f51e16e54228a7ac7f486ed70ebf2ecfe49a63a91171c76bf029b"}, - {file = "argcomplete-3.5.0.tar.gz", hash = "sha256:4349400469dccfb7950bb60334a680c58d88699bff6159df61251878dc6bf74b"}, + {file = "argcomplete-3.5.1-py3-none-any.whl", hash = "sha256:1a1d148bdaa3e3b93454900163403df41448a248af01b6e849edc5ac08e6c363"}, + {file = "argcomplete-3.5.1.tar.gz", hash = "sha256:eb1ee355aa2557bd3d0145de7b06b2a45b0ce461e1e7813f5d066039ab4177b4"}, ] [package.extras] @@ -371,33 +371,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.8.0" +version = "24.10.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, - {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, - {file = "black-24.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42"}, - {file = "black-24.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a"}, - {file = "black-24.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"}, - {file = "black-24.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af"}, - {file = "black-24.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4"}, - {file = "black-24.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af"}, - {file = "black-24.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368"}, - {file = "black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed"}, - {file = "black-24.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018"}, - {file = "black-24.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2"}, - {file = "black-24.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd"}, - {file = "black-24.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2"}, - {file = "black-24.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e"}, - {file = "black-24.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920"}, - {file = "black-24.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c"}, - {file = "black-24.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e"}, - {file = "black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47"}, - {file = "black-24.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb"}, - {file = "black-24.8.0-py3-none-any.whl", hash = "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed"}, - {file = "black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f"}, + {file = "black-24.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812"}, + {file = "black-24.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea"}, + {file = "black-24.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f"}, + {file = "black-24.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e"}, + {file = "black-24.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad"}, + {file = "black-24.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50"}, + {file = "black-24.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392"}, + {file = "black-24.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175"}, + {file = "black-24.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3"}, + {file = "black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65"}, + {file = "black-24.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f"}, + {file = "black-24.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8"}, + {file = "black-24.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981"}, + {file = "black-24.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b"}, + {file = "black-24.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2"}, + {file = "black-24.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b"}, + {file = "black-24.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd"}, + {file = "black-24.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f"}, + {file = "black-24.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800"}, + {file = "black-24.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7"}, + {file = "black-24.10.0-py3-none-any.whl", hash = "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d"}, + {file = "black-24.10.0.tar.gz", hash = "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875"}, ] [package.dependencies] @@ -409,7 +409,7 @@ platformdirs = ">=2" [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.10)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -523,101 +523,116 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -762,7 +777,10 @@ inflect = ">=4.1.0,<6.0" isort = ">=4.3.21,<6.0" jinja2 = ">=2.10.1,<4.0" packaging = "*" -pydantic = {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""} +pydantic = [ + {version = ">=1.10.0,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.12\" and python_version < \"4.0\""}, + {version = ">=1.10.0,<2.4.0 || >2.4.0,<3.0", extras = ["email"], markers = "python_version >= \"3.11\" and python_version < \"4.0\""}, +] pyyaml = ">=6.0.1" [package.extras] @@ -773,33 +791,37 @@ validation = ["openapi-spec-validator (>=0.2.8,<0.7.0)", "prance (>=0.18.2)"] [[package]] name = "debugpy" -version = "1.8.5" +version = "1.8.7" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, - {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, - {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, - {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, - {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, - {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, - {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, - {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, - {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, - {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, - {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, - {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, - {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, - {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, - {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, - {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, - {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, - {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, - {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, - {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, - {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, - {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, + {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, + {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, + {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, + {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, + {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, + {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, + {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, + {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, + {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, + {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, + {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, + {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, + {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, + {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, + {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, + {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, + {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, + {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, + {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, + {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, + {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, + {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, + {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, + {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, + {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, + {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, ] [[package]] @@ -837,21 +859,21 @@ files = [ [[package]] name = "dnspython" -version = "2.6.1" +version = "2.7.0" description = "DNS toolkit" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, - {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, ] [package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] -dnssec = ["cryptography (>=41)"] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] -doq = ["aioquic (>=0.9.25)"] -idna = ["idna (>=3.6)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] trio = ["trio (>=0.23)"] wmi = ["wmi (>=1.5.1)"] @@ -1189,13 +1211,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.6" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, + {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, ] [package.dependencies] @@ -1206,7 +1228,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" @@ -1235,13 +1257,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "huggingface-hub" -version = "0.25.0" +version = "0.25.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.25.0-py3-none-any.whl", hash = "sha256:e2f357b35d72d5012cfd127108c4e14abcd61ba4ebc90a5a374dc2456cb34e12"}, - {file = "huggingface_hub-0.25.0.tar.gz", hash = "sha256:fb5fbe6c12fcd99d187ec7db95db9110fb1a20505f23040a5449a717c1a0db4d"}, + {file = "huggingface_hub-0.25.2-py3-none-any.whl", hash = "sha256:1897caf88ce7f97fe0110603d8f66ac264e3ba6accdf30cd66cc0fed5282ad25"}, + {file = "huggingface_hub-0.25.2.tar.gz", hash = "sha256:a1014ea111a5f40ccd23f7f7ba8ac46e20fa3b658ced1f86a00c75c06ec6423c"}, ] [package.dependencies] @@ -1379,13 +1401,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.27.0" +version = "8.28.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c"}, - {file = "ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e"}, + {file = "ipython-8.28.0-py3-none-any.whl", hash = "sha256:530ef1e7bb693724d3cdc37287c80b07ad9b25986c007a53aa1857272dac3f35"}, + {file = "ipython-8.28.0.tar.gz", hash = "sha256:0d0d15ca1e01faeb868ef56bc7ee5a0de5bd66885735682e8a322ae289a13d1a"}, ] [package.dependencies] @@ -1398,7 +1420,6 @@ prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5.13.0" -typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] @@ -1514,72 +1535,84 @@ Jinja2 = ">=2.2" [[package]] name = "jiter" -version = "0.5.0" +version = "0.6.1" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, - {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, - {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, - {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, - {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, - {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, - {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, - {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, - {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, - {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, - {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, - {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, - {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, + {file = "jiter-0.6.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d08510593cb57296851080018006dfc394070178d238b767b1879dc1013b106c"}, + {file = "jiter-0.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adef59d5e2394ebbad13b7ed5e0306cceb1df92e2de688824232a91588e77aa7"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e02f7a27f2bcc15b7d455c9df05df8ffffcc596a2a541eeda9a3110326e7a3"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed69a7971d67b08f152c17c638f0e8c2aa207e9dd3a5fcd3cba294d39b5a8d2d"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2019d966e98f7c6df24b3b8363998575f47d26471bfb14aade37630fae836a1"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36c0b51a285b68311e207a76c385650322734c8717d16c2eb8af75c9d69506e7"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:220e0963b4fb507c525c8f58cde3da6b1be0bfddb7ffd6798fb8f2531226cdb1"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa25c7a9bf7875a141182b9c95aed487add635da01942ef7ca726e42a0c09058"}, + {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e90552109ca8ccd07f47ca99c8a1509ced93920d271bb81780a973279974c5ab"}, + {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67723a011964971864e0b484b0ecfee6a14de1533cff7ffd71189e92103b38a8"}, + {file = "jiter-0.6.1-cp310-none-win32.whl", hash = "sha256:33af2b7d2bf310fdfec2da0177eab2fedab8679d1538d5b86a633ebfbbac4edd"}, + {file = "jiter-0.6.1-cp310-none-win_amd64.whl", hash = "sha256:7cea41c4c673353799906d940eee8f2d8fd1d9561d734aa921ae0f75cb9732f4"}, + {file = "jiter-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b03c24e7da7e75b170c7b2b172d9c5e463aa4b5c95696a368d52c295b3f6847f"}, + {file = "jiter-0.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:47fee1be677b25d0ef79d687e238dc6ac91a8e553e1a68d0839f38c69e0ee491"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0d2f6e01a8a0fb0eab6d0e469058dab2be46ff3139ed2d1543475b5a1d8e7"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b809e39e342c346df454b29bfcc7bca3d957f5d7b60e33dae42b0e5ec13e027"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9ac7c2f092f231f5620bef23ce2e530bd218fc046098747cc390b21b8738a7a"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e51a2d80d5fe0ffb10ed2c82b6004458be4a3f2b9c7d09ed85baa2fbf033f54b"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3343d4706a2b7140e8bd49b6c8b0a82abf9194b3f0f5925a78fc69359f8fc33c"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82521000d18c71e41c96960cb36e915a357bc83d63a8bed63154b89d95d05ad1"}, + {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c843e7c1633470708a3987e8ce617ee2979ee18542d6eb25ae92861af3f1d62"}, + {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a2e861658c3fe849efc39b06ebb98d042e4a4c51a8d7d1c3ddc3b1ea091d0784"}, + {file = "jiter-0.6.1-cp311-none-win32.whl", hash = "sha256:7d72fc86474862c9c6d1f87b921b70c362f2b7e8b2e3c798bb7d58e419a6bc0f"}, + {file = "jiter-0.6.1-cp311-none-win_amd64.whl", hash = "sha256:3e36a320634f33a07794bb15b8da995dccb94f944d298c8cfe2bd99b1b8a574a"}, + {file = "jiter-0.6.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1fad93654d5a7dcce0809aff66e883c98e2618b86656aeb2129db2cd6f26f867"}, + {file = "jiter-0.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4e6e340e8cd92edab7f6a3a904dbbc8137e7f4b347c49a27da9814015cc0420c"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:691352e5653af84ed71763c3c427cff05e4d658c508172e01e9c956dfe004aba"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:defee3949313c1f5b55e18be45089970cdb936eb2a0063f5020c4185db1b63c9"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26d2bdd5da097e624081c6b5d416d3ee73e5b13f1703bcdadbb1881f0caa1933"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18aa9d1626b61c0734b973ed7088f8a3d690d0b7f5384a5270cd04f4d9f26c86"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a3567c8228afa5ddcce950631c6b17397ed178003dc9ee7e567c4c4dcae9fa0"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c0507131c922defe3f04c527d6838932fcdfd69facebafd7d3574fa3395314"}, + {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:540fcb224d7dc1bcf82f90f2ffb652df96f2851c031adca3c8741cb91877143b"}, + {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e7b75436d4fa2032b2530ad989e4cb0ca74c655975e3ff49f91a1a3d7f4e1df2"}, + {file = "jiter-0.6.1-cp312-none-win32.whl", hash = "sha256:883d2ced7c21bf06874fdeecab15014c1c6d82216765ca6deef08e335fa719e0"}, + {file = "jiter-0.6.1-cp312-none-win_amd64.whl", hash = "sha256:91e63273563401aadc6c52cca64a7921c50b29372441adc104127b910e98a5b6"}, + {file = "jiter-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:852508a54fe3228432e56019da8b69208ea622a3069458252f725d634e955b31"}, + {file = "jiter-0.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f491cc69ff44e5a1e8bc6bf2b94c1f98d179e1aaf4a554493c171a5b2316b701"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc56c8f0b2a28ad4d8047f3ae62d25d0e9ae01b99940ec0283263a04724de1f3"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51b58f7a0d9e084a43b28b23da2b09fc5e8df6aa2b6a27de43f991293cab85fd"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f79ce15099154c90ef900d69c6b4c686b64dfe23b0114e0971f2fecd306ec6c"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03a025b52009f47e53ea619175d17e4ded7c035c6fbd44935cb3ada11e1fd592"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74a8d93718137c021d9295248a87c2f9fdc0dcafead12d2930bc459ad40f885"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40b03b75f903975f68199fc4ec73d546150919cb7e534f3b51e727c4d6ccca5a"}, + {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:825651a3f04cf92a661d22cad61fc913400e33aa89b3e3ad9a6aa9dc8a1f5a71"}, + {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:928bf25eb69ddb292ab8177fe69d3fbf76c7feab5fce1c09265a7dccf25d3991"}, + {file = "jiter-0.6.1-cp313-none-win32.whl", hash = "sha256:352cd24121e80d3d053fab1cc9806258cad27c53cad99b7a3cac57cf934b12e4"}, + {file = "jiter-0.6.1-cp313-none-win_amd64.whl", hash = "sha256:be7503dd6f4bf02c2a9bacb5cc9335bc59132e7eee9d3e931b13d76fd80d7fda"}, + {file = "jiter-0.6.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:31d8e00e1fb4c277df8ab6f31a671f509ebc791a80e5c61fdc6bc8696aaa297c"}, + {file = "jiter-0.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77c296d65003cd7ee5d7b0965f6acbe6cffaf9d1fa420ea751f60ef24e85fed5"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeeb0c0325ef96c12a48ea7e23e2e86fe4838e6e0a995f464cf4c79fa791ceeb"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a31c6fcbe7d6c25d6f1cc6bb1cba576251d32795d09c09961174fe461a1fb5bd"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59e2b37f3b9401fc9e619f4d4badcab2e8643a721838bcf695c2318a0475ae42"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bae5ae4853cb9644144e9d0755854ce5108d470d31541d83f70ca7ecdc2d1637"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df588e9c830b72d8db1dd7d0175af6706b0904f682ea9b1ca8b46028e54d6e9"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15f8395e835cf561c85c1adee72d899abf2733d9df72e9798e6d667c9b5c1f30"}, + {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a99d4e0b5fc3b05ea732d67eb2092fe894e95a90e6e413f2ea91387e228a307"}, + {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a311df1fa6be0ccd64c12abcd85458383d96e542531bafbfc0a16ff6feda588f"}, + {file = "jiter-0.6.1-cp38-none-win32.whl", hash = "sha256:81116a6c272a11347b199f0e16b6bd63f4c9d9b52bc108991397dd80d3c78aba"}, + {file = "jiter-0.6.1-cp38-none-win_amd64.whl", hash = "sha256:13f9084e3e871a7c0b6e710db54444088b1dd9fbefa54d449b630d5e73bb95d0"}, + {file = "jiter-0.6.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f1c53615fcfec3b11527c08d19cff6bc870da567ce4e57676c059a3102d3a082"}, + {file = "jiter-0.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f791b6a4da23238c17a81f44f5b55d08a420c5692c1fda84e301a4b036744eb1"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c97e90fec2da1d5f68ef121444c2c4fa72eabf3240829ad95cf6bbeca42a301"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cbc1a66b4e41511209e97a2866898733c0110b7245791ac604117b7fb3fedb7"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e85f9e12cd8418ab10e1fcf0e335ae5bb3da26c4d13a0fd9e6a17a674783b6"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08be33db6dcc374c9cc19d3633af5e47961a7b10d4c61710bd39e48d52a35824"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:677be9550004f5e010d673d3b2a2b815a8ea07a71484a57d3f85dde7f14cf132"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8bd065be46c2eecc328e419d6557bbc37844c88bb07b7a8d2d6c91c7c4dedc9"}, + {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bd95375ce3609ec079a97c5d165afdd25693302c071ca60c7ae1cf826eb32022"}, + {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db459ed22d0208940d87f614e1f0ea5a946d29a3cfef71f7e1aab59b6c6b2afb"}, + {file = "jiter-0.6.1-cp39-none-win32.whl", hash = "sha256:d71c962f0971347bd552940ab96aa42ceefcd51b88c4ced8a27398182efa8d80"}, + {file = "jiter-0.6.1-cp39-none-win_amd64.whl", hash = "sha256:d465db62d2d10b489b7e7a33027c4ae3a64374425d757e963f86df5b5f2e7fc5"}, + {file = "jiter-0.6.1.tar.gz", hash = "sha256:e19cd21221fc139fb032e4112986656cb2739e9fe6d84c13956ab30ccc7d4449"}, ] [[package]] @@ -1635,18 +1668,37 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.12.1" +version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] [package.dependencies] referencing = ">=0.31.0" +[[package]] +name = "julep" +version = "1.16.0" +description = "The official Python library for the julep API" +optional = false +python-versions = ">=3.7" +files = [ + {file = "julep-1.16.0-py3-none-any.whl", hash = "sha256:db84751b45b618bb3793809da87b745c05ee2a2330e819c394427d8a68d1f26b"}, + {file = "julep-1.16.0.tar.gz", hash = "sha256:776f8b86f8672bc98ade814ca89a505a566897297bc4dd0292ecfd35bfd67ca7"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +typing-extensions = ">=4.7,<5" + [[package]] name = "jupyter-client" version = "8.6.3" @@ -1865,53 +1917,59 @@ files = [ [[package]] name = "libcst" -version = "1.4.0" -description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.12 programs." +version = "1.5.0" +description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.13 programs." optional = false python-versions = ">=3.9" files = [ - {file = "libcst-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:279b54568ea1f25add50ea4ba3d76d4f5835500c82f24d54daae4c5095b986aa"}, - {file = "libcst-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3401dae41fe24565387a65baee3887e31a44e3e58066b0250bc3f3ccf85b1b5a"}, - {file = "libcst-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1989fa12d3cd79118ebd29ebe2a6976d23d509b1a4226bc3d66fcb7cb50bd5d"}, - {file = "libcst-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addc6d585141a7677591868886f6bda0577529401a59d210aa8112114340e129"}, - {file = "libcst-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17d71001cb25e94cfe8c3d997095741a8c4aa7a6d234c0f972bc42818c88dfaf"}, - {file = "libcst-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:2d47de16d105e7dd5f4e01a428d9f4dc1e71efd74f79766daf54528ce37f23c3"}, - {file = "libcst-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6227562fc5c9c1efd15dfe90b0971ae254461b8b6b23c1b617139b6003de1c1"}, - {file = "libcst-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3399e6c95df89921511b44d8c5bf6a75bcbc2d51f1f6429763609ba005c10f6b"}, - {file = "libcst-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48601e3e590e2d6a7ab8c019cf3937c70511a78d778ab3333764531253acdb33"}, - {file = "libcst-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42797309bb725f0f000510d5463175ccd7155395f09b5e7723971b0007a976d"}, - {file = "libcst-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb4e42ea107a37bff7f9fdbee9532d39f9ea77b89caa5c5112b37057b12e0838"}, - {file = "libcst-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:9d0cc3c5a2a51fa7e1d579a828c0a2e46b2170024fd8b1a0691c8a52f3abb2d9"}, - {file = "libcst-1.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7ece51d935bc9bf60b528473d2e5cc67cbb88e2f8146297e40ee2c7d80be6f13"}, - {file = "libcst-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:81653dea1cdfa4c6520a7c5ffb95fa4d220cbd242e446c7a06d42d8636bfcbba"}, - {file = "libcst-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6abce0e66bba2babfadc20530fd3688f672d565674336595b4623cd800b91ef"}, - {file = "libcst-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5da9d7dc83801aba3b8d911f82dc1a375db0d508318bad79d9fb245374afe068"}, - {file = "libcst-1.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c54aa66c86d8ece9c93156a2cf5ca512b0dce40142fe9e072c86af2bf892411"}, - {file = "libcst-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:62e2682ee1567b6a89c91853865372bf34f178bfd237853d84df2b87b446e654"}, - {file = "libcst-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b8ecdba8934632b4dadacb666cd3816627a6ead831b806336972ccc4ba7ca0e9"}, - {file = "libcst-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8e54c777b8d27339b70f304d16fc8bc8674ef1bd34ed05ea874bf4921eb5a313"}, - {file = "libcst-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:061d6855ef30efe38b8a292b7e5d57c8e820e71fc9ec9846678b60a934b53bbb"}, - {file = "libcst-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb0abf627ee14903d05d0ad9b2c6865f1b21eb4081e2c7bea1033f85db2b8bae"}, - {file = "libcst-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d024f44059a853b4b852cfc04fec33e346659d851371e46fc8e7c19de24d3da9"}, - {file = "libcst-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3c6a8faab9da48c5b371557d0999b4ca51f4f2cbd37ee8c2c4df0ac01c781465"}, - {file = "libcst-1.4.0.tar.gz", hash = "sha256:449e0b16604f054fa7f27c3ffe86ea7ef6c409836fe68fe4e752a1894175db00"}, + {file = "libcst-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:23d0e07fd3ed11480f8993a1e99d58a45f914a711b14f858b8db08ae861a8a34"}, + {file = "libcst-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d92c5ae2e2dc9356ad7e3d05077d9b7e5065423e45788fd86729c88729e45c6e"}, + {file = "libcst-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96adc45e96476350df6b8a5ddbb1e1d6a83a7eb3f13087e52eb7cd2f9b65bcc7"}, + {file = "libcst-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5978fd60c66794bb60d037b2e6427ea52d032636e84afce32b0f04e1cf500a"}, + {file = "libcst-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6502aeb11412afc759036160c686be1107eb5a4466db56b207c786b9b4da7c4"}, + {file = "libcst-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9cccfc0a78e110c0d0a9d2c6fdeb29feb5274c9157508a8baef7edf352420f6d"}, + {file = "libcst-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:585b3aa705b3767d717d2100935d8ef557275ecdd3fac81c3e28db0959efb0ea"}, + {file = "libcst-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8935dd3393e30c2f97344866a4cb14efe560200e232166a8db1de7865c2ef8b2"}, + {file = "libcst-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc80ea16c7d44e38f193e4d4ef7ff1e0ba72d8e60e8b61ac6f4c87f070a118bd"}, + {file = "libcst-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02be4aab728261bb76d16e77c9a457884cebb60d09c8edee844de43b0e08aff7"}, + {file = "libcst-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8fcd78be4d9ce3c36d0c5d0bdd384e0c7d5f72970a9e4ebd56070141972b4ad"}, + {file = "libcst-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:52b6aadfe54e3ae52c3b815eaaa17ba4da9ff010d5e8adf6a70697872886dd10"}, + {file = "libcst-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:83bc5fbe34d33597af1d5ea113dcb9b5dd5afe5a5f4316bac4293464d5e3971a"}, + {file = "libcst-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f10124bf99a0b075eae136ef0ce06204e5f6b8da4596a9c4853a0663e80ddf3"}, + {file = "libcst-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48e581af6127c5af4c9f483e5986d94f0c6b2366967ee134f0a8eba0aa4c8c12"}, + {file = "libcst-1.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dba93cca0a5c6d771ed444c44d21ce8ea9b277af7036cea3743677aba9fbbb8"}, + {file = "libcst-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b5c4d87721a7bab265c202575809b810815ab81d5e2e7a5d4417a087975840"}, + {file = "libcst-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:b48bf71d52c1e891a0948465a94d9817b5fc1ec1a09603566af90585f3b11948"}, + {file = "libcst-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:88520b6dea59eaea0cae80f77c0a632604a82c5b2d23dedb4b5b34035cbf1615"}, + {file = "libcst-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:208ea92d80b2eeed8cbc879d5f39f241582a5d56b916b1b65ed2be2f878a2425"}, + {file = "libcst-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4592872aaf5b7fa5c2727a7d73c0985261f1b3fe7eff51f4fd5b8174f30b4e2"}, + {file = "libcst-1.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2788b2b5838b78fe15df8e9fa6b6903195ea49b2d2ba43e8f423f6c90e4b69f"}, + {file = "libcst-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b5b5bcd3a9ba92840f27ad34eaa038acbee195ec337da39536c0a2efbbf28efd"}, + {file = "libcst-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:4d6acb0bdee1e55b44c6215c59755ec4693ac01e74bb1fde04c37358b378835d"}, + {file = "libcst-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6453b5a8755a6eee3ad67ee246f13a8eac9827d2cfc8e4a269e8bf0393db74bc"}, + {file = "libcst-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:40748361f4ea66ab6cdd82f8501c82c29808317ac7a3bd132074efd5fd9bfae2"}, + {file = "libcst-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f71aed85932c2ea92058fd9bbd99a6478bd69eada041c3726b4f4c9af1f564e"}, + {file = "libcst-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60b09abcc2848ab52d479c3a9b71b606d91a941e3779616efd083bb87dbe8ad"}, + {file = "libcst-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fb324ed20f3a725d152df5dba8d80f7e126d9c93cced581bf118a5fc18c1065"}, + {file = "libcst-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:99e7c52150a135d66716b03e00c7b1859a44336dc2a2bf8f9acc164494308531"}, + {file = "libcst-1.5.0.tar.gz", hash = "sha256:8478abf21ae3861a073e898d80b822bd56e578886331b33129ba77fec05b8c24"}, ] [package.dependencies] pyyaml = ">=5.2" [package.extras] -dev = ["Sphinx (>=5.1.1)", "black (==23.12.1)", "build (>=0.10.0)", "coverage (>=4.5.4)", "fixit (==2.1.0)", "flake8 (==7.0.0)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.4)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<1.6)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.18)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.6.0)", "usort (==1.0.8.post1)"] +dev = ["Sphinx (>=5.1.1)", "black (==24.8.0)", "build (>=0.10.0)", "coverage[toml] (>=4.5.4)", "fixit (==2.1.0)", "flake8 (==7.1.1)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.4)", "jupyter (>=1.0.0)", "maturin (>=1.7.0,<1.8)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.18)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.7.3)", "usort (==1.0.8.post1)"] [[package]] name = "litellm" -version = "1.46.7" +version = "1.49.1" description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.46.7-py3-none-any.whl", hash = "sha256:e330a144f4ed8fd22c19fa81c93ada22fd9f83a67cccdced935f79aa15181e57"}, - {file = "litellm-1.46.7.tar.gz", hash = "sha256:5e7aac56f47e441aa951ec9bf5fb8cfaa7ded1e2e312c6d0c07107cda5ee98a0"}, + {file = "litellm-1.49.1-py3-none-any.whl", hash = "sha256:2ba6689fe4ea3b0d69f56f2843caff6422497489e6252943b13ef1463f016728"}, + {file = "litellm-1.49.1.tar.gz", hash = "sha256:f51450ad823c8bdf057017009ae8bcce1a2810690b2f0d9dcdaff04ddc68209a"}, ] [package.dependencies] @@ -1920,7 +1978,7 @@ click = "*" importlib-metadata = ">=6.8.0" jinja2 = ">=3.1.2,<4.0.0" jsonschema = ">=4.22.0,<5.0.0" -openai = ">=1.45.0" +openai = ">=1.51.0" pydantic = ">=2.0.0,<3.0.0" python-dotenv = ">=0.2.0" requests = ">=2.31.0,<3.0.0" @@ -2007,71 +2065,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.1" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:db842712984e91707437461930e6011e60b39136c7331e971952bb30465bc1a1"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ffb4a8e7d46ed96ae48805746755fadd0909fea2306f93d5d8233ba23dda12a"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67c519635a4f64e495c50e3107d9b4075aec33634272b5db1cde839e07367589"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48488d999ed50ba8d38c581d67e496f955821dc183883550a6fbc7f1aefdc170"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f31ae06f1328595d762c9a2bf29dafd8621c7d3adc130cbb46278079758779ca"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80fcbf3add8790caddfab6764bde258b5d09aefbe9169c183f88a7410f0f6dea"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3341c043c37d78cc5ae6e3e305e988532b072329639007fd408a476642a89fd6"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cb53e2a99df28eee3b5f4fea166020d3ef9116fdc5764bc5117486e6d1211b25"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-win32.whl", hash = "sha256:db15ce28e1e127a0013dfb8ac243a8e392db8c61eae113337536edb28bdc1f97"}, + {file = "MarkupSafe-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:4ffaaac913c3f7345579db4f33b0020db693f302ca5137f106060316761beea9"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26627785a54a947f6d7336ce5963569b5d75614619e75193bdb4e06e21d447ad"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b954093679d5750495725ea6f88409946d69cfb25ea7b4c846eef5044194f583"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:973a371a55ce9ed333a3a0f8e0bcfae9e0d637711534bcb11e130af2ab9334e7"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244dbe463d5fb6d7ce161301a03a6fe744dac9072328ba9fc82289238582697b"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d98e66a24497637dd31ccab090b34392dddb1f2f811c4b4cd80c230205c074a3"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad91738f14eb8da0ff82f2acd0098b6257621410dcbd4df20aaa5b4233d75a50"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7044312a928a66a4c2a22644147bc61a199c1709712069a344a3fb5cfcf16915"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a4792d3b3a6dfafefdf8e937f14906a51bd27025a36f4b188728a73382231d91"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-win32.whl", hash = "sha256:fa7d686ed9883f3d664d39d5a8e74d3c5f63e603c2e3ff0abcba23eac6542635"}, + {file = "MarkupSafe-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:9ba25a71ebf05b9bb0e2ae99f8bc08a07ee8e98c612175087112656ca0f5c8bf"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8ae369e84466aa70f3154ee23c1451fda10a8ee1b63923ce76667e3077f2b0c4"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40f1e10d51c92859765522cbd79c5c8989f40f0419614bcdc5015e7b6bf97fc5"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a4cb365cb49b750bdb60b846b0c0bc49ed62e59a76635095a179d440540c346"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee3941769bd2522fe39222206f6dd97ae83c442a94c90f2b7a25d847d40f4729"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62fada2c942702ef8952754abfc1a9f7658a4d5460fabe95ac7ec2cbe0d02abc"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c2d64fdba74ad16138300815cfdc6ab2f4647e23ced81f59e940d7d4a1469d9"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fb532dd9900381d2e8f48172ddc5a59db4c445a11b9fab40b3b786da40d3b56b"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0f84af7e813784feb4d5e4ff7db633aba6c8ca64a833f61d8e4eade234ef0c38"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-win32.whl", hash = "sha256:cbf445eb5628981a80f54087f9acdbf84f9b7d862756110d172993b9a5ae81aa"}, + {file = "MarkupSafe-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a10860e00ded1dd0a65b83e717af28845bb7bd16d8ace40fe5531491de76b79f"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e81c52638315ff4ac1b533d427f50bc0afc746deb949210bc85f05d4f15fd772"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:312387403cd40699ab91d50735ea7a507b788091c416dd007eac54434aee51da"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ae99f31f47d849758a687102afdd05bd3d3ff7dbab0a8f1587981b58a76152a"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c97ff7fedf56d86bae92fa0a646ce1a0ec7509a7578e1ed238731ba13aabcd1c"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7420ceda262dbb4b8d839a4ec63d61c261e4e77677ed7c66c99f4e7cb5030dd"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45d42d132cff577c92bfba536aefcfea7e26efb975bd455db4e6602f5c9f45e7"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c8817557d0de9349109acb38b9dd570b03cc5014e8aabf1cbddc6e81005becd"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a54c43d3ec4cf2a39f4387ad044221c66a376e58c0d0e971d47c475ba79c6b5"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-win32.whl", hash = "sha256:c91b394f7601438ff79a4b93d16be92f216adb57d813a78be4446fe0f6bc2d8c"}, + {file = "MarkupSafe-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:fe32482b37b4b00c7a52a07211b479653b7fe4f22b2e481b9a9b099d8a430f2f"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:17b2aea42a7280db02ac644db1d634ad47dcc96faf38ab304fe26ba2680d359a"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:852dc840f6d7c985603e60b5deaae1d89c56cb038b577f6b5b8c808c97580f1d"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0778de17cff1acaeccc3ff30cd99a3fd5c50fc58ad3d6c0e0c4c58092b859396"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:800100d45176652ded796134277ecb13640c1a537cad3b8b53da45aa96330453"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d06b24c686a34c86c8c1fba923181eae6b10565e4d80bdd7bc1c8e2f11247aa4"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:33d1c36b90e570ba7785dacd1faaf091203d9942bc036118fab8110a401eb1a8"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:beeebf760a9c1f4c07ef6a53465e8cfa776ea6a2021eda0d0417ec41043fe984"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bbde71a705f8e9e4c3e9e33db69341d040c827c7afa6789b14c6e16776074f5a"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-win32.whl", hash = "sha256:82b5dba6eb1bcc29cc305a18a3c5365d2af06ee71b123216416f7e20d2a84e5b"}, + {file = "MarkupSafe-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:730d86af59e0e43ce277bb83970530dd223bf7f2a838e086b50affa6ec5f9295"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4935dd7883f1d50e2ffecca0aa33dc1946a94c8f3fdafb8df5c330e48f71b132"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e9393357f19954248b00bed7c56f29a25c930593a77630c719653d51e7669c2a"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40621d60d0e58aa573b68ac5e2d6b20d44392878e0bfc159012a5787c4e35bc8"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f94190df587738280d544971500b9cafc9b950d32efcb1fba9ac10d84e6aa4e6"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6a387d61fe41cdf7ea95b38e9af11cfb1a63499af2759444b99185c4ab33f5b"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8ad4ad1429cd4f315f32ef263c1342166695fad76c100c5d979c45d5570ed58b"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e24bfe89c6ac4c31792793ad9f861b8f6dc4546ac6dc8f1c9083c7c4f2b335cd"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2a4b34a8d14649315c4bc26bbfa352663eb51d146e35eef231dd739d54a5430a"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-win32.whl", hash = "sha256:242d6860f1fd9191aef5fae22b51c5c19767f93fb9ead4d21924e0bcb17619d8"}, + {file = "MarkupSafe-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:93e8248d650e7e9d49e8251f883eed60ecbc0e8ffd6349e18550925e31bd029b"}, + {file = "markupsafe-3.0.1.tar.gz", hash = "sha256:3e683ee4f5d0fa2dde4db77ed8dd8a876686e3fc417655c2ece9a90576905344"}, ] [[package]] @@ -2386,21 +2445,22 @@ files = [ [[package]] name = "networkx" -version = "3.1" +version = "3.4" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, - {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, + {file = "networkx-3.4-py3-none-any.whl", hash = "sha256:46dad0ec74a825a968e2b36c37ef5b91faa3868f017b2283d9cbff33112222ce"}, + {file = "networkx-3.4.tar.gz", hash = "sha256:1269b90f8f0d3a4095f016f49650f35ac169729f49b69d0572b2bb142748162b"}, ] [package.extras] -default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] -developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] -doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] -test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "ninja" @@ -2448,75 +2508,75 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "2.1.1" +version = "2.1.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, - {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, - {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, - {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, - {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, - {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, - {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, - {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, - {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, - {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, + {file = "numpy-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee"}, + {file = "numpy-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884"}, + {file = "numpy-2.1.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648"}, + {file = "numpy-2.1.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d"}, + {file = "numpy-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86"}, + {file = "numpy-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7"}, + {file = "numpy-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03"}, + {file = "numpy-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466"}, + {file = "numpy-2.1.2-cp310-cp310-win32.whl", hash = "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb"}, + {file = "numpy-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2"}, + {file = "numpy-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe"}, + {file = "numpy-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1"}, + {file = "numpy-2.1.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f"}, + {file = "numpy-2.1.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4"}, + {file = "numpy-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a"}, + {file = "numpy-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1"}, + {file = "numpy-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2"}, + {file = "numpy-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146"}, + {file = "numpy-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c"}, + {file = "numpy-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9"}, + {file = "numpy-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b"}, + {file = "numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db"}, + {file = "numpy-2.1.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1"}, + {file = "numpy-2.1.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426"}, + {file = "numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0"}, + {file = "numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df"}, + {file = "numpy-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366"}, + {file = "numpy-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142"}, + {file = "numpy-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550"}, + {file = "numpy-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e"}, + {file = "numpy-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d"}, + {file = "numpy-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf"}, + {file = "numpy-2.1.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e"}, + {file = "numpy-2.1.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3"}, + {file = "numpy-2.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8"}, + {file = "numpy-2.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a"}, + {file = "numpy-2.1.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98"}, + {file = "numpy-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe"}, + {file = "numpy-2.1.2-cp313-cp313-win32.whl", hash = "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a"}, + {file = "numpy-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445"}, + {file = "numpy-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5"}, + {file = "numpy-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0"}, + {file = "numpy-2.1.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17"}, + {file = "numpy-2.1.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6"}, + {file = "numpy-2.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8"}, + {file = "numpy-2.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35"}, + {file = "numpy-2.1.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62"}, + {file = "numpy-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a"}, + {file = "numpy-2.1.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952"}, + {file = "numpy-2.1.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5"}, + {file = "numpy-2.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7"}, + {file = "numpy-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e"}, + {file = "numpy-2.1.2.tar.gz", hash = "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c"}, ] [[package]] name = "openai" -version = "1.46.1" +version = "1.51.2" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.46.1-py3-none-any.whl", hash = "sha256:7517f07117cf66012bbc55c49fd6b983eaac0f3d2a09c90cba1140d4455e4290"}, - {file = "openai-1.46.1.tar.gz", hash = "sha256:e5cf7f268bf516de23686d496c9dae7f0dcdcd0e87af4d288deeab8329fcbbaf"}, + {file = "openai-1.51.2-py3-none-any.whl", hash = "sha256:5c5954711cba931423e471c37ff22ae0fd3892be9b083eee36459865fbbb83fa"}, + {file = "openai-1.51.2.tar.gz", hash = "sha256:c6a51fac62a1ca9df85a522e462918f6bb6bc51a8897032217e453a0730123a6"}, ] [package.dependencies] @@ -2556,44 +2616,57 @@ files = [ [[package]] name = "pandas" -version = "2.2.2" +version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, - {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, - {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, - {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, - {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, - {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, ] [package.dependencies] -numpy = {version = ">=1.23.2", markers = "python_version == \"3.11\""} +numpy = {version = ">=1.26.0", markers = "python_version >= \"3.12\""} python-dateutil = ">=2.8.2" pytz = ">=2020.1" tzdata = ">=2022.7" @@ -2747,32 +2820,154 @@ files = [ [[package]] name = "prometheus-client" -version = "0.20.0" +version = "0.21.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, - {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, + {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, + {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, ] [package.extras] twisted = ["twisted"] +[[package]] +name = "prometheus-fastapi-instrumentator" +version = "7.0.0" +description = "Instrument your FastAPI with Prometheus metrics." +optional = false +python-versions = ">=3.8.1,<4.0.0" +files = [ + {file = "prometheus_fastapi_instrumentator-7.0.0-py3-none-any.whl", hash = "sha256:96030c43c776ee938a3dae58485ec24caed7e05bfc60fe067161e0d5b5757052"}, + {file = "prometheus_fastapi_instrumentator-7.0.0.tar.gz", hash = "sha256:5ba67c9212719f244ad7942d75ded80693b26331ee5dfc1e7571e4794a9ccbed"}, +] + +[package.dependencies] +prometheus-client = ">=0.8.0,<1.0.0" +starlette = ">=0.30.0,<1.0.0" + [[package]] name = "prompt-toolkit" -version = "3.0.47" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] wcwidth = "*" +[[package]] +name = "propcache" +version = "0.2.0" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.8" +files = [ + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336"}, + {file = "propcache-0.2.0-cp310-cp310-win32.whl", hash = "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad"}, + {file = "propcache-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b"}, + {file = "propcache-0.2.0-cp311-cp311-win32.whl", hash = "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1"}, + {file = "propcache-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348"}, + {file = "propcache-0.2.0-cp312-cp312-win32.whl", hash = "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5"}, + {file = "propcache-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544"}, + {file = "propcache-0.2.0-cp313-cp313-win32.whl", hash = "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032"}, + {file = "propcache-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed"}, + {file = "propcache-0.2.0-cp38-cp38-win32.whl", hash = "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d"}, + {file = "propcache-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798"}, + {file = "propcache-0.2.0-cp39-cp39-win32.whl", hash = "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9"}, + {file = "propcache-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df"}, + {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"}, + {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, +] + [[package]] name = "protobuf" version = "5.28.2" @@ -3026,13 +3221,13 @@ pydantic = ">=1.9.0,<3.0.0" [[package]] name = "pydot" -version = "3.0.1" +version = "3.0.2" description = "Python interface to Graphviz's Dot" optional = false python-versions = ">=3.8" files = [ - {file = "pydot-3.0.1-py3-none-any.whl", hash = "sha256:43f1e878dc1ff7c1c2e3470a6999d4e9e97771c5c862440c2f0af0ba844c231f"}, - {file = "pydot-3.0.1.tar.gz", hash = "sha256:e18cf7f287c497d77b536a3d20a46284568fea390776dface6eabbdf1b1b5efc"}, + {file = "pydot-3.0.2-py3-none-any.whl", hash = "sha256:99cedaa55d04abb0b2bc56d9981a6da781053dd5ac75c428e8dd53db53f90b14"}, + {file = "pydot-3.0.2.tar.gz", hash = "sha256:9180da540b51b3aa09fbf81140b3edfbe2315d778e8589a7d0a4a69c41332bae"}, ] [package.dependencies] @@ -3041,7 +3236,7 @@ pyparsing = ">=3.0.9" [package.extras] dev = ["chardet", "parameterized", "ruff"] release = ["zest.releaser[recommended]"] -tests = ["chardet", "parameterized", "ruff", "tox", "unittest-parallel"] +tests = ["chardet", "parameterized", "pytest", "pytest-cov", "pytest-xdist[psutil]", "ruff", "tox"] [[package]] name = "pygments" @@ -3167,27 +3362,21 @@ files = [ [[package]] name = "pytype" -version = "2024.9.13" +version = "2024.10.11" description = "Python type inferencer" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" files = [ - {file = "pytype-2024.9.13-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:52c0005d220b27f9c933e4077de700c4e8171abce0c2af72f4c6263a85ff5bce"}, - {file = "pytype-2024.9.13-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d5dc847c2fe98bac044f956e2fc9f074f09704b64436522b81ede7dd5fa3653"}, - {file = "pytype-2024.9.13-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529f19141c6170d96a38909df430ca52e6904eaef851ad2690cf632f17d2c195"}, - {file = "pytype-2024.9.13-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:38f3eddf05d8530ef16d3d7c2da2556148b9975fc7c3405ac3073022e1a7434b"}, - {file = "pytype-2024.9.13-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b530eae5ab421a2dc9c4ef53f68629c5a622545150ae9702dbb811f56852a63"}, - {file = "pytype-2024.9.13-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb9eaaaf6c33e2716fdce1cf4166d3e5099372d8898b69ab7673225928096456"}, - {file = "pytype-2024.9.13-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:53b767d85f374c7483c8b2849dceb811a15fcb01520e245dd82bd7c0e2befefb"}, - {file = "pytype-2024.9.13-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:176a5bbc0cb0882918a0b48818b95df2c15811e3a8391da089ffc5b33fea7013"}, - {file = "pytype-2024.9.13-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bdaf1eaaf17a13741f67686c2d4c94c30279cd682c7e4cf535e41fc911b0e59"}, - {file = "pytype-2024.9.13-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:425011cc45fba8c83af796155049f9db89d11e8aedbfb21bc1c99408f4a2c4e3"}, - {file = "pytype-2024.9.13-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e500727967b843488c1978114778162ef00fee9be49dfa5b4758dcbbcc55dd9"}, - {file = "pytype-2024.9.13-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9b40beab6ef04fc260d86a8ef47b25d1b525dbc4cfbcb73151fd74210c176df"}, - {file = "pytype-2024.9.13-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:b5fdc24b60938ee846dfbdf08b5ea96e934e7d69c34eb1f8fb7707083d177f0e"}, - {file = "pytype-2024.9.13-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8dcfd509118c2d7e0787e72832b45e30037af1c29dfcb733a7e8014f58337287"}, - {file = "pytype-2024.9.13-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9df731062dc18518a46135c4825ad966e1a275ffc0723dd62f9771b420889da0"}, - {file = "pytype-2024.9.13.tar.gz", hash = "sha256:941046ca0f1c43b79162bb51836fef0ba6608012d99f6833148c249f22216f26"}, + {file = "pytype-2024.10.11-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:1c5a43b132b19928a38ba1dbcf8f4e3f67a41ea26087ccf26ae371c4076c3809"}, + {file = "pytype-2024.10.11-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dd9ecb48aa46ecef14b39f1bbe8ff7e586e499639a056c05bd4436ca0b35d82"}, + {file = "pytype-2024.10.11-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37d8dfdf23679abfdfe047efef7239a438a038e580d7e0767c0403a6be07cea0"}, + {file = "pytype-2024.10.11-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:2e31a964aa82e1ac317adbe17b77010e4f362882df1ce7ad15ef0cf0bb97039f"}, + {file = "pytype-2024.10.11-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:15e2f39590cc08ef8e6704cfa5c1db6fbbee2799891f9d8adbf821f883a54745"}, + {file = "pytype-2024.10.11-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ead3408fc9622ba8a357c9a6b9b49059a9b8add0a3b8390a9ab490f62a984005"}, + {file = "pytype-2024.10.11-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:cdc881cce9541a475ec48989a5ab889e6274a85afbf6da0e30266d0823f66d42"}, + {file = "pytype-2024.10.11-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13327d0d17b981fe2660dd3a69f97bf09a526f93debc40bb44b240628e0b55c1"}, + {file = "pytype-2024.10.11-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb98711679e631b01b09b09185504fbf38d60f119280918e244a602cf843b0fe"}, + {file = "pytype-2024.10.11.tar.gz", hash = "sha256:ae5ff82f0b07d5ad68d4ec32a3e8de44fad6ed565a821a76aca50a14df382274"}, ] [package.dependencies] @@ -3197,7 +3386,7 @@ importlab = ">=0.8" jinja2 = ">=3.1.2" libcst = ">=1.0.1" msgspec = ">=0.18.6" -networkx = "<3.2" +networkx = ">=2.8" ninja = ">=1.10.0.post2" pycnite = ">=2024.07.31" pydot = ">=1.4.2" @@ -3218,25 +3407,29 @@ files = [ [[package]] name = "pywin32" -version = "306" +version = "307" description = "Python for Window Extensions" optional = false python-versions = "*" files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, + {file = "pywin32-307-cp310-cp310-win32.whl", hash = "sha256:f8f25d893c1e1ce2d685ef6d0a481e87c6f510d0f3f117932781f412e0eba31b"}, + {file = "pywin32-307-cp310-cp310-win_amd64.whl", hash = "sha256:36e650c5e5e6b29b5d317385b02d20803ddbac5d1031e1f88d20d76676dd103d"}, + {file = "pywin32-307-cp310-cp310-win_arm64.whl", hash = "sha256:0c12d61e0274e0c62acee79e3e503c312426ddd0e8d4899c626cddc1cafe0ff4"}, + {file = "pywin32-307-cp311-cp311-win32.whl", hash = "sha256:fec5d27cc893178fab299de911b8e4d12c5954e1baf83e8a664311e56a272b75"}, + {file = "pywin32-307-cp311-cp311-win_amd64.whl", hash = "sha256:987a86971753ed7fdd52a7fb5747aba955b2c7fbbc3d8b76ec850358c1cc28c3"}, + {file = "pywin32-307-cp311-cp311-win_arm64.whl", hash = "sha256:fd436897c186a2e693cd0437386ed79f989f4d13d6f353f8787ecbb0ae719398"}, + {file = "pywin32-307-cp312-cp312-win32.whl", hash = "sha256:07649ec6b01712f36debf39fc94f3d696a46579e852f60157a729ac039df0815"}, + {file = "pywin32-307-cp312-cp312-win_amd64.whl", hash = "sha256:00d047992bb5dcf79f8b9b7c81f72e0130f9fe4b22df613f755ab1cc021d8347"}, + {file = "pywin32-307-cp312-cp312-win_arm64.whl", hash = "sha256:b53658acbfc6a8241d72cc09e9d1d666be4e6c99376bc59e26cdb6223c4554d2"}, + {file = "pywin32-307-cp313-cp313-win32.whl", hash = "sha256:ea4d56e48dc1ab2aa0a5e3c0741ad6e926529510516db7a3b6981a1ae74405e5"}, + {file = "pywin32-307-cp313-cp313-win_amd64.whl", hash = "sha256:576d09813eaf4c8168d0bfd66fb7cb3b15a61041cf41598c2db4a4583bf832d2"}, + {file = "pywin32-307-cp313-cp313-win_arm64.whl", hash = "sha256:b30c9bdbffda6a260beb2919f918daced23d32c79109412c2085cbc513338a0a"}, + {file = "pywin32-307-cp37-cp37m-win32.whl", hash = "sha256:5101472f5180c647d4525a0ed289ec723a26231550dbfd369ec19d5faf60e511"}, + {file = "pywin32-307-cp37-cp37m-win_amd64.whl", hash = "sha256:05de55a7c110478dc4b202230e98af5e0720855360d2b31a44bb4e296d795fba"}, + {file = "pywin32-307-cp38-cp38-win32.whl", hash = "sha256:13d059fb7f10792542082f5731d5d3d9645320fc38814759313e5ee97c3fac01"}, + {file = "pywin32-307-cp38-cp38-win_amd64.whl", hash = "sha256:7e0b2f93769d450a98ac7a31a087e07b126b6d571e8b4386a5762eb85325270b"}, + {file = "pywin32-307-cp39-cp39-win32.whl", hash = "sha256:55ee87f2f8c294e72ad9d4261ca423022310a6e79fb314a8ca76ab3f493854c6"}, + {file = "pywin32-307-cp39-cp39-win_amd64.whl", hash = "sha256:e9d5202922e74985b037c9ef46778335c102b74b95cec70f629453dbe7235d87"}, ] [[package]] @@ -3603,13 +3796,13 @@ files = [ [[package]] name = "rich" -version = "13.8.1" +version = "13.9.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, - {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, + {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, + {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, ] [package.dependencies] @@ -3787,13 +3980,13 @@ win32 = ["pywin32"] [[package]] name = "sentry-sdk" -version = "2.14.0" +version = "2.16.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = ">=3.6" files = [ - {file = "sentry_sdk-2.14.0-py2.py3-none-any.whl", hash = "sha256:b8bc3dc51d06590df1291b7519b85c75e2ced4f28d9ea655b6d54033503b5bf4"}, - {file = "sentry_sdk-2.14.0.tar.gz", hash = "sha256:1e0e2eaf6dad918c7d1e0edac868a7bf20017b177f242cefe2a6bcd47955961d"}, + {file = "sentry_sdk-2.16.0-py2.py3-none-any.whl", hash = "sha256:49139c31ebcd398f4f6396b18910610a0c1602f6e67083240c33019d1f6aa30c"}, + {file = "sentry_sdk-2.16.0.tar.gz", hash = "sha256:90f733b32e15dfc1999e6b7aca67a38688a567329de4d6e184154a73f96c6892"}, ] [package.dependencies] @@ -3817,6 +4010,7 @@ falcon = ["falcon (>=1.4)"] fastapi = ["fastapi (>=0.79.0)"] flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] grpcio = ["grpcio (>=1.21.1)", "protobuf (>=3.8.0)"] +http2 = ["httpcore[http2] (==1.*)"] httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] huggingface-hub = ["huggingface-hub (>=0.22)"] @@ -3952,13 +4146,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "starlette" -version = "0.38.5" +version = "0.38.6" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.38.5-py3-none-any.whl", hash = "sha256:632f420a9d13e3ee2a6f18f437b0a9f1faecb0bc42e1942aa2ea0e379a4c4206"}, - {file = "starlette-0.38.5.tar.gz", hash = "sha256:04a92830a9b6eb1442c766199d62260c3d4dc9c4f9188360626b1e0273cb7077"}, + {file = "starlette-0.38.6-py3-none-any.whl", hash = "sha256:4517a1409e2e73ee4951214ba012052b9e16f60e90d73cfb06192c19203bbb05"}, + {file = "starlette-0.38.6.tar.gz", hash = "sha256:863a1588f5574e70a821dadefb41e4881ea451a47a3cd1b4df359d4ffefe5ead"}, ] [package.dependencies] @@ -3983,17 +4177,17 @@ widechars = ["wcwidth"] [[package]] name = "temporalio" -version = "1.7.1" +version = "1.8.0" description = "Temporal.io Python SDK" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "temporalio-1.7.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3aff503662255c3e2fa1e9c07b8a702bf8ff1f7d99370b4a6785699c45e75527"}, - {file = "temporalio-1.7.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:0685c7ece5ba639a1af7eb39939726c70c99ffe6c212be3f01f213753923fd88"}, - {file = "temporalio-1.7.1-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:396e608c227a4f20cde7dfd3c7c8e2d8a9039cd76a40171668bb2b9a84d36bea"}, - {file = "temporalio-1.7.1-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a38652e2556c384261f81f820b5f65f3b099767f18b9332628ec730cd31f0972"}, - {file = "temporalio-1.7.1-cp38-abi3-win_amd64.whl", hash = "sha256:9b3aea332f6686a424467b026cbc8a1e93c550dfb6f7d983d392090de3d92847"}, - {file = "temporalio-1.7.1.tar.gz", hash = "sha256:8250c391b33dd498dfd7d65a880c72b17e9b0e7cc04e7d444400be74c0fe4c85"}, + {file = "temporalio-1.8.0-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c6acb217d4bd7297389db756dd9da73ef2bae17f6afee1faa8bf77be200e8b93"}, + {file = "temporalio-1.8.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6ec61660631b2513ce710b468068135280996af105571126295c9645bf29ee22"}, + {file = "temporalio-1.8.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ee13d155dc917e7792b87d1e37b1a0e837c361deb722ccc294edaa5344f2fa2"}, + {file = "temporalio-1.8.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6b67c115b6eaceddae373dc2c597e5ad5dd567282f4bb0ee63c99124f5f0c12d"}, + {file = "temporalio-1.8.0-cp38-abi3-win_amd64.whl", hash = "sha256:6a45571c09859b6cbf33be26dd5d5fab7e7ee3625750a7b91ebde5770e61015b"}, + {file = "temporalio-1.8.0.tar.gz", hash = "sha256:b9e239b8bfd60126a4b591c6e2e691392b69afc8cac9db452d692654bf85f9cc"}, ] [package.dependencies] @@ -4022,13 +4216,13 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "termcolor" -version = "2.4.0" +version = "2.5.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, - {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, + {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, + {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, ] [package.extras] @@ -4127,111 +4321,111 @@ test = ["pytest", "ruff"] [[package]] name = "tokenizers" -version = "0.20.0" +version = "0.20.1" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6cff5c5e37c41bc5faa519d6f3df0679e4b37da54ea1f42121719c5e2b4905c0"}, - {file = "tokenizers-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:62a56bf75c27443432456f4ca5ca055befa95e25be8a28141cc495cac8ae4d6d"}, - {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68cc7de6a63f09c4a86909c2597b995aa66e19df852a23aea894929c74369929"}, - {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:053c37ecee482cc958fdee53af3c6534286a86f5d35aac476f7c246830e53ae5"}, - {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d7074aaabc151a6363fa03db5493fc95b423b2a1874456783989e96d541c7b6"}, - {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a11435780f2acd89e8fefe5e81cecf01776f6edb9b3ac95bcb76baee76b30b90"}, - {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9a81cd2712973b007d84268d45fc3f6f90a79c31dfe7f1925e6732f8d2959987"}, - {file = "tokenizers-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7dfd796ab9d909f76fb93080e1c7c8309f196ecb316eb130718cd5e34231c69"}, - {file = "tokenizers-0.20.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8029ad2aa8cb00605c9374566034c1cc1b15130713e0eb5afcef6cface8255c9"}, - {file = "tokenizers-0.20.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ca4d54260ebe97d59dfa9a30baa20d0c4dd9137d99a8801700055c561145c24e"}, - {file = "tokenizers-0.20.0-cp310-none-win32.whl", hash = "sha256:95ee16b57cec11b86a7940174ec5197d506439b0f415ab3859f254b1dffe9df0"}, - {file = "tokenizers-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:0a61a11e93eeadbf02aea082ffc75241c4198e0608bbbac4f65a9026851dcf37"}, - {file = "tokenizers-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6636b798b3c4d6c9b1af1a918bd07c867808e5a21c64324e95318a237e6366c3"}, - {file = "tokenizers-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ec603e42eaf499ffd58b9258162add948717cf21372458132f14e13a6bc7172"}, - {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cce124264903a8ea6f8f48e1cc7669e5ef638c18bd4ab0a88769d5f92debdf7f"}, - {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07bbeba0231cf8de07aa6b9e33e9779ff103d47042eeeb859a8c432e3292fb98"}, - {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:06c0ca8397b35d38b83a44a9c6929790c1692957d88541df061cb34d82ebbf08"}, - {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca6557ac3b83d912dfbb1f70ab56bd4b0594043916688e906ede09f42e192401"}, - {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a5ad94c9e80ac6098328bee2e3264dbced4c6faa34429994d473f795ec58ef4"}, - {file = "tokenizers-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b5c7f906ee6bec30a9dc20268a8b80f3b9584de1c9f051671cb057dc6ce28f6"}, - {file = "tokenizers-0.20.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:31e087e9ee1b8f075b002bfee257e858dc695f955b43903e1bb4aa9f170e37fe"}, - {file = "tokenizers-0.20.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c3124fb6f3346cb3d8d775375d3b429bf4dcfc24f739822702009d20a4297990"}, - {file = "tokenizers-0.20.0-cp311-none-win32.whl", hash = "sha256:a4bb8b40ba9eefa621fdcabf04a74aa6038ae3be0c614c6458bd91a4697a452f"}, - {file = "tokenizers-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:2b709d371f1fe60a28ef0c5c67815952d455ca7f34dbe7197eaaed3cc54b658e"}, - {file = "tokenizers-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:15c81a17d0d66f4987c6ca16f4bea7ec253b8c7ed1bb00fdc5d038b1bb56e714"}, - {file = "tokenizers-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6a531cdf1fb6dc41c984c785a3b299cb0586de0b35683842a3afbb1e5207f910"}, - {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06caabeb4587f8404e0cd9d40f458e9cba3e815c8155a38e579a74ff3e2a4301"}, - {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8768f964f23f5b9f50546c0369c75ab3262de926983888bbe8b98be05392a79c"}, - {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:626403860152c816f97b649fd279bd622c3d417678c93b4b1a8909b6380b69a8"}, - {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c1b88fa9e5ff062326f4bf82681da5a96fca7104d921a6bd7b1e6fcf224af26"}, - {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7e559436a07dc547f22ce1101f26d8b2fad387e28ec8e7e1e3b11695d681d8"}, - {file = "tokenizers-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48afb75e50449848964e4a67b0da01261dd3aa8df8daecf10db8fd7f5b076eb"}, - {file = "tokenizers-0.20.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:baf5d0e1ff44710a95eefc196dd87666ffc609fd447c5e5b68272a7c3d342a1d"}, - {file = "tokenizers-0.20.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e5e56df0e8ed23ba60ae3848c3f069a0710c4b197218fe4f89e27eba38510768"}, - {file = "tokenizers-0.20.0-cp312-none-win32.whl", hash = "sha256:ec53e5ecc142a82432f9c6c677dbbe5a2bfee92b8abf409a9ecb0d425ee0ce75"}, - {file = "tokenizers-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:f18661ece72e39c0dfaa174d6223248a15b457dbd4b0fc07809b8e6d3ca1a234"}, - {file = "tokenizers-0.20.0-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:f7065b1084d8d1a03dc89d9aad69bcbc8415d4bc123c367063eb32958cd85054"}, - {file = "tokenizers-0.20.0-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e5d4069e4714e3f7ba0a4d3d44f9d84a432cd4e4aa85c3d7dd1f51440f12e4a1"}, - {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799b808529e54b7e1a36350bda2aeb470e8390e484d3e98c10395cee61d4e3c6"}, - {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f9baa027cc8a281ad5f7725a93c204d7a46986f88edbe8ef7357f40a23fb9c7"}, - {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:010ec7f3f7a96adc4c2a34a3ada41fa14b4b936b5628b4ff7b33791258646c6b"}, - {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d88f06155335b14fd78e32ee28ca5b2eb30fced4614e06eb14ae5f7fba24ed"}, - {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e13eb000ef540c2280758d1b9cfa5fe424b0424ae4458f440e6340a4f18b2638"}, - {file = "tokenizers-0.20.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fab3cf066ff426f7e6d70435dc28a9ff01b2747be83810e397cba106f39430b0"}, - {file = "tokenizers-0.20.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:39fa3761b30a89368f322e5daf4130dce8495b79ad831f370449cdacfb0c0d37"}, - {file = "tokenizers-0.20.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c8da0fba4d179ddf2607821575998df3c294aa59aa8df5a6646dc64bc7352bce"}, - {file = "tokenizers-0.20.0-cp37-none-win32.whl", hash = "sha256:fada996d6da8cf213f6e3c91c12297ad4f6cdf7a85c2fadcd05ec32fa6846fcd"}, - {file = "tokenizers-0.20.0-cp37-none-win_amd64.whl", hash = "sha256:7d29aad702279e0760c265fcae832e89349078e3418dd329732d4503259fd6bd"}, - {file = "tokenizers-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:099c68207f3ef0227ecb6f80ab98ea74de559f7b124adc7b17778af0250ee90a"}, - {file = "tokenizers-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:68012d8a8cddb2eab3880870d7e2086cb359c7f7a2b03f5795044f5abff4e850"}, - {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9253bdd209c6aee168deca7d0e780581bf303e0058f268f9bb06859379de19b6"}, - {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f868600ddbcb0545905ed075eb7218a0756bf6c09dae7528ea2f8436ebd2c93"}, - {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9643d9c8c5f99b6aba43fd10034f77cc6c22c31f496d2f0ee183047d948fa0"}, - {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c375c6a889aeab44734028bc65cc070acf93ccb0f9368be42b67a98e1063d3f6"}, - {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e359f852328e254f070bbd09a19a568421d23388f04aad9f2fb7da7704c7228d"}, - {file = "tokenizers-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d98b01a309d4387f3b1c1dd68a8b8136af50376cf146c1b7e8d8ead217a5be4b"}, - {file = "tokenizers-0.20.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:459f7537119554c2899067dec1ac74a00d02beef6558f4ee2e99513bf6d568af"}, - {file = "tokenizers-0.20.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:392b87ec89452628c045c9f2a88bc2a827f4c79e7d84bc3b72752b74c2581f70"}, - {file = "tokenizers-0.20.0-cp38-none-win32.whl", hash = "sha256:55a393f893d2ed4dd95a1553c2e42d4d4086878266f437b03590d3f81984c4fe"}, - {file = "tokenizers-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:30ffe33c5c2f2aab8e9a3340d0110dd9f7ace7eec7362e20a697802306bd8068"}, - {file = "tokenizers-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aa2d4a6fed2a7e3f860c7fc9d48764bb30f2649d83915d66150d6340e06742b8"}, - {file = "tokenizers-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5ef0f814084a897e9071fc4a868595f018c5c92889197bdc4bf19018769b148"}, - {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1e1b791e8c3bf4c4f265f180dadaff1c957bf27129e16fdd5e5d43c2d3762c"}, - {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b69e55e481459c07885263743a0d3c18d52db19bae8226a19bcca4aaa213fff"}, - {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4806b4d82e27a2512bc23057b2986bc8b85824914286975b84d8105ff40d03d9"}, - {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9859e9ef13adf5a473ccab39d31bff9c550606ae3c784bf772b40f615742a24f"}, - {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef703efedf4c20488a8eb17637b55973745b27997ff87bad88ed499b397d1144"}, - {file = "tokenizers-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eec0061bab94b1841ab87d10831fdf1b48ebaed60e6d66d66dbe1d873f92bf5"}, - {file = "tokenizers-0.20.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:980f3d0d7e73f845b69087f29a63c11c7eb924c4ad6b358da60f3db4cf24bdb4"}, - {file = "tokenizers-0.20.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c157550a2f3851b29d7fdc9dc059fcf81ff0c0fc49a1e5173a89d533ed043fa"}, - {file = "tokenizers-0.20.0-cp39-none-win32.whl", hash = "sha256:8a3d2f4d08608ec4f9895ec25b4b36a97f05812543190a5f2c3cd19e8f041e5a"}, - {file = "tokenizers-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:d90188d12afd0c75e537f9a1d92f9c7375650188ee4f48fdc76f9e38afbd2251"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d68e15f1815357b059ec266062340c343ea7f98f7f330602df81ffa3474b6122"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:23f9ecec637b9bc80da5f703808d29ed5329e56b5aa8d791d1088014f48afadc"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f830b318ee599e3d0665b3e325f85bc75ee2d2ca6285f52e439dc22b64691580"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3dc750def789cb1de1b5a37657919545e1d9ffa667658b3fa9cb7862407a1b8"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e26e6c755ae884c2ea6135cd215bdd0fccafe4ee62405014b8c3cd19954e3ab9"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:a1158c7174f427182e08baa2a8ded2940f2b4a3e94969a85cc9cfd16004cbcea"}, - {file = "tokenizers-0.20.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:6324826287a3fc198898d3dcf758fe4a8479e42d6039f4c59e2cedd3cf92f64e"}, - {file = "tokenizers-0.20.0-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7d8653149405bb0c16feaf9cfee327fdb6aaef9dc2998349fec686f35e81c4e2"}, - {file = "tokenizers-0.20.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a2dc1e402a155e97309287ca085c80eb1b7fab8ae91527d3b729181639fa51"}, - {file = "tokenizers-0.20.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07bef67b20aa6e5f7868c42c7c5eae4d24f856274a464ae62e47a0f2cccec3da"}, - {file = "tokenizers-0.20.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da06e397182ff53789c506c7833220c192952c57e1581a53f503d8d953e2d67e"}, - {file = "tokenizers-0.20.0-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:302f7e11a14814028b7fc88c45a41f1bbe9b5b35fd76d6869558d1d1809baa43"}, - {file = "tokenizers-0.20.0-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:055ec46e807b875589dfbe3d9259f9a6ee43394fb553b03b3d1e9541662dbf25"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e3144b8acebfa6ae062e8f45f7ed52e4b50fb6c62f93afc8871b525ab9fdcab3"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b52aa3fd14b2a07588c00a19f66511cff5cca8f7266ca3edcdd17f3512ad159f"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b8cf52779ffc5d4d63a0170fbeb512372bad0dd014ce92bbb9149756c831124"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:983a45dd11a876124378dae71d6d9761822199b68a4c73f32873d8cdaf326a5b"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df6b819c9a19831ebec581e71a7686a54ab45d90faf3842269a10c11d746de0c"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e738cfd80795fcafcef89c5731c84b05638a4ab3f412f97d5ed7765466576eb1"}, - {file = "tokenizers-0.20.0-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c8842c7be2fadb9c9edcee233b1b7fe7ade406c99b0973f07439985c1c1d0683"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e47a82355511c373a4a430c4909dc1e518e00031207b1fec536c49127388886b"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9afbf359004551179a5db19424180c81276682773cff2c5d002f6eaaffe17230"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07eaa8799a92e6af6f472c21a75bf71575de2af3c0284120b7a09297c0de2f3"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0994b2e5fc53a301071806bc4303e4bc3bdc3f490e92a21338146a36746b0872"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6466e0355b603d10e3cc3d282d350b646341b601e50969464a54939f9848d0"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1e86594c2a433cb1ea09cfbe596454448c566e57ee8905bd557e489d93e89986"}, - {file = "tokenizers-0.20.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3e14cdef1efa96ecead6ea64a891828432c3ebba128bdc0596e3059fea104ef3"}, - {file = "tokenizers-0.20.0.tar.gz", hash = "sha256:39d7acc43f564c274085cafcd1dae9d36f332456de1a31970296a6b8da4eac8d"}, + {file = "tokenizers-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:439261da7c0a5c88bda97acb284d49fbdaf67e9d3b623c0bfd107512d22787a9"}, + {file = "tokenizers-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03dae629d99068b1ea5416d50de0fea13008f04129cc79af77a2a6392792d93c"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b61f561f329ffe4b28367798b89d60c4abf3f815d37413b6352bc6412a359867"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec870fce1ee5248a10be69f7a8408a234d6f2109f8ea827b4f7ecdbf08c9fd15"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d388d1ea8b7447da784e32e3b86a75cce55887e3b22b31c19d0b186b1c677800"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299c85c1d21135bc01542237979bf25c32efa0d66595dd0069ae259b97fb2dbe"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e96f6c14c9752bb82145636b614d5a78e9cde95edfbe0a85dad0dd5ddd6ec95c"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9e95ad49c932b80abfbfeaf63b155761e695ad9f8a58c52a47d962d76e310f"}, + {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f22dee205329a636148c325921c73cf3e412e87d31f4d9c3153b302a0200057b"}, + {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2ffd9a8895575ac636d44500c66dffaef133823b6b25067604fa73bbc5ec09d"}, + {file = "tokenizers-0.20.1-cp310-none-win32.whl", hash = "sha256:2847843c53f445e0f19ea842a4e48b89dd0db4e62ba6e1e47a2749d6ec11f50d"}, + {file = "tokenizers-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:f9aa93eacd865f2798b9e62f7ce4533cfff4f5fbd50c02926a78e81c74e432cd"}, + {file = "tokenizers-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4a717dcb08f2dabbf27ae4b6b20cbbb2ad7ed78ce05a829fae100ff4b3c7ff15"}, + {file = "tokenizers-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f84dad1ff1863c648d80628b1b55353d16303431283e4efbb6ab1af56a75832"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c8f3afa16a5130a81ab5079c589226273ec618949cce79b46d96e59a84f61"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d10766473954397e2d370f215ebed1cc46dcf6fd3906a2a116aa1d6219bfedc3"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9300fac73ddc7e4b0330acbdda4efaabf74929a4a61e119a32a181f534a11b47"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ecaf7b0e39caeb1aa6dd6e0975c405716c82c1312b55ac4f716ef563a906969"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5170be9ec942f3d1d317817ced8d749b3e1202670865e4fd465e35d8c259de83"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f1ae08fa9aea5891cbd69df29913e11d3841798e0bfb1ff78b78e4e7ea0a4"}, + {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ee86d4095d3542d73579e953c2e5e07d9321af2ffea6ecc097d16d538a2dea16"}, + {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:86dcd08da163912e17b27bbaba5efdc71b4fbffb841530fdb74c5707f3c49216"}, + {file = "tokenizers-0.20.1-cp311-none-win32.whl", hash = "sha256:9af2dc4ee97d037bc6b05fa4429ddc87532c706316c5e11ce2f0596dfcfa77af"}, + {file = "tokenizers-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:899152a78b095559c287b4c6d0099469573bb2055347bb8154db106651296f39"}, + {file = "tokenizers-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:407ab666b38e02228fa785e81f7cf79ef929f104bcccf68a64525a54a93ceac9"}, + {file = "tokenizers-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f13a2d16032ebc8bd812eb8099b035ac65887d8f0c207261472803b9633cf3e"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e98eee4dca22849fbb56a80acaa899eec5b72055d79637dd6aa15d5e4b8628c9"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47c1bcdd61e61136087459cb9e0b069ff23b5568b008265e5cbc927eae3387ce"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128c1110e950534426e2274837fc06b118ab5f2fa61c3436e60e0aada0ccfd67"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2e2d47a819d2954f2c1cd0ad51bb58ffac6f53a872d5d82d65d79bf76b9896d"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdd67a0e3503a9a7cf8bc5a4a49cdde5fa5bada09a51e4c7e1c73900297539bd"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b93d2e26d04da337ac407acec8b5d081d8d135e3e5066a88edd5bdb5aff89"}, + {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0c6a796ddcd9a19ad13cf146997cd5895a421fe6aec8fd970d69f9117bddb45c"}, + {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3ea919687aa7001a8ff1ba36ac64f165c4e89035f57998fa6cedcfd877be619d"}, + {file = "tokenizers-0.20.1-cp312-none-win32.whl", hash = "sha256:6d3ac5c1f48358ffe20086bf065e843c0d0a9fce0d7f0f45d5f2f9fba3609ca5"}, + {file = "tokenizers-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:b0874481aea54a178f2bccc45aa2d0c99cd3f79143a0948af6a9a21dcc49173b"}, + {file = "tokenizers-0.20.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:96af92e833bd44760fb17f23f402e07a66339c1dcbe17d79a9b55bb0cc4f038e"}, + {file = "tokenizers-0.20.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:65f34e5b731a262dfa562820818533c38ce32a45864437f3d9c82f26c139ca7f"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17f98fccb5c12ab1ce1f471731a9cd86df5d4bd2cf2880c5a66b229802d96145"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8c0fc3542cf9370bf92c932eb71bdeb33d2d4aeeb4126d9fd567b60bd04cb30"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b39356df4575d37f9b187bb623aab5abb7b62c8cb702867a1768002f814800c"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfdad27b0e50544f6b838895a373db6114b85112ba5c0cefadffa78d6daae563"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:094663dd0e85ee2e573126918747bdb40044a848fde388efb5b09d57bc74c680"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e4cf033a2aa207d7ac790e91adca598b679999710a632c4a494aab0fc3a1b2"}, + {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9310951c92c9fb91660de0c19a923c432f110dbfad1a2d429fbc44fa956bf64f"}, + {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05e41e302c315bd2ed86c02e917bf03a6cf7d2f652c9cee1a0eb0d0f1ca0d32c"}, + {file = "tokenizers-0.20.1-cp37-none-win32.whl", hash = "sha256:212231ab7dfcdc879baf4892ca87c726259fa7c887e1688e3f3cead384d8c305"}, + {file = "tokenizers-0.20.1-cp37-none-win_amd64.whl", hash = "sha256:896195eb9dfdc85c8c052e29947169c1fcbe75a254c4b5792cdbd451587bce85"}, + {file = "tokenizers-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:741fb22788482d09d68e73ece1495cfc6d9b29a06c37b3df90564a9cfa688e6d"}, + {file = "tokenizers-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10be14ebd8082086a342d969e17fc2d6edc856c59dbdbddd25f158fa40eaf043"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514cf279b22fa1ae0bc08e143458c74ad3b56cd078b319464959685a35c53d5e"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a647c5b7cb896d6430cf3e01b4e9a2d77f719c84cefcef825d404830c2071da2"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cdf379219e1e1dd432091058dab325a2e6235ebb23e0aec8d0508567c90cd01"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ba72260449e16c4c2f6f3252823b059fbf2d31b32617e582003f2b18b415c39"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910b96ed87316e4277b23c7bcaf667ce849c7cc379a453fa179e7e09290eeb25"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53975a6694428a0586534cc1354b2408d4e010a3103117f617cbb550299797c"}, + {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:07c4b7be58da142b0730cc4e5fd66bb7bf6f57f4986ddda73833cd39efef8a01"}, + {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b605c540753e62199bf15cf69c333e934077ef2350262af2ccada46026f83d1c"}, + {file = "tokenizers-0.20.1-cp38-none-win32.whl", hash = "sha256:88b3bc76ab4db1ab95ead623d49c95205411e26302cf9f74203e762ac7e85685"}, + {file = "tokenizers-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:d412a74cf5b3f68a90c615611a5aa4478bb303d1c65961d22db45001df68afcb"}, + {file = "tokenizers-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a25dcb2f41a0a6aac31999e6c96a75e9152fa0127af8ece46c2f784f23b8197a"}, + {file = "tokenizers-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a12c3cebb8c92e9c35a23ab10d3852aee522f385c28d0b4fe48c0b7527d59762"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e18da58cf115b7c40de973609c35bde95856012ba42a41ee919c77935af251"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f326a1ac51ae909b9760e34671c26cd0dfe15662f447302a9d5bb2d872bab8ab"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b4872647ea6f25224e2833b044b0b19084e39400e8ead3cfe751238b0802140"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce6238a3311bb8e4c15b12600927d35c267b92a52c881ef5717a900ca14793f7"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57b7a8880b208866508b06ce365dc631e7a2472a3faa24daa430d046fb56c885"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a908c69c2897a68f412aa05ba38bfa87a02980df70f5a72fa8490479308b1f2d"}, + {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:da1001aa46f4490099c82e2facc4fbc06a6a32bf7de3918ba798010954b775e0"}, + {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c097390e2f0ed0a5c5d569e6669dd4e9fff7b31c6a5ce6e9c66a61687197de"}, + {file = "tokenizers-0.20.1-cp39-none-win32.whl", hash = "sha256:3d4d218573a3d8b121a1f8c801029d70444ffb6d8f129d4cca1c7b672ee4a24c"}, + {file = "tokenizers-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:37d1e6f616c84fceefa7c6484a01df05caf1e207669121c66213cb5b2911d653"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48689da7a395df41114f516208d6550e3e905e1239cc5ad386686d9358e9cef0"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:712f90ea33f9bd2586b4a90d697c26d56d0a22fd3c91104c5858c4b5b6489a79"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:359eceb6a620c965988fc559cebc0a98db26713758ec4df43fb76d41486a8ed5"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d3caf244ce89d24c87545aafc3448be15870096e796c703a0d68547187192e1"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b03cf8b9a32254b1bf8a305fb95c6daf1baae0c1f93b27f2b08c9759f41dee"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:218e5a3561561ea0f0ef1559c6d95b825308dbec23fb55b70b92589e7ff2e1e8"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f40df5e0294a95131cc5f0e0eb91fe86d88837abfbee46b9b3610b09860195a7"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:08aaa0d72bb65058e8c4b0455f61b840b156c557e2aca57627056624c3a93976"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:998700177b45f70afeb206ad22c08d9e5f3a80639dae1032bf41e8cbc4dada4b"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62f7fbd3c2c38b179556d879edae442b45f68312019c3a6013e56c3947a4e648"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31e87fca4f6bbf5cc67481b562147fe932f73d5602734de7dd18a8f2eee9c6dd"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:956f21d359ae29dd51ca5726d2c9a44ffafa041c623f5aa33749da87cfa809b9"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1fbbaf17a393c78d8aedb6a334097c91cb4119a9ced4764ab8cfdc8d254dc9f9"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ebe63e31f9c1a970c53866d814e35ec2ec26fda03097c486f82f3891cee60830"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:81970b80b8ac126910295f8aab2d7ef962009ea39e0d86d304769493f69aaa1e"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130e35e76f9337ed6c31be386e75d4925ea807055acf18ca1a9b0eec03d8fe23"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd28a8614f5c82a54ab2463554e84ad79526c5184cf4573bbac2efbbbcead457"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9041ee665d0fa7f5c4ccf0f81f5e6b7087f797f85b143c094126fc2611fec9d0"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:62eb9daea2a2c06bcd8113a5824af8ef8ee7405d3a71123ba4d52c79bb3d9f1a"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f861889707b54a9ab1204030b65fd6c22bdd4a95205deec7994dc22a8baa2ea4"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:89d5c337d74ea6e5e7dc8af124cf177be843bbb9ca6e58c01f75ea103c12c8a9"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0b7f515c83397e73292accdbbbedc62264e070bae9682f06061e2ddce67cacaf"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0305fc1ec6b1e5052d30d9c1d5c807081a7bd0cae46a33d03117082e91908c"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc611e6ac0fa00a41de19c3bf6391a05ea201d2d22b757d63f5491ec0e67faa"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5ffe0d7f7bfcfa3b2585776ecf11da2e01c317027c8573c78ebcb8985279e23"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e7edb8ec12c100d5458d15b1e47c0eb30ad606a05641f19af7563bc3d1608c14"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:de291633fb9303555793cc544d4a86e858da529b7d0b752bcaf721ae1d74b2c9"}, + {file = "tokenizers-0.20.1.tar.gz", hash = "sha256:84edcc7cdeeee45ceedb65d518fffb77aec69311c9c8e30f77ad84da3025f002"}, ] [package.dependencies] @@ -4255,13 +4449,13 @@ files = [ [[package]] name = "tomli" -version = "2.0.1" +version = "2.0.2" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] [[package]] @@ -4338,24 +4532,24 @@ typing-extensions = ">=3.7.4.3" [[package]] name = "types-protobuf" -version = "5.27.0.20240907" +version = "5.28.0.20240924" description = "Typing stubs for protobuf" optional = false python-versions = ">=3.8" files = [ - {file = "types-protobuf-5.27.0.20240907.tar.gz", hash = "sha256:bb6f90f66b18d4d1c75667b6586334b0573a6fcee5eb0142a7348a765a7cbadc"}, - {file = "types_protobuf-5.27.0.20240907-py3-none-any.whl", hash = "sha256:5443270534cc8072909ef7ad9e1421ccff924ca658749a6396c0c43d64c32676"}, + {file = "types-protobuf-5.28.0.20240924.tar.gz", hash = "sha256:d181af8a256e5a91ce8d5adb53496e880efd9144c7d54483e3653332b60296f0"}, + {file = "types_protobuf-5.28.0.20240924-py3-none-any.whl", hash = "sha256:5cecf612ccdefb7dc95f7a51fb502902f20fc2e6681cd500184aaa1b3931d6a7"}, ] [[package]] name = "types-python-dateutil" -version = "2.9.0.20240906" +version = "2.9.0.20241003" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, - {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, + {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, + {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, ] [[package]] @@ -4371,13 +4565,13 @@ files = [ [[package]] name = "tzdata" -version = "2024.1" +version = "2024.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] [[package]] @@ -4527,108 +4721,109 @@ files = [ [[package]] name = "yarl" -version = "1.11.1" +version = "1.14.0" description = "Yet another URL library" optional = false python-versions = ">=3.8" files = [ - {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:400cd42185f92de559d29eeb529e71d80dfbd2f45c36844914a4a34297ca6f00"}, - {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8258c86f47e080a258993eed877d579c71da7bda26af86ce6c2d2d072c11320d"}, - {file = "yarl-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2164cd9725092761fed26f299e3f276bb4b537ca58e6ff6b252eae9631b5c96e"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08ea567c16f140af8ddc7cb58e27e9138a1386e3e6e53982abaa6f2377b38cc"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:768ecc550096b028754ea28bf90fde071c379c62c43afa574edc6f33ee5daaec"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2909fa3a7d249ef64eeb2faa04b7957e34fefb6ec9966506312349ed8a7e77bf"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01a8697ec24f17c349c4f655763c4db70eebc56a5f82995e5e26e837c6eb0e49"}, - {file = "yarl-1.11.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e286580b6511aac7c3268a78cdb861ec739d3e5a2a53b4809faef6b49778eaff"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4179522dc0305c3fc9782549175c8e8849252fefeb077c92a73889ccbcd508ad"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:27fcb271a41b746bd0e2a92182df507e1c204759f460ff784ca614e12dd85145"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f61db3b7e870914dbd9434b560075e0366771eecbe6d2b5561f5bc7485f39efd"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:c92261eb2ad367629dc437536463dc934030c9e7caca861cc51990fe6c565f26"}, - {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d95b52fbef190ca87d8c42f49e314eace4fc52070f3dfa5f87a6594b0c1c6e46"}, - {file = "yarl-1.11.1-cp310-cp310-win32.whl", hash = "sha256:489fa8bde4f1244ad6c5f6d11bb33e09cf0d1d0367edb197619c3e3fc06f3d91"}, - {file = "yarl-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:476e20c433b356e16e9a141449f25161e6b69984fb4cdbd7cd4bd54c17844998"}, - {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:946eedc12895873891aaceb39bceb484b4977f70373e0122da483f6c38faaa68"}, - {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21a7c12321436b066c11ec19c7e3cb9aec18884fe0d5b25d03d756a9e654edfe"}, - {file = "yarl-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c35f493b867912f6fda721a59cc7c4766d382040bdf1ddaeeaa7fa4d072f4675"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25861303e0be76b60fddc1250ec5986c42f0a5c0c50ff57cc30b1be199c00e63"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4b53f73077e839b3f89c992223f15b1d2ab314bdbdf502afdc7bb18e95eae27"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:327c724b01b8641a1bf1ab3b232fb638706e50f76c0b5bf16051ab65c868fac5"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4307d9a3417eea87715c9736d050c83e8c1904e9b7aada6ce61b46361b733d92"}, - {file = "yarl-1.11.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a28bed68ab8fb7e380775f0029a079f08a17799cb3387a65d14ace16c12e2b"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:067b961853c8e62725ff2893226fef3d0da060656a9827f3f520fb1d19b2b68a"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8215f6f21394d1f46e222abeb06316e77ef328d628f593502d8fc2a9117bde83"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:498442e3af2a860a663baa14fbf23fb04b0dd758039c0e7c8f91cb9279799bff"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:69721b8effdb588cb055cc22f7c5105ca6fdaa5aeb3ea09021d517882c4a904c"}, - {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e969fa4c1e0b1a391f3fcbcb9ec31e84440253325b534519be0d28f4b6b533e"}, - {file = "yarl-1.11.1-cp311-cp311-win32.whl", hash = "sha256:7d51324a04fc4b0e097ff8a153e9276c2593106a811704025bbc1d6916f45ca6"}, - {file = "yarl-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:15061ce6584ece023457fb8b7a7a69ec40bf7114d781a8c4f5dcd68e28b5c53b"}, - {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a4264515f9117be204935cd230fb2a052dd3792789cc94c101c535d349b3dab0"}, - {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f41fa79114a1d2eddb5eea7b912d6160508f57440bd302ce96eaa384914cd265"}, - {file = "yarl-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:02da8759b47d964f9173c8675710720b468aa1c1693be0c9c64abb9d8d9a4867"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9361628f28f48dcf8b2f528420d4d68102f593f9c2e592bfc842f5fb337e44fd"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b91044952da03b6f95fdba398d7993dd983b64d3c31c358a4c89e3c19b6f7aef"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74db2ef03b442276d25951749a803ddb6e270d02dda1d1c556f6ae595a0d76a8"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e975a2211952a8a083d1b9d9ba26472981ae338e720b419eb50535de3c02870"}, - {file = "yarl-1.11.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aef97ba1dd2138112890ef848e17d8526fe80b21f743b4ee65947ea184f07a2"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a7915ea49b0c113641dc4d9338efa9bd66b6a9a485ffe75b9907e8573ca94b84"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:504cf0d4c5e4579a51261d6091267f9fd997ef58558c4ffa7a3e1460bd2336fa"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3de5292f9f0ee285e6bd168b2a77b2a00d74cbcfa420ed078456d3023d2f6dff"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34e1e30f1774fa35d37202bbeae62423e9a79d78d0874e5556a593479fdf239"}, - {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66b63c504d2ca43bf7221a1f72fbe981ff56ecb39004c70a94485d13e37ebf45"}, - {file = "yarl-1.11.1-cp312-cp312-win32.whl", hash = "sha256:a28b70c9e2213de425d9cba5ab2e7f7a1c8ca23a99c4b5159bf77b9c31251447"}, - {file = "yarl-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:17b5a386d0d36fb828e2fb3ef08c8829c1ebf977eef88e5367d1c8c94b454639"}, - {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1fa2e7a406fbd45b61b4433e3aa254a2c3e14c4b3186f6e952d08a730807fa0c"}, - {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:750f656832d7d3cb0c76be137ee79405cc17e792f31e0a01eee390e383b2936e"}, - {file = "yarl-1.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b8486f322d8f6a38539136a22c55f94d269addb24db5cb6f61adc61eabc9d93"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fce4da3703ee6048ad4138fe74619c50874afe98b1ad87b2698ef95bf92c96d"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed653638ef669e0efc6fe2acb792275cb419bf9cb5c5049399f3556995f23c7"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18ac56c9dd70941ecad42b5a906820824ca72ff84ad6fa18db33c2537ae2e089"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:688654f8507464745ab563b041d1fb7dab5d9912ca6b06e61d1c4708366832f5"}, - {file = "yarl-1.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4973eac1e2ff63cf187073cd4e1f1148dcd119314ab79b88e1b3fad74a18c9d5"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:964a428132227edff96d6f3cf261573cb0f1a60c9a764ce28cda9525f18f7786"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6d23754b9939cbab02c63434776df1170e43b09c6a517585c7ce2b3d449b7318"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c2dc4250fe94d8cd864d66018f8344d4af50e3758e9d725e94fecfa27588ff82"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09696438cb43ea6f9492ef237761b043f9179f455f405279e609f2bc9100212a"}, - {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:999bfee0a5b7385a0af5ffb606393509cfde70ecca4f01c36985be6d33e336da"}, - {file = "yarl-1.11.1-cp313-cp313-win32.whl", hash = "sha256:ce928c9c6409c79e10f39604a7e214b3cb69552952fbda8d836c052832e6a979"}, - {file = "yarl-1.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:501c503eed2bb306638ccb60c174f856cc3246c861829ff40eaa80e2f0330367"}, - {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dae7bd0daeb33aa3e79e72877d3d51052e8b19c9025ecf0374f542ea8ec120e4"}, - {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3ff6b1617aa39279fe18a76c8d165469c48b159931d9b48239065767ee455b2b"}, - {file = "yarl-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3257978c870728a52dcce8c2902bf01f6c53b65094b457bf87b2644ee6238ddc"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f351fa31234699d6084ff98283cb1e852270fe9e250a3b3bf7804eb493bd937"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8aef1b64da41d18026632d99a06b3fefe1d08e85dd81d849fa7c96301ed22f1b"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7175a87ab8f7fbde37160a15e58e138ba3b2b0e05492d7351314a250d61b1591"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba444bdd4caa2a94456ef67a2f383710928820dd0117aae6650a4d17029fa25e"}, - {file = "yarl-1.11.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ea9682124fc062e3d931c6911934a678cb28453f957ddccf51f568c2f2b5e05"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8418c053aeb236b20b0ab8fa6bacfc2feaaf7d4683dd96528610989c99723d5f"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:61a5f2c14d0a1adfdd82258f756b23a550c13ba4c86c84106be4c111a3a4e413"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f3a6d90cab0bdf07df8f176eae3a07127daafcf7457b997b2bf46776da2c7eb7"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:077da604852be488c9a05a524068cdae1e972b7dc02438161c32420fb4ec5e14"}, - {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:15439f3c5c72686b6c3ff235279630d08936ace67d0fe5c8d5bbc3ef06f5a420"}, - {file = "yarl-1.11.1-cp38-cp38-win32.whl", hash = "sha256:238a21849dd7554cb4d25a14ffbfa0ef380bb7ba201f45b144a14454a72ffa5a"}, - {file = "yarl-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:67459cf8cf31da0e2cbdb4b040507e535d25cfbb1604ca76396a3a66b8ba37a6"}, - {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:884eab2ce97cbaf89f264372eae58388862c33c4f551c15680dd80f53c89a269"}, - {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a336eaa7ee7e87cdece3cedb395c9657d227bfceb6781295cf56abcd3386a26"}, - {file = "yarl-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87f020d010ba80a247c4abc335fc13421037800ca20b42af5ae40e5fd75e7909"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:637c7ddb585a62d4469f843dac221f23eec3cbad31693b23abbc2c366ad41ff4"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48dfd117ab93f0129084577a07287376cc69c08138694396f305636e229caa1a"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e0ae31fb5ccab6eda09ba1494e87eb226dcbd2372dae96b87800e1dcc98804"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f46f81501160c28d0c0b7333b4f7be8983dbbc161983b6fb814024d1b4952f79"}, - {file = "yarl-1.11.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04293941646647b3bfb1719d1d11ff1028e9c30199509a844da3c0f5919dc520"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:250e888fa62d73e721f3041e3a9abf427788a1934b426b45e1b92f62c1f68366"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e8f63904df26d1a66aabc141bfd258bf738b9bc7bc6bdef22713b4f5ef789a4c"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:aac44097d838dda26526cffb63bdd8737a2dbdf5f2c68efb72ad83aec6673c7e"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:267b24f891e74eccbdff42241c5fb4f974de2d6271dcc7d7e0c9ae1079a560d9"}, - {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6907daa4b9d7a688063ed098c472f96e8181733c525e03e866fb5db480a424df"}, - {file = "yarl-1.11.1-cp39-cp39-win32.whl", hash = "sha256:14438dfc5015661f75f85bc5adad0743678eefee266ff0c9a8e32969d5d69f74"}, - {file = "yarl-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:94d0caaa912bfcdc702a4204cd5e2bb01eb917fc4f5ea2315aa23962549561b0"}, - {file = "yarl-1.11.1-py3-none-any.whl", hash = "sha256:72bf26f66456baa0584eff63e44545c9f0eaed9b73cb6601b647c91f14c11f38"}, - {file = "yarl-1.11.1.tar.gz", hash = "sha256:1bb2d9e212fb7449b8fb73bc461b51eaa17cc8430b4a87d87be7b25052d92f53"}, + {file = "yarl-1.14.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1bfc25aa6a7c99cf86564210f79a0b7d4484159c67e01232b116e445b3036547"}, + {file = "yarl-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0cf21f46a15d445417de8fc89f2568852cf57fe8ca1ab3d19ddb24d45c0383ae"}, + {file = "yarl-1.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1dda53508df0de87b6e6b0a52d6718ff6c62a5aca8f5552748404963df639269"}, + {file = "yarl-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:587c3cc59bc148a9b1c07a019346eda2549bc9f468acd2f9824d185749acf0a6"}, + {file = "yarl-1.14.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3007a5b75cb50140708420fe688c393e71139324df599434633019314ceb8b59"}, + {file = "yarl-1.14.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06ff23462398333c78b6f4f8d3d70410d657a471c2c5bbe6086133be43fc8f1a"}, + {file = "yarl-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689a99a42ee4583fcb0d3a67a0204664aa1539684aed72bdafcbd505197a91c4"}, + {file = "yarl-1.14.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0547ab1e9345dc468cac8368d88ea4c5bd473ebc1d8d755347d7401982b5dd8"}, + {file = "yarl-1.14.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:742aef0a99844faaac200564ea6f5e08facb285d37ea18bd1a5acf2771f3255a"}, + {file = "yarl-1.14.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:176110bff341b6730f64a1eb3a7070e12b373cf1c910a9337e7c3240497db76f"}, + {file = "yarl-1.14.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:46a9772a1efa93f9cd170ad33101c1817c77e0e9914d4fe33e2da299d7cf0f9b"}, + {file = "yarl-1.14.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ee2c68e4f2dd1b1c15b849ba1c96fac105fca6ffdb7c1e8be51da6fabbdeafb9"}, + {file = "yarl-1.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:047b258e00b99091b6f90355521f026238c63bd76dcf996d93527bb13320eefd"}, + {file = "yarl-1.14.0-cp310-cp310-win32.whl", hash = "sha256:0aa92e3e30a04f9462a25077db689c4ac5ea9ab6cc68a2e563881b987d42f16d"}, + {file = "yarl-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:d9baec588f015d0ee564057aa7574313c53a530662ffad930b7886becc85abdf"}, + {file = "yarl-1.14.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:07f9eaf57719d6721ab15805d85f4b01a5b509a0868d7320134371bcb652152d"}, + {file = "yarl-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c14b504a74e58e2deb0378b3eca10f3d076635c100f45b113c18c770b4a47a50"}, + {file = "yarl-1.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:16a682a127930f3fc4e42583becca6049e1d7214bcad23520c590edd741d2114"}, + {file = "yarl-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73bedd2be05f48af19f0f2e9e1353921ce0c83f4a1c9e8556ecdcf1f1eae4892"}, + {file = "yarl-1.14.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3ab950f8814f3b7b5e3eebc117986f817ec933676f68f0a6c5b2137dd7c9c69"}, + {file = "yarl-1.14.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b693c63e7e64b524f54aa4888403c680342d1ad0d97be1707c531584d6aeeb4f"}, + {file = "yarl-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85cb3e40eaa98489f1e2e8b29f5ad02ee1ee40d6ce6b88d50cf0f205de1d9d2c"}, + {file = "yarl-1.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f24f08b6c9b9818fd80612c97857d28f9779f0d1211653ece9844fc7b414df2"}, + {file = "yarl-1.14.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:29a84a46ec3ebae7a1c024c055612b11e9363a8a23238b3e905552d77a2bc51b"}, + {file = "yarl-1.14.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5cd5dad8366e0168e0fd23d10705a603790484a6dbb9eb272b33673b8f2cce72"}, + {file = "yarl-1.14.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a152751af7ef7b5d5fa6d215756e508dd05eb07d0cf2ba51f3e740076aa74373"}, + {file = "yarl-1.14.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3d569f877ed9a708e4c71a2d13d2940cb0791da309f70bd970ac1a5c088a0a92"}, + {file = "yarl-1.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6a615cad11ec3428020fb3c5a88d85ce1b5c69fd66e9fcb91a7daa5e855325dd"}, + {file = "yarl-1.14.0-cp311-cp311-win32.whl", hash = "sha256:bab03192091681d54e8225c53f270b0517637915d9297028409a2a5114ff4634"}, + {file = "yarl-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:985623575e5c4ea763056ffe0e2d63836f771a8c294b3de06d09480538316b13"}, + {file = "yarl-1.14.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fc2c80bc87fba076e6cbb926216c27fba274dae7100a7b9a0983b53132dd99f2"}, + {file = "yarl-1.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:55c144d363ad4626ca744556c049c94e2b95096041ac87098bb363dcc8635e8d"}, + {file = "yarl-1.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b03384eed107dbeb5f625a99dc3a7de8be04fc8480c9ad42fccbc73434170b20"}, + {file = "yarl-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f72a0d746d38cb299b79ce3d4d60ba0892c84bbc905d0d49c13df5bace1b65f8"}, + {file = "yarl-1.14.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8648180b34faaea4aa5b5ca7e871d9eb1277033fa439693855cf0ea9195f85f1"}, + {file = "yarl-1.14.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9557c9322aaa33174d285b0c1961fb32499d65ad1866155b7845edc876c3c835"}, + {file = "yarl-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f50eb3837012a937a2b649ec872b66ba9541ad9d6f103ddcafb8231cfcafd22"}, + {file = "yarl-1.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8892fa575ac9b1b25fae7b221bc4792a273877b9b56a99ee2d8d03eeb3dbb1d2"}, + {file = "yarl-1.14.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e6a2c5c5bb2556dfbfffffc2bcfb9c235fd2b566d5006dfb2a37afc7e3278a07"}, + {file = "yarl-1.14.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ab3abc0b78a5dfaa4795a6afbe7b282b6aa88d81cf8c1bb5e394993d7cae3457"}, + {file = "yarl-1.14.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:47eede5d11d669ab3759b63afb70d28d5328c14744b8edba3323e27dc52d298d"}, + {file = "yarl-1.14.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fe4d2536c827f508348d7b40c08767e8c7071614250927233bf0c92170451c0a"}, + {file = "yarl-1.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0fd7b941dd1b00b5f0acb97455fea2c4b7aac2dd31ea43fb9d155e9bc7b78664"}, + {file = "yarl-1.14.0-cp312-cp312-win32.whl", hash = "sha256:99ff3744f5fe48288be6bc402533b38e89749623a43208e1d57091fc96b783b9"}, + {file = "yarl-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ca3894e9e9f72da93544f64988d9c052254a338a9f855165f37f51edb6591de"}, + {file = "yarl-1.14.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d02d700705d67e09e1f57681f758f0b9d4412eeb70b2eb8d96ca6200b486db3"}, + {file = "yarl-1.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:30600ba5db60f7c0820ef38a2568bb7379e1418ecc947a0f76fd8b2ff4257a97"}, + {file = "yarl-1.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e85d86527baebb41a214cc3b45c17177177d900a2ad5783dbe6f291642d4906f"}, + {file = "yarl-1.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37001e5d4621cef710c8dc1429ca04e189e572f128ab12312eab4e04cf007132"}, + {file = "yarl-1.14.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4f4547944d4f5cfcdc03f3f097d6f05bbbc915eaaf80a2ee120d0e756de377d"}, + {file = "yarl-1.14.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ff4c819757f9bdb35de049a509814d6ce851fe26f06eb95a392a5640052482"}, + {file = "yarl-1.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68ac1a09392ed6e3fd14be880d39b951d7b981fd135416db7d18a6208c536561"}, + {file = "yarl-1.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96952f642ac69075e44c7d0284528938fdff39422a1d90d3e45ce40b72e5e2d9"}, + {file = "yarl-1.14.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a56fbe3d7f3bce1d060ea18d2413a2ca9ca814eea7cedc4d247b5f338d54844e"}, + {file = "yarl-1.14.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e2637d75e92763d1322cb5041573279ec43a80c0f7fbbd2d64f5aee98447b17"}, + {file = "yarl-1.14.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9abe80ae2c9d37c17599557b712e6515f4100a80efb2cda15f5f070306477cd2"}, + {file = "yarl-1.14.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:217a782020b875538eebf3948fac3a7f9bbbd0fd9bf8538f7c2ad7489e80f4e8"}, + {file = "yarl-1.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9cfef3f14f75bf6aba73a76caf61f9d00865912a04a4393c468a7ce0981b519"}, + {file = "yarl-1.14.0-cp313-cp313-win32.whl", hash = "sha256:d8361c7d04e6a264481f0b802e395f647cd3f8bbe27acfa7c12049efea675bd1"}, + {file = "yarl-1.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:bc24f968b82455f336b79bf37dbb243b7d76cd40897489888d663d4e028f5069"}, + {file = "yarl-1.14.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:91d875f75fabf76b3018c5f196bf3d308ed2b49ddcb46c1576d6b075754a1393"}, + {file = "yarl-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4009def9be3a7e5175db20aa2d7307ecd00bbf50f7f0f989300710eee1d0b0b9"}, + {file = "yarl-1.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:582cedde49603f139be572252a318b30dc41039bc0b8165f070f279e5d12187f"}, + {file = "yarl-1.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbd9ff43a04f8ffe8a959a944c2dca10d22f5f99fc6a459f49c3ebfb409309d9"}, + {file = "yarl-1.14.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9f805e37ed16cc212fdc538a608422d7517e7faf539bedea4fe69425bc55d76"}, + {file = "yarl-1.14.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95e16e9eaa2d7f5d87421b8fe694dd71606aa61d74b824c8d17fc85cc51983d1"}, + {file = "yarl-1.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:816d24f584edefcc5ca63428f0b38fee00b39fe64e3c5e558f895a18983efe96"}, + {file = "yarl-1.14.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd2660c01367eb3ef081b8fa0a5da7fe767f9427aa82023a961a5f28f0d4af6c"}, + {file = "yarl-1.14.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:94b2bb9bcfd5be9d27004ea4398fb640373dd0c1a9e219084f42c08f77a720ab"}, + {file = "yarl-1.14.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c2089a9afef887664115f7fa6d3c0edd6454adaca5488dba836ca91f60401075"}, + {file = "yarl-1.14.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2192f718db4a8509f63dd6d950f143279211fa7e6a2c612edc17d85bf043d36e"}, + {file = "yarl-1.14.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:8385ab36bf812e9d37cf7613999a87715f27ef67a53f0687d28c44b819df7cb0"}, + {file = "yarl-1.14.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b4c1ecba93e7826dc71ddba75fb7740cdb52e7bd0be9f03136b83f54e6a1f511"}, + {file = "yarl-1.14.0-cp38-cp38-win32.whl", hash = "sha256:e749af6c912a7bb441d105c50c1a3da720474e8acb91c89350080dd600228f0e"}, + {file = "yarl-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:147e36331f6f63e08a14640acf12369e041e0751bb70d9362df68c2d9dcf0c87"}, + {file = "yarl-1.14.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a9f917966d27f7ce30039fe8d900f913c5304134096554fd9bea0774bcda6d1"}, + {file = "yarl-1.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a2f8fb7f944bcdfecd4e8d855f84c703804a594da5123dd206f75036e536d4d"}, + {file = "yarl-1.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f4e475f29a9122f908d0f1f706e1f2fc3656536ffd21014ff8a6f2e1b14d1d8"}, + {file = "yarl-1.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8089d4634d8fa2b1806ce44fefa4979b1ab2c12c0bc7ef3dfa45c8a374811348"}, + {file = "yarl-1.14.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b16f6c75cffc2dc0616ea295abb0e1967601bd1fb1e0af6a1de1c6c887f3439"}, + {file = "yarl-1.14.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498b3c55087b9d762636bca9b45f60d37e51d24341786dc01b81253f9552a607"}, + {file = "yarl-1.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3f8bfc1db82589ef965ed234b87de30d140db8b6dc50ada9e33951ccd8ec07a"}, + {file = "yarl-1.14.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:625f207b1799e95e7c823f42f473c1e9dbfb6192bd56bba8695656d92be4535f"}, + {file = "yarl-1.14.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:781e2495e408a81e4eaeedeb41ba32b63b1980dddf8b60dbbeff6036bcd35049"}, + {file = "yarl-1.14.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:659603d26d40dd4463200df9bfbc339fbfaed3fe32e5c432fe1dc2b5d4aa94b4"}, + {file = "yarl-1.14.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4e0d45ebf975634468682c8bec021618b3ad52c37619e5c938f8f831fa1ac5c0"}, + {file = "yarl-1.14.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a2e4725a08cb2b4794db09e350c86dee18202bb8286527210e13a1514dc9a59a"}, + {file = "yarl-1.14.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:19268b4fec1d7760134f2de46ef2608c2920134fb1fa61e451f679e41356dc55"}, + {file = "yarl-1.14.0-cp39-cp39-win32.whl", hash = "sha256:337912bcdcf193ade64b9aae5a4017a0a1950caf8ca140362e361543c6773f21"}, + {file = "yarl-1.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:b6d0147574ce2e7b812c989e50fa72bbc5338045411a836bd066ce5fc8ac0bce"}, + {file = "yarl-1.14.0-py3-none-any.whl", hash = "sha256:c8ed4034f0765f8861620c1f2f2364d2e58520ea288497084dae880424fc0d9f"}, + {file = "yarl-1.14.0.tar.gz", hash = "sha256:88c7d9d58aab0724b979ab5617330acb1c7030b79379c8138c1c8c94e121d1b3"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" +propcache = ">=0.2.0" [[package]] name = "zipp" @@ -4651,5 +4846,5 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" -python-versions = ">=3.11,<3.12" -content-hash = "0f44caacfcff3c513b0374bd9e4d787576700184247c2572a31f1033083b21b9" +python-versions = ">=3.12,<3.13" +content-hash = "e055fdbc956dc6ff6ceeaf5ebcbd8a87075e058deef33b392068d139f13c983e" diff --git a/agents-api/pyproject.toml b/agents-api/pyproject.toml index 3d7a7c925..eee143ec4 100644 --- a/agents-api/pyproject.toml +++ b/agents-api/pyproject.toml @@ -7,7 +7,7 @@ readme = "README.md" packages = [{include = "agents_api"}] [tool.poetry.dependencies] -python = ">=3.11,<3.12" +python = ">=3.12,<3.13" fastapi = "^0.112.1" pycozo = {extras = ["embedded"], version = "^0.7.6"} uvicorn = "^0.30.6" @@ -18,7 +18,7 @@ openai = "^1.41.0" httpx = "^0.27.0" sentry-sdk = {extras = ["fastapi"], version = "^2.13.0"} temporalio = "^1.7.0" -pydantic = {extras = ["email"], version = "^2.8.2"} +pydantic = {extras = ["email"], version = "^2.9.2"} arrow = "^1.3.0" jinja2 = "^3.1.4" jinja2schema = "^0.1.4" @@ -38,19 +38,21 @@ scalar-fastapi = "^1.0.3" sse-starlette = "^2.1.3" anyio = "^4.4.0" python-box = {extras = ["toml"], version = "^7.2.0"} +prometheus-fastapi-instrumentator = "^7.0.0" [tool.poetry.group.dev.dependencies] ipython = "^8.26.0" ruff = "^0.5.5" datamodel-code-generator = "^0.25.9" cozo-migrate = "^0.2.0" poethepoet = "^0.25.1" -pytype = ">=2024.4.11" +pytype = ">=2024.9.13" pyjwt = "^2.8.0" ward = "^0.68.0b0" jupyterlab = "^4.2.4" ipywidgets = "^8.1.3" wat-inspector = "^0.2.1" +julep = ">=1.0,<2.0" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/agents-api/pytype.toml b/agents-api/pytype.toml index 2371cea58..b591601cc 100644 --- a/agents-api/pytype.toml +++ b/agents-api/pytype.toml @@ -28,7 +28,7 @@ platform = 'linux' pythonpath = '.' # Python version (major.minor) of the target code. -python_version = '3.11' +python_version = '3.12' # Don't allow None to match bool. This flag is temporary and will be removed # once this behavior is enabled by default. @@ -61,4 +61,4 @@ no_return_any = false # Opt-in: Require decoration with @typing.override when overriding a method or # nested class attribute of a parent class. -require_override_decorator = false \ No newline at end of file +require_override_decorator = false diff --git a/agents-api/tests/fixtures.py b/agents-api/tests/fixtures.py index 4cc5c2674..9ae198c78 100644 --- a/agents-api/tests/fixtures.py +++ b/agents-api/tests/fixtures.py @@ -36,8 +36,7 @@ from agents_api.models.user.create_user import create_user from agents_api.models.user.delete_user import delete_user from agents_api.web import app - -from .utils import patch_embed_acompletion as patch_embed_acompletion_ctx +from tests.utils import patch_embed_acompletion as patch_embed_acompletion_ctx EMBEDDING_SIZE: int = 1024 @@ -48,6 +47,8 @@ def cozo_client(migrations_dir: str = "./migrations"): # and initialize the schema. client = CozoClient() + setattr(app.state, "cozo_client", client) + init(client) apply(client, migrations_dir=migrations_dir, all_=True) diff --git a/agents-api/tests/sample_tasks/integration_example.yaml b/agents-api/tests/sample_tasks/integration_example.yaml new file mode 100644 index 000000000..4efacff79 --- /dev/null +++ b/agents-api/tests/sample_tasks/integration_example.yaml @@ -0,0 +1,44 @@ +name: Simple multi step task + +input_schema: + type: object + properties: + topics: + type: array + items: + type: string + +tools: + - type: function + function: + name: generate_questions + description: Generate a list of questions for a given topic + parameters: + type: object + properties: + topic: + type: string + description: The topic to generate questions for + + - type: integration + name: duckduckgo_search + integration: + provider: duckduckgo + setup: + api_key: + arguments: + language: en-US + +main: + - foreach: + in: _["topics"] + do: + prompt: + - role: system + content: |- + Generate a list of 10 questions for the topic {{_}} as valid yaml. + unwrap: true + + - tool: duckduckgo_search + arguments: + query: "'\n'.join(_)" diff --git a/agents-api/tests/test_activities.py b/agents-api/tests/test_activities.py index 98dfc97b5..6f65cd034 100644 --- a/agents-api/tests/test_activities.py +++ b/agents-api/tests/test_activities.py @@ -7,6 +7,7 @@ from agents_api.clients import temporal from agents_api.env import temporal_task_queue from agents_api.workflows.demo import DemoWorkflow +from agents_api.workflows.task_execution.helpers import DEFAULT_RETRY_POLICY from .fixtures import ( cozo_client, @@ -49,6 +50,7 @@ async def _(): args=[1, 2], id=str(uuid4()), task_queue=temporal_task_queue, + retry_policy=DEFAULT_RETRY_POLICY, ) assert result == 3 diff --git a/agents-api/tests/test_docs_queries.py b/agents-api/tests/test_docs_queries.py index fcf7f9bd6..c5826df43 100644 --- a/agents-api/tests/test_docs_queries.py +++ b/agents-api/tests/test_docs_queries.py @@ -1,6 +1,6 @@ # Tests for entry queries -from ward import test +from ward import skip, test from agents_api.autogen.openapi_model import CreateDocRequest from agents_api.models.docs.create_doc import create_doc @@ -41,6 +41,7 @@ def _( ) +@skip("Execute embedding workflow to fix this test and other docs tests") @test("model: get docs") def _(client=cozo_client, doc=test_doc, developer_id=test_developer_id): get_doc( diff --git a/agents-api/tests/test_docs_routes.py b/agents-api/tests/test_docs_routes.py index d4b677d05..d61bfbcb7 100644 --- a/agents-api/tests/test_docs_routes.py +++ b/agents-api/tests/test_docs_routes.py @@ -1,6 +1,6 @@ from ward import test -from .fixtures import ( +from tests.fixtures import ( make_request, patch_embed_acompletion, test_agent, @@ -8,7 +8,7 @@ test_user, test_user_doc, ) -from .utils import patch_testing_temporal +from tests.utils import patch_testing_temporal @test("route: create user doc") diff --git a/agents-api/tests/test_execution_queries.py b/agents-api/tests/test_execution_queries.py index 29ddcbd86..42904776d 100644 --- a/agents-api/tests/test_execution_queries.py +++ b/agents-api/tests/test_execution_queries.py @@ -15,8 +15,7 @@ from agents_api.models.execution.get_execution import get_execution from agents_api.models.execution.list_executions import list_executions from agents_api.models.execution.lookup_temporal_data import lookup_temporal_data - -from .fixtures import ( +from tests.fixtures import ( cozo_client, test_developer_id, test_execution, diff --git a/agents-api/tests/test_execution_workflow.py b/agents-api/tests/test_execution_workflow.py index 44f6d6ed4..f8a89cb62 100644 --- a/agents-api/tests/test_execution_workflow.py +++ b/agents-api/tests/test_execution_workflow.py @@ -14,9 +14,8 @@ ) from agents_api.models.task.create_task import create_task from agents_api.routers.tasks.create_task_execution import start_execution - -from .fixtures import cozo_client, test_agent, test_developer_id -from .utils import patch_testing_temporal +from tests.fixtures import cozo_client, test_agent, test_developer_id +from tests.utils import patch_integration_service, patch_testing_temporal EMBEDDING_SIZE: int = 1024 @@ -338,7 +337,7 @@ async def _( assert result["value"] == data.input["test"] -# @test("workflow: log step") +@test("workflow: log step") async def _( client=cozo_client, developer_id=test_developer_id, @@ -441,6 +440,237 @@ async def _( assert result["hello"] == data.input["test"] +@test("workflow: system call - list agents") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "Test system tool task", + "description": "List agents using system call", + "input_schema": {"type": "object"}, + "tools": [ + { + "name": "list_agents", + "description": "List all agents", + "type": "system", + "system": {"resource": "agent", "operation": "list"}, + }, + ], + "main": [ + { + "tool": "list_agents", + "arguments": { + "limit": "10", + }, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + + result = await handle.result() + assert isinstance(result, list) + # Result's length should be less than or equal to the limit + assert len(result) <= 10 + # Check if all items are agent dictionaries + assert all(isinstance(agent, dict) for agent in result) + # Check if each agent has an 'id' field + assert all("id" in agent for agent in result) + + +@test("workflow: tool call api_call") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={"test": "input"}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "test task", + "description": "test task about", + "input_schema": {"type": "object", "additionalProperties": True}, + "tools": [ + { + "type": "api_call", + "name": "hello", + "api_call": { + "method": "GET", + "url": "https://httpbin.org/get", + }, + } + ], + "main": [ + { + "tool": "hello", + "arguments": { + "params": {"test": "_.test"}, + }, + }, + { + "evaluate": {"hello": "_.json.args.test"}, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + + result = await handle.result() + assert result["hello"] == data.input["test"] + + +@test("workflow: tool call integration dummy") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={"test": "input"}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "test task", + "description": "test task about", + "input_schema": {"type": "object", "additionalProperties": True}, + "tools": [ + { + "type": "integration", + "name": "hello", + "integration": { + "provider": "dummy", + }, + } + ], + "main": [ + { + "tool": "hello", + "arguments": {"test": "_.test"}, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + + result = await handle.result() + assert result["test"] == data.input["test"] + + +@test("workflow: tool call integration mocked weather") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={"test": "input"}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "test task", + "description": "test task about", + "input_schema": {"type": "object", "additionalProperties": True}, + "tools": [ + { + "type": "integration", + "name": "get_weather", + "integration": { + "provider": "weather", + "setup": {"openweathermap_api_key": "test"}, + "arguments": {"test": "fake"}, + }, + } + ], + "main": [ + { + "tool": "get_weather", + "arguments": {"location": "_.test"}, + }, + ], + } + ), + client=client, + ) + + expected_output = {"temperature": 20, "humidity": 60} + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + with patch_integration_service(expected_output) as mock_integration_service: + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + mock_integration_service.assert_called_once() + + result = await handle.result() + assert result == expected_output + + @test("workflow: wait for input step start") async def _( client=cozo_client, @@ -479,7 +709,12 @@ async def _( mock_run_task_execution_workflow.assert_called_once() # Let it run for a bit - await asyncio.sleep(3) + result_coroutine = handle.result() + task = asyncio.create_task(result_coroutine) + try: + await asyncio.wait_for(task, timeout=3) + except asyncio.TimeoutError: + task.cancel() # Get the history history = await handle.fetch_history() @@ -497,12 +732,78 @@ async def _( activity for activity in activities_scheduled if activity ] - future = handle.result() - await future - assert "wait_for_input_step" in activities_scheduled +@test("workflow: foreach wait for input step start") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + data = CreateExecutionRequest(input={"test": "input"}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "test task", + "description": "test task about", + "input_schema": {"type": "object", "additionalProperties": True}, + "main": [ + { + "foreach": { + "in": "'a b c'.split()", + "do": {"wait_for_input": {"info": {"hi": '"bye"'}}}, + }, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + mock_run_task_execution_workflow.assert_called_once() + + # Let it run for a bit + result_coroutine = handle.result() + task = asyncio.create_task(result_coroutine) + try: + await asyncio.wait_for(task, timeout=3) + except asyncio.TimeoutError: + task.cancel() + + # Get the history + history = await handle.fetch_history() + events = [MessageToDict(e) for e in history.events] + assert len(events) > 0 + + activities_scheduled = [ + event.get("activityTaskScheduledEventAttributes", {}) + .get("activityType", {}) + .get("name") + for event in events + if "ACTIVITY_TASK_SCHEDULED" in event["eventType"] + ] + activities_scheduled = [ + activity for activity in activities_scheduled if activity + ] + + assert "for_each_step" in activities_scheduled + + @test("workflow: if-else step") async def _( client=cozo_client, @@ -518,9 +819,9 @@ async def _( "input_schema": {"type": "object", "additionalProperties": True}, "main": [ { - "if": "True", + "if": "False", "then": {"evaluate": {"hello": '"world"'}}, - "else": {"evaluate": {"hello": '"nope"'}}, + "else": {"evaluate": {"hello": "random.randint(0, 10)"}}, }, ], } @@ -548,7 +849,7 @@ async def _( mock_run_task_execution_workflow.assert_called_once() result = await handle.result() - assert result["hello"] == "world" + assert result["hello"] in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @test("workflow: switch step") @@ -818,6 +1119,66 @@ async def _( assert result["role"] == "assistant" +@test("workflow: prompt step unwrap") +async def _( + client=cozo_client, + developer_id=test_developer_id, + agent=test_agent, +): + mock_model_response = ModelResponse( + id="fake_id", + choices=[Choices(message={"role": "assistant", "content": "Hello, world!"})], + created=0, + object="text_completion", + ) + + with patch("agents_api.clients.litellm.acompletion") as acompletion: + acompletion.return_value = mock_model_response + data = CreateExecutionRequest(input={"test": "input"}) + + task = create_task( + developer_id=developer_id, + agent_id=agent.id, + data=CreateTaskRequest( + **{ + "name": "test task", + "description": "test task about", + "input_schema": {"type": "object", "additionalProperties": True}, + "main": [ + { + "prompt": [ + { + "role": "user", + "content": "message", + }, + ], + "unwrap": True, + "settings": {}, + }, + ], + } + ), + client=client, + ) + + async with patch_testing_temporal() as (_, mock_run_task_execution_workflow): + execution, handle = await start_execution( + developer_id=developer_id, + task_id=task.id, + data=data, + client=client, + ) + + assert handle is not None + assert execution.task_id == task.id + assert execution.input == data.input + + mock_run_task_execution_workflow.assert_called_once() + + result = await handle.result() + assert result == "Hello, world!" + + @test("workflow: set and get steps") async def _( client=cozo_client, diff --git a/agents-api/tests/test_task_queries.py b/agents-api/tests/test_task_queries.py index 2399416db..e61489df8 100644 --- a/agents-api/tests/test_task_queries.py +++ b/agents-api/tests/test_task_queries.py @@ -15,8 +15,7 @@ from agents_api.models.task.get_task import get_task from agents_api.models.task.list_tasks import list_tasks from agents_api.models.task.update_task import update_task - -from .fixtures import cozo_client, test_agent, test_developer_id, test_task +from tests.fixtures import cozo_client, test_agent, test_developer_id, test_task @test("model: create task") diff --git a/agents-api/tests/test_task_routes.py b/agents-api/tests/test_task_routes.py index 4ab708560..5d3c2f998 100644 --- a/agents-api/tests/test_task_routes.py +++ b/agents-api/tests/test_task_routes.py @@ -4,14 +4,14 @@ from ward import test -from .fixtures import ( +from tests.fixtures import ( client, make_request, test_agent, test_execution, test_task, ) -from .utils import patch_testing_temporal +from tests.utils import patch_testing_temporal @test("route: unauthorized should fail") diff --git a/agents-api/tests/test_tool_queries.py b/agents-api/tests/test_tool_queries.py index c21b7fbfb..b41125aaf 100644 --- a/agents-api/tests/test_tool_queries.py +++ b/agents-api/tests/test_tool_queries.py @@ -142,6 +142,7 @@ def _( ): update_data = UpdateToolRequest( name="updated_tool", + description="An updated description", type="function", function={ "description": "An updated function that prints hello world", diff --git a/agents-api/tests/test_workflow_routes.py b/agents-api/tests/test_workflow_routes.py index 34aa0101c..d1538535d 100644 --- a/agents-api/tests/test_workflow_routes.py +++ b/agents-api/tests/test_workflow_routes.py @@ -4,8 +4,8 @@ from ward import test -from .fixtures import cozo_client, test_agent, test_developer_id -from .utils import patch_http_client_with_temporal +from tests.fixtures import cozo_client, test_agent, test_developer_id +from tests.utils import patch_http_client_with_temporal @test("workflow route: evaluate step single") diff --git a/agents-api/tests/utils.py b/agents-api/tests/utils.py index 83b864472..dc1007d13 100644 --- a/agents-api/tests/utils.py +++ b/agents-api/tests/utils.py @@ -10,6 +10,7 @@ from agents_api.worker.codec import pydantic_data_converter from agents_api.worker.worker import create_worker +# Replicated here to prevent circular import EMBEDDING_SIZE: int = 1024 @@ -84,10 +85,20 @@ def patch_embed_acompletion(output={"role": "assistant", "content": "Hello, worl object="text_completion", ) - with patch("agents_api.clients.embed.embed") as embed, patch( + with patch("agents_api.clients.litellm.aembedding") as embed, patch( "agents_api.clients.litellm.acompletion" ) as acompletion: embed.return_value = [[1.0] * EMBEDDING_SIZE] acompletion.return_value = mock_model_response yield embed, acompletion + + +@contextmanager +def patch_integration_service(output: dict = {"result": "ok"}): + with patch( + "agents_api.clients.integrations.run_integration_service" + ) as run_integration_service: + run_integration_service.return_value = output + + yield run_integration_service diff --git a/blob-store/.gitignore b/blob-store/.gitignore new file mode 100644 index 000000000..00bcc192e --- /dev/null +++ b/blob-store/.gitignore @@ -0,0 +1 @@ +/s3.json diff --git a/blob-store/Dockerfile b/blob-store/Dockerfile new file mode 100644 index 000000000..c36e8022c --- /dev/null +++ b/blob-store/Dockerfile @@ -0,0 +1,23 @@ +# syntax=docker/dockerfile:1 +# check=error=true + +FROM chrislusf/seaweedfs + +# Install envsubst +ENV BUILD_DEPS="gettext" \ + RUNTIME_DEPS="libintl" + +RUN set -x && \ + apk add --update $RUNTIME_DEPS && \ + apk add --virtual build_deps $BUILD_DEPS && \ + cp /usr/bin/envsubst /usr/local/bin/envsubst && \ + apk del build_deps + +# Expected environment variables: +# - S3_ACCESS_KEY +# - S3_SECRET_KEY + +COPY s3.json.template /s3.json.template +COPY entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/blob-store/docker-compose-ha.yml b/blob-store/docker-compose-ha.yml new file mode 100644 index 000000000..6634357ea --- /dev/null +++ b/blob-store/docker-compose-ha.yml @@ -0,0 +1,82 @@ +name: julep-blob-store + +x-seaweedfs-base: + &seaweedfs-base + image: chrislusf/seaweedfs + profiles: + - blob-store + +services: + seaweedfs-master: + <<: *seaweedfs-base + ports: + - 9333:9333 + - 19333:19333 + command: "master -ip=seaweedfs-master -ip.bind=0.0.0.0 -port=9333 -metricsPort=9321 -raftBootstrap" + healthcheck: + test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:9333/cluster/healthz" ] + interval: 60s + retries: 6 + timeout: 60s + start_period: 30s + start_interval: 10s + + seaweedfs-volume: + <<: *seaweedfs-base + ports: + - 28080:28080 # Since 8080 is already used by agents-api, we use 28080 + - 18081:18080 + command: 'volume -mserver="seaweedfs-master:9333" -dir=/data -ip.bind=0.0.0.0 -port=28080 -ip=seaweedfs-volume -metricsPort=9321 -preStopSeconds=3' + healthcheck: + test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:28080/healthz" ] + interval: 60s + retries: 6 + timeout: 30s + start_period: 30s + start_interval: 10s + + depends_on: + seaweedfs-master: + condition: service_healthy + + volumes: + - seaweedfs_data:/data + + seaweedfs-filer: + <<: *seaweedfs-base + ports: + - 8888:8888 + - 18888:18888 + command: 'filer -master="seaweedfs-master:9333" -ip.bind=0.0.0.0 -port=8888 -ip=seaweedfs-filer -metricsPort=9321' + tty: true + stdin_open: true + healthcheck: + test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:8888/healthz" ] + interval: 60s + retries: 6 + timeout: 30s + start_period: 30s + start_interval: 10s + + depends_on: + seaweedfs-master: + condition: service_healthy + seaweedfs-volume: + condition: service_healthy + + seaweedfs-s3: + <<: *seaweedfs-base + ports: + - 8333:8333 + command: 's3 -filer="seaweedfs-filer:8888" -ip.bind=0.0.0.0 -port=8333 -metricsPort=9321' + depends_on: + seaweedfs-master: + condition: service_healthy + seaweedfs-volume: + condition: service_healthy + seaweedfs-filer: + condition: service_healthy + +volumes: + seaweedfs_data: + external: true diff --git a/blob-store/docker-compose.yml b/blob-store/docker-compose.yml new file mode 100644 index 000000000..4fe9a658e --- /dev/null +++ b/blob-store/docker-compose.yml @@ -0,0 +1,39 @@ +name: julep-blob-store + +services: + seaweedfs: + image: julepai/blob-store:${TAG:-dev} + build: + context: . + dockerfile: Dockerfile + profiles: + - blob-store + + environment: + - S3_ACCESS_KEY=${S3_ACCESS_KEY} + - S3_SECRET_KEY=${S3_SECRET_KEY} + - DEBUG=${DEBUG:-true} + + ports: + - 9333:9333 # master port + - 8333:8333 # s3 port + - 8888:8888 # filer port + - 28080:28080 # volume port + # - 19333:19333 # master grpc port + # - 18081:18080 # volume grpc port + # - 18888:18888 # filer grpc port + command: "-filer -s3 -dir=/data -ip=seaweedfs -ip.bind=0.0.0.0 -metricsPort=9321 -master.raftBootstrap=false -master.port=9333 -master.resumeState=true -volume.port=28080 -volume.index=leveldb -filer.port=8888 -s3.port=8333" + healthcheck: + test: [ "CMD", "wget", "-qSO", "-", "http://0.0.0.0:9333/cluster/healthz" ] + interval: 60s + retries: 6 + timeout: 60s + start_period: 30s + start_interval: 10s + + volumes: + - seaweedfs_data:/data + +volumes: + seaweedfs_data: + external: true diff --git a/blob-store/entrypoint.sh b/blob-store/entrypoint.sh new file mode 100755 index 000000000..156522249 --- /dev/null +++ b/blob-store/entrypoint.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +set -e + +# Check the environment variables +for var_name in S3_ACCESS_KEY S3_SECRET_KEY +do + if [ -z "`eval echo \\\$$var_name`" ]; then + echo "Error: Environment variable '$var_name' is not set." + exit 1 + fi +done + +# Generate the s3.json configuration file +envsubst < /s3.json.template > /s3.json + +if [ "$DEBUG" = "true" ]; then + echo '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' + echo '@@@ Careful: Debug mode is enabled. @@@' + echo '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@' + + echo 'Printing s3.json:' + cat /s3.json +fi + +# Forward all arguments to the seaweedfs binary +exec weed server -s3.config=/s3.json "$@" diff --git a/blob-store/s3.json.template b/blob-store/s3.json.template new file mode 100644 index 000000000..e6c698a1f --- /dev/null +++ b/blob-store/s3.json.template @@ -0,0 +1,33 @@ +{ + "identities": [ + { + "name": "anonymous", + "actions": [ + "Read" + ] + }, + { + "name": "julep", + "credentials": [ + { + "accessKey": "${S3_ACCESS_KEY}", + "secretKey": "${S3_SECRET_KEY}" + } + ], + "actions": [ + "Admin", + "Read", + "List", + "Tagging", + "Write" + ] + } + ], + "accounts": [ + { + "id" : "julep", + "displayName": "Julep", + "emailAddress": "developers@julep.ai" + } + ] +} \ No newline at end of file diff --git a/cookbooks/00-Devfest-Email-Assistant.ipynb b/cookbooks/00-Devfest-Email-Assistant.ipynb new file mode 100644 index 000000000..6182d7152 --- /dev/null +++ b/cookbooks/00-Devfest-Email-Assistant.ipynb @@ -0,0 +1,314 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: julep in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (1.6.0)\n", + "Requirement already satisfied: anyio<5,>=3.5.0 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (4.6.0)\n", + "Requirement already satisfied: distro<2,>=1.7.0 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (1.9.0)\n", + "Requirement already satisfied: httpx<1,>=0.23.0 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (0.27.2)\n", + "Requirement already satisfied: pydantic<3,>=1.9.0 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (2.9.2)\n", + "Requirement already satisfied: sniffio in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (1.3.1)\n", + "Requirement already satisfied: typing-extensions<5,>=4.7 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from julep) (4.12.2)\n", + "Requirement already satisfied: idna>=2.8 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from anyio<5,>=3.5.0->julep) (3.10)\n", + "Requirement already satisfied: certifi in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->julep) (2024.8.30)\n", + "Requirement already satisfied: httpcore==1.* in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from httpx<1,>=0.23.0->julep) (1.0.5)\n", + "Requirement already satisfied: h11<0.15,>=0.13 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->julep) (0.14.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->julep) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /Users/hamadasalhab/Documents/repos/julep-ai/julep/agents-api/.venv/lib/python3.12/site-packages (from pydantic<3,>=1.9.0->julep) (2.23.4)\n" + ] + } + ], + "source": [ + "!pip install julep" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import yaml\n", + "from julep import Julep\n", + "\n", + "api_key = os.getenv(\"JULEP_API_KEY\")\n", + "\n", + "julep = Julep(api_key=api_key, environment=\"dev\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "agent = julep.agents.create(\n", + " name=\"Julep Email Assistant\",\n", + " about=(\n", + " \"You are an agent that handles emails for julep users.\"\n", + " + \" Julep is a platform for creating kick-ass AI agents.\"\n", + " ),\n", + " model=\"gpt-4o\",\n", + " default_settings={\"temperature\": 0.2},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'231366f8-cdc8-423a-a1c6-72d4a300675f'" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "agent.id" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "mailgun_password = os.getenv(\"MAILGUN_PASSWORD\")\n", + "\n", + "task_def = yaml.safe_load(f\"\"\"\n", + "name: Julep Email Assistant\n", + "\n", + "input_schema:\n", + " type: object\n", + " properties:\n", + " from:\n", + " type: string\n", + " to:\n", + " type: string\n", + " subject:\n", + " type: string\n", + " body:\n", + " type: string\n", + "\n", + "tools:\n", + "- name: send_email\n", + " integration:\n", + " provider: email\n", + " setup:\n", + " host: smtp.mailgun.org\n", + " password: {mailgun_password}\n", + " port: 587\n", + " user: postmaster@email.julep.ai\n", + "\n", + "- name: search_docs\n", + " system:\n", + " resource: agent\n", + " subresource: doc\n", + " operation: search\n", + " \n", + "main:\n", + "- prompt: |-\n", + " You are {{{{ agent.name }}}}. {{{{ agent.about }}}}\n", + "\n", + " A user with email address {{{{ _.from }}}} has sent the following inquiry:\n", + " ------\n", + " Subject: {{{{ _.subject }}}}\n", + "\n", + " {{{{ _.body }}}}\n", + " ------\n", + "\n", + " Can you generate a query to search the documentation based on this email?\n", + " Just respond with the query as is and nothing else.\n", + "\n", + " unwrap: true\n", + "\n", + "- tool: search_docs\n", + " arguments:\n", + " agent_id: \"'{agent.id}'\"\n", + " text: _\n", + " \n", + "- prompt: |-\n", + " You are {{{{ agent.name }}}}. {{{{ agent.about }}}}\n", + "\n", + " A user with email address {{{{ inputs[0].from }}}} has sent the following inquiry:\n", + " ------\n", + " Subject: {{{{ inputs[0].subject }}}}\n", + "\n", + " {{{{ inputs[0].body }}}}\n", + " ------\n", + "\n", + " Here are some possibly relevant snippets from the julep documentation:\n", + " {{% for doc in _.docs %}}\n", + " {{% for snippet in doc.snippets %}}\n", + " {{{{ snippet.content }}}}\n", + " {{% endfor %}}\n", + " {{% endfor %}}\n", + " ========\n", + "\n", + " Based on the above info, craft an email body to respond with as a json object.\n", + " The json object must have `subject` and `body` fields.\n", + " response_format:\n", + " type: json_object\n", + " \n", + " unwrap: true\n", + " \n", + "- evaluate:\n", + " subject: \"load_json(_.split('```json')[1].split('```')[0])['subject']\"\n", + " body: \"load_json(_.split('```json')[1].split('```')[0])['body']\"\n", + " \n", + "- tool: send_email\n", + " arguments:\n", + " body: _.body\n", + " from: \"'postmaster@email.julep.ai'\"\n", + " subject: _.subject\n", + " to: inputs[0]['from']\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "task = julep.tasks.create(\n", + " agent_id=agent.id,\n", + " **task_def,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'a942a86d-dfcc-4abd-a8e7-0f502a2e4c67'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "task.id" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "execution = julep.executions.create(\n", + " task_id=task.id,\n", + " input={\"from\": \"diwank@julep.ai\", \"to\": \"help@agents.new\", \"subject\": \"what's up\", \"body\": \"sup\"},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Execution(id='54c1b4d2-c036-4b22-af8c-8c8a81fe41ad', created_at=datetime.datetime(2024, 10, 7, 14, 15, 15, 575516, tzinfo=datetime.timezone.utc), input={'body': 'sup', 'from': 'diwank@julep.ai', 'subject': \"what's up\", 'to': 'help@agents.new'}, status='running', task_id='a942a86d-dfcc-4abd-a8e7-0f502a2e4c67', updated_at=datetime.datetime(2024, 10, 7, 14, 15, 16, 717572, tzinfo=datetime.timezone.utc), error=None, metadata={}, output=None)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "julep.executions.get(execution.id)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Type: init\n", + "output: {'body': 'sup', 'from': 'diwank@julep.ai', 'subject': \"what's up\", 'to': 'help@agents.new'}\n", + "----------------------------------------------------------------------------------------------------\n", + "Type: step\n", + "output: \"what's up\" site:julep.ai/docs\n", + "----------------------------------------------------------------------------------------------------\n", + "Type: step\n", + "output: {'docs': [], 'time': 0.007443666458129883}\n", + "----------------------------------------------------------------------------------------------------\n", + "Type: step\n", + "output: ```json\n", + "{\n", + " \"subject\": \"Hello!\",\n", + " \"body\": \"Hi there! How can I assist you today? If you have any questions or need help with Julep, feel free to let me know!\"\n", + "}\n", + "```\n", + "----------------------------------------------------------------------------------------------------\n", + "Type: step\n", + "output: {'body': 'Hi there! How can I assist you today? If you have any questions or need help with Julep, feel free to let me know!', 'subject': 'Hello!'}\n", + "----------------------------------------------------------------------------------------------------\n", + "Type: finish\n", + "output: {'success': True}\n", + "----------------------------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "execution_transitions = julep.executions.transitions.list(\n", + " execution_id=execution.id).items\n", + "\n", + "for transition in reversed(execution_transitions):\n", + " print(\"Type: \", transition.type)\n", + " print(\"output: \", transition.output)\n", + " print(\"-\" * 100)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/cookbooks/01-Website_Crawler_using_Spider.ipynb b/cookbooks/01-Website_Crawler_using_Spider.ipynb new file mode 100644 index 000000000..c65a3cb40 --- /dev/null +++ b/cookbooks/01-Website_Crawler_using_Spider.ipynb @@ -0,0 +1,322 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \"julep\"\n", + "
\n", + "\n", + "## Task Definition: Spider Crawler Integration without Agents\n", + "\n", + "### Overview\n", + "\n", + "This task is designed to generate a simple Spider Crawler and integrate it with the workflow to scrape data from the web.\n", + "\n", + "### Task Flow\n", + "\n", + "1. **Input**: The user provides a URL to crawl.\n", + "\n", + "2. **Spider Tool Integration**: \n", + " - Create a spider tool that can crawl the web and extract data from the given URL.\n", + "\n", + "3. **Output**: The final output is the extracted data from the given URL.\n", + "\n", + "This task leverages the Spider Crawler tool to extract data from the given URL." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementation\n", + "\n", + "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", + "\n", + "\n", + " \"Open\n", + "\n", + "\n", + "### Additional Information\n", + "\n", + "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", + "\n", + "**Author:** Julep AI \n", + "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Installing the Julep Client" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install julep -U --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### NOTE:\n", + "\n", + "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", + "- Once created, these UUIDs should remain unchanged for simplicity.\n", + "- Altering a UUID will result in the system treating it as a new agent or task.\n", + "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Global UUID is generated for agent and task\n", + "import uuid\n", + "\n", + "AGENT_UUID = uuid.uuid4()\n", + "TASK_UUID = uuid.uuid4() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Julep Client with the API Key" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from julep import Client\n", + "\n", + "api_key = \"\" # Your API key here\n", + "\n", + "# Create a client\n", + "client = Client(api_key=api_key, environment=\"dev\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an \"agent\"\n", + "\n", + "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", + "\n", + "To learn more about the agent, please refer to the [documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#agent)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Defining the agent\n", + "name = \"Jarvis\"\n", + "about = \"The original AI conscious the Iron Man.\"\n", + "default_settings = {\n", + " \"temperature\": 0.7,\n", + " \"top_p\": 1,\n", + " \"min_p\": 0.01,\n", + " \"presence_penalty\": 0,\n", + " \"frequency_penalty\": 0,\n", + " \"length_penalty\": 1.0,\n", + " \"max_tokens\": 150,\n", + "}\n", + "\n", + "\n", + "# Create the agent\n", + "agent = client.agents.create_or_update(\n", + " agent_id=AGENT_UUID,\n", + " name=name,\n", + " about=about,\n", + " model=\"gpt-4o\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining a Task\n", + "\n", + "Tasks in Julep are Github Actions style workflows that define long-running, multi-step actions. \n", + "You can use them to conduct complex actions by defining them step-by-step. They have access to all Julep integrations.\n", + "\n", + "To learn more about tasks, visit [Julep documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#task)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a Task to crawl a website using the Spider Integration tool.\n", + "\n", + "More on how to define a task can be found [here](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# defining the task definition\n", + "task_def = yaml.safe_load(\"\"\"\n", + "name: Agent Crawler\n", + "\n", + "tools:\n", + "- name: spider_crawler\n", + " type: integration\n", + " integration:\n", + " provider: spider\n", + " setup:\n", + " spider_api_key: \"your_spider_api_key\"\n", + "\n", + "main:\n", + "- tool: spider_crawler\n", + " arguments:\n", + " url: '\"https://spider.cloud\"'\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating/Updating a task" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# creating the task object\n", + "task = client.tasks.create_or_update(\n", + " task_id=TASK_UUID,\n", + " agent_id=AGENT_UUID,\n", + " **task_def\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an Execution\n", + "\n", + "An execution is a single run of a task. It is a way to run a task with a specific set of inputs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creates a execution worklow for the Task defined in the yaml file." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# creating an execution object\n", + "execution = client.executions.create(\n", + " task_id=TASK_UUID,\n", + " input={}\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# getting the execution details\n", + "execution = client.executions.get(execution.id)\n", + "#printing the output\n", + "execution.output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Retrieves and lists all the steps of a defined task that have been executed up to that point in time. Unlike streaming, this function does not continuously monitor the execution; it only provides a snapshot of the steps completed so far without displaying real-time updates as the task progresses." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.list(execution_id=execution.id).items" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Continuously monitor and stream the steps of a defined task. It retrieves and displays the transitions or execution steps of the task identified by execution.id in real-time, showing each step sequentially until the task is either completed or an error causes it to terminate." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.stream(execution_id=execution.id)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ai", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbooks/01-Website_Crawler_using_Spider.py b/cookbooks/01-Website_Crawler_using_Spider.py new file mode 100644 index 000000000..69d5785be --- /dev/null +++ b/cookbooks/01-Website_Crawler_using_Spider.py @@ -0,0 +1,76 @@ +import os +import uuid +import yaml +from julep import Client + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = os.getenv("JULEP_API_KEY") +if not api_key: + raise ValueError("JULEP_API_KEY not found in environment variables") + +client = Client(api_key=api_key, environment="dev") + +# Creating an "agent" +name = "Jarvis" +about = "The original AI conscious the Iron Man." + +# Create the agent +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +# Defining a Task +task_def = yaml.safe_load(""" +name: Agent Crawler + +tools: +- name: spider_crawler + type: integration + integration: + provider: spider + setup: + spider_api_key: "{{SPIDER_API_KEY}}" + +main: +- tool: spider_crawler + arguments: + url: '"https://spider.cloud"' +""") + +# Creating/Updating a task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Creating an Execution +execution = client.executions.create( + task_id=TASK_UUID, + input={} +) + +# Waiting for the execution to complete +import time +time.sleep(5) + +# Getting the execution details +execution = client.executions.get(execution.id) +print("Execution output:", execution.output) + +# Listing all the steps of a defined task +transitions = client.executions.transitions.list(execution_id=execution.id).items +print("Execution Steps:") +for transition in transitions: + print(transition) + +# Stream the steps of the defined task +print("Streaming execution transitions:") +print(client.executions.transitions.stream(execution_id=execution.id)) \ No newline at end of file diff --git a/cookbooks/02-Sarcastic_News_Headline_Generator.ipynb b/cookbooks/02-Sarcastic_News_Headline_Generator.ipynb new file mode 100644 index 000000000..fb7957a5f --- /dev/null +++ b/cookbooks/02-Sarcastic_News_Headline_Generator.ipynb @@ -0,0 +1,357 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \"julep\"\n", + "
\n", + "\n", + "## Task Definition: Sarcastic News Headline Generator using Brave Search Integration\n", + "\n", + "### Overview\n", + "\n", + "This task generates a sarcastic news headline on a user-provided topic. It utilizes web search to gather context and information about the topic, then uses this data to create a headline with a sarcastic tone. \n", + "\n", + "### Task Flow\n", + "\n", + "1. **Input**: \n", + " - User provides a topic for the sarcastic news headline (e.g., \"technology\" or \"politics\").\n", + "\n", + "2. **Web Search using Bravesearch Integration**: \n", + " - Conducts a search to find information about the topic, focusing on humorous or quirky content.\n", + " - Gathers relevant context and amusing details for headline generation.\n", + "\n", + "3. **Headline Creation**: \n", + " - Generates a sarcastic news headline based on the topic and gathered information.\n", + " - Combines factual or common perceptions with humor and sarcasm.\n", + " \n", + "4. **Output**: \n", + " - Produces a sarcastic, witty headline on the given topic.\n", + " - Can be used for entertainment or as a creative writing prompt.\n", + "\n", + "### Key Features\n", + "\n", + "- Leverages web search to enhance contextual relevance of sarcastic content.\n", + "- Combines real-world information with humorous twists for engaging headlines.\n", + "- Adaptable to various topics, allowing for diverse and creative outputs.\n", + "\n", + "```plaintext\n", + "+----------+ +------------+ +------------+ +-----------+\n", + "| User | | Brave | | Agent | | Sarcastic |\n", + "| Input | --> | Search | --> | Processing | --> | Headline |\n", + "| (Topic) | | | | | | Output |\n", + "+----------+ +------------+ +------------+ +-----------+\n", + " | | | |\n", + " | | | |\n", + " v v v v\n", + " \"politics\" Find funny Generate witty \"Area Man Still\n", + " content headline Believes in Democracy\"\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementation\n", + "\n", + "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", + "\n", + "\n", + " \"Open\n", + "\n", + "\n", + "### Additional Information\n", + "\n", + "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", + "\n", + "**Author:** Julep AI \n", + "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Installing the Julep Client" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install julep -U --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### NOTE:\n", + "\n", + "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", + "- Once created, these UUIDs should remain unchanged for simplicity.\n", + "- Altering a UUID will result in the system treating it as a new agent or task.\n", + "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "# Global UUID is generated for agent and task\n", + "import uuid\n", + "\n", + "AGENT_UUID = uuid.uuid4()\n", + "TASK_UUID = uuid.uuid4() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Julep Client with the API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "from julep import Client\n", + "\n", + "api_key = \"\" # Your API key here\n", + "\n", + "# Create a client\n", + "client = Client(api_key=api_key, environment=\"dev\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an \"agent\"\n", + "\n", + "\n", + "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", + "\n", + "To learn more about the agent, please refer to the [documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#agent)." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# Defining the agent\n", + "name = \"Jarvis\"\n", + "about = \"The original AI conscious the Iron Man.\"\n", + "default_settings = {\n", + " \"temperature\": 0.7,\n", + " \"top_p\": 1,\n", + " \"min_p\": 0.01,\n", + " \"presence_penalty\": 0,\n", + " \"frequency_penalty\": 0,\n", + " \"length_penalty\": 1.0,\n", + " \"max_tokens\": 150,\n", + "}\n", + "\n", + "\n", + "# Create the agent\n", + "agent = client.agents.create_or_update(\n", + " agent_id=AGENT_UUID,\n", + " name=name,\n", + " about=about,\n", + " model=\"gpt-4o\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining a Task\n", + "\n", + "Tasks in Julep are Github Actions style workflows that define long-running, multi-step actions. \n", + "You can use them to conduct complex actions by defining them step-by-step. They have access to all Julep integrations.\n", + "\n", + "To learn more about tasks, visit [Julep documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#task)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More on how to define a task can be found [here](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# defining the task definition\n", + "task_def = yaml.safe_load(\"\"\"\n", + "name: Sarcasm Headline Generator\n", + "\n", + "tools:\n", + "- name: brave_search\n", + " type: integration\n", + " integration:\n", + " provider: brave\n", + " setup:\n", + " api_key: \"YOU_API_KEY\"\n", + "\n", + "main:\n", + "- tool: brave_search\n", + " arguments:\n", + " query: \"_.topic + ' funny'\"\n", + "\n", + "- prompt:\n", + " - role: system\n", + " content: >-\n", + " write a sarcastic news headline on the topic of {{inputs[0].topic}}.\n", + " Here's some more info on this: {{_}}\n", + " unwrap: true\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating/Updating a task." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# creating the task object\n", + "task = client.tasks.create_or_update(\n", + " task_id=TASK_UUID,\n", + " agent_id=AGENT_UUID,\n", + " **task_def\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an Execution\n", + "\n", + "An execution is a single run of a task. It is a way to run a task with a specific set of inputs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creates a execution worklow for the Task defined in the yaml file." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# creating an execution object\n", + "execution = client.executions.create(\n", + " task_id=TASK_UUID,\n", + " input={\n", + " \"topic\": \"elon musk\"\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# getting the execution details\n", + "execution = client.executions.get(execution.id)\n", + "#printing the output\n", + "execution.output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Retrieves and lists all the steps of a defined task that have been executed up to that point in time. Unlike streaming, this function does not continuously monitor the execution; it only provides a snapshot of the steps completed so far without displaying real-time updates as the task progresses." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.list(execution_id=execution.id).items" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Continuously monitor and stream the steps of a defined task. It retrieves and displays the transitions or execution steps of the task identified by execution.id in real-time, showing each step sequentially until the task is either completed or an error causes it to terminate." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.stream(execution_id=execution.id)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ai", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbooks/02-Sarcastic_News_Headline_Generator.py b/cookbooks/02-Sarcastic_News_Headline_Generator.py new file mode 100644 index 000000000..cf305c15e --- /dev/null +++ b/cookbooks/02-Sarcastic_News_Headline_Generator.py @@ -0,0 +1,95 @@ +import os +import uuid +import yaml +from julep import Client + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Create Julep Client with the API Key +api_key = os.getenv("JULEP_API_KEY") +if not api_key: + raise ValueError("JULEP_API_KEY not found in environment variables") + +client = Client(api_key=api_key, environment="dev") + +# Define agent properties +name = "Sarcastic News Bot" +about = "An AI agent specialized in generating sarcastic news headlines." +default_settings = { + "temperature": 0.7, + "top_p": 1, + "min_p": 0.01, + "presence_penalty": 0, + "frequency_penalty": 0, + "length_penalty": 1.0, + "max_tokens": 150, +} + +# Create the agent +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +# Define the task +task_def = yaml.safe_load(""" +name: Sarcasm Headline Generator + +tools: +- name: brave_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_BRAVE_API_KEY" + +main: +- tool: brave_search + arguments: + query: "_.topic + ' funny'" + +- prompt: + - role: system + content: >- + You are a sarcastic news headline writer. Generate a witty and sarcastic headline + for the topic {{inputs[0].topic}}. Use the following information for context: {{_}} + unwrap: true +""") + +# Creating/Updating a task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Creating an Execution +execution = client.executions.create( + task_id=TASK_UUID, + input={ + "topic": "elon musk" + } +) + +# Waiting for the execution to complete +import time +time.sleep(5) + +# Getting the execution details +execution = client.executions.get(execution.id) +print("Execution output:", execution.output) + +# Listing all the steps of a defined task +transitions = client.executions.transitions.list(execution_id=execution.id).items +print("Execution Steps:") +for transition in transitions: + print(transition) + +# Stream the steps of the defined task +print("Streaming execution transitions:") +print(client.executions.transitions.stream(execution_id=execution.id)) + diff --git a/cookbooks/03-SmartResearcher_With_WebSearch.ipynb b/cookbooks/03-SmartResearcher_With_WebSearch.ipynb new file mode 100644 index 000000000..9bb6436c4 --- /dev/null +++ b/cookbooks/03-SmartResearcher_With_WebSearch.ipynb @@ -0,0 +1,395 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \"julep\"\n", + "
\n", + "\n", + "## Task: Research Assistant with Web Search Integration\n", + "\n", + "### Overview\n", + "\n", + "This task is designed to conduct comprehensive research on multiple user-provided topics. It leverages web search capabilities to gather up-to-date information and generates relevant keywords for each topic, streamlining the research process through efficient tool integration and parallel processing.\n", + "\n", + "### Task Flow\n", + "\n", + "1. **User Input**\n", + " - User provides a list of research topics\n", + " - Each topic is processed individually\n", + "\n", + "2. **Web Search and Information Gathering**\n", + " - Utilizes BraveWeb to conduct searches for each topic\n", + " - Retrieves latest news and relevant information\n", + "\n", + "3. **Intelligent Analysis**\n", + " - System analyzes search results (HTML snippets)\n", + " - Generates Wikipedia keywords related to each topic\n", + " - AI assistant identifies most relevant keywords based on search content\n", + "\n", + "4. **Parallel Processing**\n", + " - Implements concurrent topic processing\n", + " - Enhances efficiency and reduces overall research time\n", + "\n", + "### Key Features\n", + "\n", + "- **Multi-topic Research**: Handles multiple research topics simultaneously\n", + "- **Up-to-date Information**: Utilizes web search to access current data\n", + "- **Keyword Generation**: Provides relevant Wikipedia keywords for each topic\n", + "- **AI-assisted Analysis**: Employs AI to identify and prioritize key information\n", + "- **Efficient Processing**: Leverages parallel processing for faster results\n", + "\n", + "### Output\n", + "\n", + "- Comprehensive list of relevant Wikipedia keywords for each input topic\n", + "- Curated, up-to-date information gathered from web searches\n", + "\n", + "This workflow provides a robust, efficient approach to in-depth topic exploration, combining the power of web search, AI analysis, and parallel processing.\n", + "\n", + "```plaintext\n", + "\n", + "+----------------+ +--------------------------+ +-----------------+ +------------------------+ +-------------------------+\n", + "| User Input | | Web Search & Information | | Intelligent | | Parallel Processing | | Output Stage |\n", + "|(List of Topics)| --> | Gathering (BraveWeb) | --> | Analysis | --> | (Concurrent Execution) | --> | Summarized Research |\n", + "| | | | | | | | | (Final Report) |\n", + "+----------------+ +--------------------------+ +-----------------+ +------------------------+ +-------------------------+\n", + " | | | | |\n", + " | | | | |\n", + " v v v v v\n", + " Topic 1, Topic 2, ... Retrieve HTML snippets Extract Wikipedia Process multiple Compile summary and \n", + " Each topic processed from search results keywords from HTML topics concurrently present most relevant \n", + " individually. for each topic. snippets, analyze for faster results. findings per topic.\n", + " relevance.\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Implementation\n", + "\n", + "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", + "\n", + "\n", + " \"Open\n", + "\n", + "\n", + "### Additional Information\n", + "\n", + "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", + "\n", + "**Author:** Julep AI \n", + "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Installing the Julep Client" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install julep -U --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### NOTE:\n", + "\n", + "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", + "- Once created, these UUIDs should remain unchanged for simplicity.\n", + "- Altering a UUID will result in the system treating it as a new agent or task.\n", + "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Global UUID is generated for agent and task\n", + "import uuid\n", + "\n", + "AGENT_UUID = uuid.uuid4()\n", + "TASK_UUID = uuid.uuid4()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Julep Client with the API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from julep import Client\n", + "\n", + "api_key = \"\" # Your API key here\n", + "\n", + "# Create a client\n", + "client = Client(api_key=api_key, environment=\"dev\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an \"agent\"\n", + "\n", + "\n", + "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", + "\n", + "To learn more about the agent, please refer to the [documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#agent)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Defining the agent\n", + "name = \"Jarvis\"\n", + "about = \"The original AI conscious the Iron Man.\"\n", + "default_settings = {\n", + " \"temperature\": 0.7,\n", + " \"top_p\": 1,\n", + " \"min_p\": 0.01,\n", + " \"presence_penalty\": 0,\n", + " \"frequency_penalty\": 0,\n", + " \"length_penalty\": 1.0,\n", + " \"max_tokens\": 150,\n", + "}\n", + "\n", + "\n", + "# Create the agent\n", + "agent = client.agents.create_or_update(\n", + " agent_id=AGENT_UUID,\n", + " name=name,\n", + " about=about,\n", + " model=\"gpt-4o\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining a Task\n", + "\n", + "Tasks in Julep are Github Actions style workflows that define long-running, multi-step actions. \n", + "You can use them to conduct complex actions by defining them step-by-step. They have access to all Julep integrations.\n", + "\n", + "To learn more about tasks, visit [Julep documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#task)." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More on how to define a task can be found [here](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "task_def= yaml.safe_load(\"\"\"\n", + "name: Research Assistant to find Wikipedia Keywords\n", + "\n", + "input_schema:\n", + " type: object\n", + " properties:\n", + " topics:\n", + " type: array\n", + " items:\n", + " type: string\n", + " description: The topics to search for.\n", + "\n", + "tools:\n", + "- name: brave_search\n", + " type: integration\n", + " integration:\n", + " provider: brave\n", + " setup:\n", + " api_key: \"YOUR_API_KEY\"\n", + "\n", + "main:\n", + "- over: _.topics\n", + " map:\n", + " tool: brave_search\n", + " arguments:\n", + " query: \"'the latest news about ' + _\"\n", + "\n", + "- over: _\n", + " parallelism: 2\n", + " map:\n", + " prompt:\n", + " - role: system\n", + " content: >-\n", + " You are a research assistant.\n", + " I need you to do in-depth research on topics trending in the news currently.\n", + " Based on the following latest html news snippet, come up with a list of wikipedia keywords to search:\n", + " \"{{_}}\"\n", + " Your response should be a list of keywords, separated by commas. Do not add any other text.\n", + " Example: `KEYWORDS: keyword1, keyword2, keyword3`\n", + "\n", + " unwrap: true\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating/Updating a task." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# creating the task object\n", + "task = client.tasks.create_or_update(\n", + " task_id=TASK_UUID,\n", + " agent_id=AGENT_UUID,\n", + " **task_def\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an Execution\n", + "\n", + "An execution is a single run of a task. It is a way to run a task with a specific set of inputs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creates a execution worklow for the Task defined in the yaml file." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "execution= client.executions.create(\n", + " task_id=task.id,\n", + " input={\n", + " \"topics\": [\"Burger King Cup on the Ground Behind a Wendy’s\",\"Forbidden Chemical X\",\"Finger Bracelets\",\"Amusing Notions\"]\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "execution.id" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# getting the execution details\n", + "execution = client.executions.get(execution.id)\n", + "#printing the outpu\n", + "execution.output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Retrieves and lists all the steps of a defined task that have been executed up to that point in time. Unlike streaming, this function does not continuously monitor the execution; it only provides a snapshot of the steps completed so far without displaying real-time updates as the task progresses." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.list(execution_id=execution.id).items" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Continuously monitor and stream the steps of a defined task. It retrieves and displays the transitions or execution steps of the task identified by execution.id in real-time, showing each step sequentially until the task is either completed or an error causes it to terminate." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.stream(execution_id=execution.id)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ai", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbooks/03-SmartResearcher_With_WebSearch.py b/cookbooks/03-SmartResearcher_With_WebSearch.py new file mode 100644 index 000000000..6b0b210fb --- /dev/null +++ b/cookbooks/03-SmartResearcher_With_WebSearch.py @@ -0,0 +1,110 @@ +import uuid +from julep import Client +import yaml, time + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an "agent" +name = "Jarvis" +about = "The original AI conscious the Iron Man." +default_settings = { + "temperature": 0.7, + "top_p": 1, + "min_p": 0.01, + "presence_penalty": 0, + "frequency_penalty": 0, + "length_penalty": 1.0, + "max_tokens": 150, +} + +# Create the agent +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +# Defining a Task +task_def = yaml.safe_load(""" +name: Research Assistant to find Wikipedia Keywords + +input_schema: + type: object + properties: + topics: + type: array + items: + type: string + description: The topics to search for. + +tools: +- name: brave_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_API_KEY" + +main: +- over: _.topics + map: + tool: brave_search + arguments: + query: "'the latest news about ' + _" + +- over: _ + parallelism: 2 + map: + prompt: + - role: system + content: >- + You are a research assistant. + I need you to do in-depth research on topics trending in the news currently. + Based on the following latest html news snippet, come up with a list of wikipedia keywords to search: + "{{_}}" + Your response should be a list of keywords, separated by commas. Do not add any other text. + Example: `KEYWORDS: keyword1, keyword2, keyword3` + + unwrap: true +""") + +# Creating/Updating a task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Creating an Execution +execution = client.executions.create( + task_id=task.id, + input={ + "topics": ["Burger King Cup on the Ground Behind a Wendy's", "Forbidden Chemical X", "Finger Bracelets", "Amusing Notions"] + } +) + +print(execution.id) + +# Wait for the execution to complete +time.sleep(10) + +# Getting the execution details +execution = client.executions.get(execution.id) +print(execution.output) + +# Listing all the steps of a defined task +transitions = client.executions.transitions.list(execution_id=execution.id).items +print("Execution Steps:") +for transition in transitions: + print(transition) + +# Stream the steps of the defined task +print("Streaming execution transitions:") +print(client.executions.transitions.stream(execution_id=execution.id)) \ No newline at end of file diff --git a/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb b/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb new file mode 100644 index 000000000..dad492f20 --- /dev/null +++ b/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb @@ -0,0 +1,418 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \"julep\"\n", + "
\n", + "\n", + "## Task: Travel Itinerary Assistant with Weather and Wikipedia Integrations\n", + "\n", + "### Overview\n", + "\n", + "The Travel Itinerary Assistant helps users plan a travel itinerary that takes into account current weather conditions and local tourist attractions. By integrating data from Wikipedia for tourist attractions and using a weather API for real-time weather updates, the tool provides a comprehensive travel plan tailored to each location. The generated itinerary suggests appropriate activities based on the weather, enhancing the overall travel experience.\n", + "\n", + "### Task Flow\n", + "\n", + "1. **User Input**\n", + " - User provides a list of desired travel locations.\n", + " - Each location is processed individually to gather the required data.\n", + "\n", + "2. **Weather Data Retrieval**\n", + " - Fetch current weather data for each location using a weather API.\n", + " - Extract relevant weather details, such as temperature, weather condition, and recommendations.\n", + "\n", + "3. **Tourist Attractions Lookup**\n", + " - Use Wikipedia to search for the top tourist attractions for each location.\n", + " - The query format used is: `\" tourist attractions\"`.\n", + " - Retrieve and compile a list of popular tourist spots and landmarks.\n", + "\n", + "4. **Data Evaluation and Integration**\n", + " - Combine weather data and tourist attractions into a unified list for each location.\n", + " - Format the data into a structured tuple: `(location, weather, attractions)`.\n", + "\n", + "5. **Itinerary Generation**\n", + " - Create a detailed travel itinerary based on:\n", + " - Current weather conditions (e.g., sunny, rainy, cloudy).\n", + " - Top tourist attractions for each location.\n", + " - Suggested activities categorized as indoor or outdoor based on weather.\n", + "\n", + "### Key Features\n", + "\n", + "- **Multi-location Travel Planning**: Handles multiple destinations simultaneously, offering a consolidated travel plan.\n", + "- **Real-time Weather Data**: Leverages weather APIs to provide up-to-date weather conditions.\n", + "- **Tourist Attraction Discovery**: Integrates Wikipedia to find and recommend popular attractions.\n", + "- **Intelligent Itinerary Suggestions**: Suggests indoor or outdoor activities based on the weather.\n", + "- **Comprehensive Itinerary Output**: Combines weather and tourist data into a user-friendly travel plan.\n", + "\n", + "### Output\n", + "\n", + "- A detailed travel itinerary for each location\n", + "- Curated, up-to-date information gathered from weather searches and Wikipedia\n", + "\n", + "```plaintext\n", + "\n", + "+----------------+ +--------------------------+ +--------------------------+ +------------------------------+ +-------------------------+\n", + "| User Input | | Weather Data Retrieval | | Tourist Attractions | | Data Evaluation & Integration| | Itinerary Generation |\n", + "| (List of | --> | (Weather API) | --> | Lookup (Wikipedia) | --> | (Combine Weather & | --> | (Generate Suggested |\n", + "| Locations) | | | | | | Attractions Data) | | Activities/Plan) |\n", + "+----------------+ +--------------------------+ +--------------------------+ +------------------------------+ +-------------------------+\n", + " | | | | |\n", + " | | | | |\n", + " v v v v v\n", + "Location 1, Location 2, ... Fetch weather for each Search Wikipedia for Combine weather data and Create itinerary with\n", + "Each location processed location individually, \" tourist tourist attractions into suggested activities\n", + "individually for extracting temp., attractions\", retrieve a structured tuple: based on weather and\n", + "weather data. conditions, & top spots. (location, weather, attractions.\n", + " recommendations. attractions).\n", + "```\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Implementation\n", + "\n", + "To recreate the notebook and see the code implementation for this task, you can access the Google Colab notebook using the link below:\n", + "\n", + "\n", + " \"Open\n", + "\n", + "\n", + "### Additional Information\n", + "\n", + "For more details about the task or if you have any questions, please don't hesitate to contact the author:\n", + "\n", + "**Author:** Julep AI \n", + "**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Installing the Julep Client" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install julep -U --quiet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### NOTE:\n", + "\n", + "- UUIDs are generated for both the agent and task to uniquely identify them within the system.\n", + "- Once created, these UUIDs should remain unchanged for simplicity.\n", + "- Altering a UUID will result in the system treating it as a new agent or task.\n", + "- If a UUID is changed, the original agent or task will continue to exist in the system alongside the new one." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "# Global UUID is generated for agent and task\n", + "import uuid\n", + "\n", + "AGENT_UUID = uuid.uuid4()\n", + "TASK_UUID = uuid.uuid4() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Julep Client with the API Key" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "from julep import Client\n", + "\n", + "api_key = \"\" # Your API key here\n", + "\n", + "# Create a client\n", + "client = Client(api_key=api_key, environment=\"dev\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an \"agent\"\n", + "\n", + "\n", + "Agent is the object to which LLM settings, like model, temperature along with tools are scoped to.\n", + "\n", + "To learn more about the agent, please refer to the [documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#agent)." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Defining the agent\n", + "name = \"Jarvis\"\n", + "about = \"The original AI conscious the Iron Man.\"\n", + "default_settings = {\n", + " \"temperature\": 0.7,\n", + " \"top_p\": 1,\n", + " \"min_p\": 0.01,\n", + " \"presence_penalty\": 0,\n", + " \"frequency_penalty\": 0,\n", + " \"length_penalty\": 1.0,\n", + " \"max_tokens\": 150,\n", + "}\n", + "\n", + "# Create the agent\n", + "agent = client.agents.create_or_update(\n", + " agent_id=AGENT_UUID,\n", + " name=name,\n", + " about=about,\n", + " model=\"gpt-4o\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining a Task\n", + "\n", + "Tasks in Julep are Github Actions style workflows that define long-running, multi-step actions. \n", + "You can use them to conduct complex actions by defining them step-by-step. They have access to all Julep integrations.\n", + "\n", + "To learn more about tasks, visit [Julep documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md#task)." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "import yaml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "More on how to define a task can be found [here](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "task_def = yaml.safe_load(\"\"\"\n", + "name: Tourist Plan With Weather And Attractions\n", + "\n", + "input_schema:\n", + " type: object\n", + " properties:\n", + " locations:\n", + " type: array\n", + " items:\n", + " type: string\n", + " description: The locations to search for.\n", + "\n", + "tools:\n", + "- name: wikipedia\n", + " type: integration\n", + " integration:\n", + " provider: wikipedia\n", + "\n", + "- name: weather\n", + " type: integration\n", + " integration:\n", + " provider: weather\n", + " setup:\n", + " openweathermap_api_key: \"YOUR_API_KEY\"\n", + "\n", + "main:\n", + "- over: inputs[0].locations\n", + " map:\n", + " tool: weather\n", + " arguments:\n", + " location: _\n", + "\n", + "- over: inputs[0].locations\n", + " map:\n", + " tool: wikipedia\n", + " arguments:\n", + " query: \"_ + ' tourist attractions'\"\n", + "\n", + "- evaluate:\n", + " zipped: \"list(zip(inputs[0].locations, [output['result'] for output in outputs[0]], [output['documents'][0]['page_content'] for output in outputs[1]]))\" # [(location, weather, attractions)]\n", + "\n", + "\n", + "- over: _['zipped']\n", + " parallelism: 3\n", + " map:\n", + " prompt:\n", + " - role: system\n", + " content: >-\n", + " You are a travel assistant. Your task is to create a detailed itinerary for visiting tourist attractions in \"{{_[0]}}\" based on the weather conditions and the top tourist attractions provided.\n", + " \n", + " Current weather condition at \"{{_[0]}}\":\n", + " \"{{_[1]}}\"\n", + "\n", + " Top tourist attractions in \"{{_[0]}}\":\n", + " \"{{_[2]}}\"\n", + "\n", + " Suggest outdoor or indoor activities based on the above information.\n", + " unwrap: true\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creating/Updating a task." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# creating the task object\n", + "task = client.tasks.create_or_update(\n", + " task_id=TASK_UUID,\n", + " agent_id=AGENT_UUID,\n", + " **task_def\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating an Execution\n", + "\n", + "An execution is a single run of a task. It is a way to run a task with a specific set of inputs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creates a execution worklow for the Task defined in the yaml file." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "execution = client.executions.create(\n", + " task_id=task.id,\n", + " input={\n", + " \"locations\": [\"New York\", \"London\", \"Paris\", \"Tokyo\", \"Sydney\"]\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "execution.id" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "# getting the execution details\n", + "execution = client.executions.get(execution.id)\n", + "#printing the output\n", + "execution.output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Retrieves and lists all the steps of a defined task that have been executed up to that point in time. Unlike streaming, this function does not continuously monitor the execution; it only provides a snapshot of the steps completed so far without displaying real-time updates as the task progresses." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.list(execution_id=execution.id).items" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Continuously monitor and stream the steps of a defined task. It retrieves and displays the transitions or execution steps of the task identified by execution.id in real-time, showing each step sequentially until the task is either completed or an error causes it to terminate." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "client.executions.transitions.stream(execution_id=execution.id)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "ai", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.py b/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.py new file mode 100644 index 000000000..bd446a849 --- /dev/null +++ b/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.py @@ -0,0 +1,128 @@ +import uuid +import yaml +from julep import Client + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an "agent" +name = "Jarvis" +about = "The original AI conscious the Iron Man." +default_settings = { + "temperature": 0.7, + "top_p": 1, + "min_p": 0.01, + "presence_penalty": 0, + "frequency_penalty": 0, + "length_penalty": 1.0, + "max_tokens": 150, +} + +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +# Defining a Task +task_def = yaml.safe_load(""" +name: Tourist Plan With Weather And Attractions + +input_schema: + type: object + properties: + locations: + type: array + items: + type: string + description: The locations to search for. + +tools: +- name: wikipedia + type: integration + integration: + provider: wikipedia + +- name: weather + type: integration + integration: + provider: weather + setup: + openweathermap_api_key: "YOUR_API_KEY" + +main: +- over: inputs[0].locations + map: + tool: weather + arguments: + location: _ + +- over: inputs[0].locations + map: + tool: wikipedia + arguments: + query: "_ + ' tourist attractions'" + +- evaluate: + zipped: "list(zip(inputs[0].locations, [output['result'] for output in outputs[0]], [output['documents'][0]['page_content'] for output in outputs[1]]))" # [(location, weather, attractions)] + +- over: _['zipped'] + parallelism: 3 + map: + prompt: + - role: system + content: >- + You are a travel assistant. Your task is to create a detailed itinerary for visiting tourist attractions in "{{_[0]}}" based on the weather conditions and the top tourist attractions provided. + + Current weather condition at "{{_[0]}}": + "{{_[1]}}" + + Top tourist attractions in "{{_[0]}}": + "{{_[2]}}" + + Suggest outdoor or indoor activities based on the above information. + unwrap: true +""") + +# Creating/Updating a task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Creating an Execution +execution = client.executions.create( + task_id=task.id, + input={ + "locations": ["New York", "London", "Paris", "Tokyo", "Sydney"] + } +) + +print(f"Execution ID: {execution.id}") + +# Wait for the execution to complete +import time +time.sleep(10) + +# Getting the execution details +execution = client.executions.get(execution.id) +print("Execution Output:") +print(execution.output) + +# List all steps of the executed task +print("Execution Steps:") +transitions = client.executions.transitions.list(execution_id=execution.id).items +print("Execution Steps:") +for transition in transitions: + print(transition) + +# Stream the steps of the defined task +print("Streaming execution transitions:") +print(client.executions.transitions.stream(execution_id=execution.id)) \ No newline at end of file diff --git a/cookbooks/05-Basic_Agent_Creation_and_Interaction.py b/cookbooks/05-Basic_Agent_Creation_and_Interaction.py new file mode 100644 index 000000000..05b16f7bd --- /dev/null +++ b/cookbooks/05-Basic_Agent_Creation_and_Interaction.py @@ -0,0 +1,73 @@ +# UNDER CONSTRUCTION - NOT WORKING YET + +import uuid +from julep import Client + +# Global UUID is generated for agent +AGENT_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an "agent" +name = "Jarvis" +about = "A friendly and knowledgeable AI assistant." +default_settings = { + "temperature": 0.7, + "top_p": 1, + "min_p": 0.01, + "presence_penalty": 0, + "frequency_penalty": 0, + "length_penalty": 1.0, + "max_tokens": 150, +} + +# Create the agent +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +print(f"Agent created with ID: {agent.id}") + +# Create a session for interaction +session = client.sessions.create( + agent=agent.id, + context_overflow="adaptive" +) + +print(f"Session created with ID: {session.id}") + +# Function to chat with the agent +def chat_with_agent(message): + message = { + "role": "user", + "content": message, + } + # TODO: message validation error + response = client.sessions.chat( + session_id=session.id, + messages=[message], + ) + return response.choices[0].message.content + +# Demonstrate basic interaction +print("Agent: Hello! I'm Jarvis, your AI assistant. How can I help you today?") + +while True: + user_input = input("You: ") + if user_input.lower() in ['exit', 'quit', 'bye']: + print("Agent: Goodbye! It was nice chatting with you.") + break + + response = chat_with_agent(user_input) + print(f"Agent: {response}") + +# Optional: Retrieve chat history +history = client.sessions.messages.list(session_id=session.id) +print("\nChat History:") +for message in history.items: + print(f"{message.role}: {message.content}") \ No newline at end of file diff --git a/cookbooks/06-Designing_Multi-Step_Tasks.py b/cookbooks/06-Designing_Multi-Step_Tasks.py new file mode 100644 index 000000000..b623ae378 --- /dev/null +++ b/cookbooks/06-Designing_Multi-Step_Tasks.py @@ -0,0 +1,139 @@ +import uuid +import yaml, time +from julep import Client + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an "agent" +name = "Multi-Step Task Agent" +about = "An agent capable of executing complex multi-step tasks." +default_settings = { + "temperature": 0.7, + "top_p": 1, + "min_p": 0.01, + "presence_penalty": 0, + "frequency_penalty": 0, + "length_penalty": 1.0, + "max_tokens": 150, +} + +# Create the agent +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +# Add a web search tool to the agent +client.agents.tools.create( + agent_id=AGENT_UUID, + name="web_search", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "your_brave_api_key"}, + }, +) + +# Defining a Task with various step types +task_def = yaml.safe_load(""" +name: Multi-Step Task Demonstration + +input_schema: + type: object + properties: + topic: + type: string + description: The topic to research and summarize. + +tools: +- name: web_search + type: integration + integration: + provider: brave + setup: + api_key: "your_api_key" + +main: +# Step 1: Prompt - Initial research question +- prompt: + - role: system + content: "You are a research assistant. Your task is to formulate three specific research questions about the given topic: {{inputs[0].topic}}" + unwrap: true + +# Step 2: Tool Call - Web search for each question +- foreach: + in: _.split('\\n') + do: + tool: web_search + arguments: + query: _ + +# Step 3: Evaluate - Extract relevant information +- evaluate: + relevant_info: "[output for output in _]" + +# Step 4: Conditional Logic - Check if enough information is gathered +- if: "len(_.relevant_info) >= 3" + then: + prompt: + - role: system + content: "Summarize the following information about {{inputs[0].topic}}:\n{{_.relevant_info}}" + unwrap: true + else: + prompt: + - role: system + content: "Not enough information gathered. Please provide a brief overview of {{inputs[0].topic}} based on your knowledge." + unwrap: true + +# Step 5: Log - Record the summary +- log: "Summary for {{inputs[0].topic}}: {{_}}" + +# Step 6: Return - Final output +- return: + summary: "_" + topic: "inputs[0].topic" + +""") + +# Creating/Updating a task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Creating an Execution +execution = client.executions.create( + task_id=TASK_UUID, + input={ + "topic": "Artificial Intelligence in Healthcare" + } +) + +print(f"Execution ID: {execution.id}") + +# Wait for the execution to complete +time.sleep(10) + +# Getting the execution details +execution = client.executions.get(execution.id) +print("Execution Output:") +print(client.executions.transitions.list(execution_id=execution.id).items[0].output) + +# Listing all the steps of a defined task +transitions = client.executions.transitions.list(execution_id=execution.id).items +print("Execution Steps:") +for transition in transitions: + print(transition) + +# Stream the steps of the defined task +print("Streaming execution transitions:") +print(client.executions.transitions.stream(execution_id=execution.id)) \ No newline at end of file diff --git a/cookbooks/07-Integrating_External_Tools_and_APIs.py b/cookbooks/07-Integrating_External_Tools_and_APIs.py new file mode 100644 index 000000000..71d8780d3 --- /dev/null +++ b/cookbooks/07-Integrating_External_Tools_and_APIs.py @@ -0,0 +1,128 @@ +import uuid +import yaml +from julep import Client + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an "agent" +name = "Multi-Tool Analyst" +about = "An AI agent capable of using multiple external tools and APIs to gather and analyze information." + +# Create the agent +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name=name, + about=about, + model="gpt-4o", +) + +# Defining a Task with various step types +task_def = yaml.safe_load(""" +name: Comprehensive Analysis Report + +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to analyze. + location: + type: string + description: A location related to the topic for weather and news analysis. + +tools: +- name: brave_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_API_KEY" + +- name: weather + type: integration + integration: + provider: weather + setup: + openweathermap_api_key: "YOUR_API_KEY" + +- name: wikipedia + type: integration + integration: + provider: wikipedia + +main: +- tool: brave_search + arguments: + query: "inputs[0].topic + ' latest developments'" + +- tool: weather + arguments: + location: inputs[0].location + +- tool: wikipedia + arguments: + query: inputs[0].topic + +- prompt: + - role: system + content: >- + You are a comprehensive analyst. Your task is to create a detailed report on the topic {{inputs[0].topic}} + using the information gathered from various sources. Include the following sections in your report: + + 1. Overview (based on Wikipedia data) + 2. Latest Developments (based on Brave Search results) + 3. Weather Impact (if applicable, based on weather data for {{inputs[0].location}}) + 4. Analysis and Conclusions + + Use the following data for your report: + + Brave Search Results: {{outputs[0]}} + Weather Data: {{outputs[1]}} + Wikipedia Data: {{outputs[2]}} + + Provide a well-structured, informative report that synthesizes information from all these sources. + unwrap: true +""") + +# Creating/Updating a task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Creating an Execution +execution = client.executions.create( + task_id=task.id, + input={ + "topic": "Renewable Energy", + "location": "Berlin" + } +) + +print(f"Execution ID: {execution.id}") + +# Waiting for the execution to complete +import time +time.sleep(5) + +# Getting the execution details +execution = client.executions.get(execution.id) +print("Execution Output:") +print(execution.output) + +# List all steps of the executed task +transitions = client.executions.transitions.list(execution_id=execution.id).items +print("Execution Steps:") +for transition in transitions: + print(transition) + +# Stream the steps of the defined task +print("Streaming execution transitions:") +print(client.executions.transitions.stream(execution_id=execution.id)) \ No newline at end of file diff --git a/cookbooks/08-Managing_Persistent_Sessions.py b/cookbooks/08-Managing_Persistent_Sessions.py new file mode 100644 index 000000000..ab2472ac8 --- /dev/null +++ b/cookbooks/08-Managing_Persistent_Sessions.py @@ -0,0 +1,146 @@ +# Managing Persistent Sessions Cookbook +# +# Plan: +# 1. Import necessary libraries and set up the Julep client +# 2. Create an agent for handling persistent sessions +# 3. Define a task for managing user context +# 4. Create a function to simulate user interactions +# 5. Implement a loop to demonstrate persistent sessions with context management +# 6. Show how to handle context overflow +# 7. Display the session history and context at the end + +import uuid +import yaml +from julep import Client +import time + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an agent for handling persistent sessions +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name="Session Manager", + about="An AI agent specialized in managing persistent sessions and context.", + model="gpt-4o", +) + +# Defining a task for managing user context +task_def = yaml.safe_load(""" +name: Manage User Context + +input_schema: + type: object + properties: + user_input: + type: string + session_context: + type: object + +main: +- prompt: + - role: system + content: >- + You are a session management agent. Your task is to maintain context + across user interactions. Here's the current context: {{inputs[0].session_context}} + + User input: {{inputs[0].user_input}} + + Respond to the user and update the context with any new relevant information. + unwrap: true + +- evaluate: + session_context: >- + { + **inputs[0].session_context, + 'last_interaction': inputs[0].user_input, + 'agent_response': _} + +- return: + response: _ + context: outputs[1].session_context +""") + +# Creating the task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Function to simulate user interactions +def user_interaction(prompt): + return input(prompt) + +# Create a session +session = client.sessions.create( + agent=agent.id, + context_overflow="adaptive" # Use adaptive context management +) + +# Initialize session context +context = {} + +# Simulate a conversation with persistent context +for i in range(5): + user_input = user_interaction(f"User (Interaction {i+1}): ") + + # Execute the task with user input and current context + execution = client.executions.create( + task_id=TASK_UUID, + input={ + "user_input": user_input, + "session_context": context + } + ) + + # Get the execution result + result = client.executions.get(execution.id) + + # Wait for the execution to complete + time.sleep(2) + + # Update the context and print the response + final_response = client.executions.transitions.list(execution_id=result.id).items[0].output + print(final_response) + # print(client.executions.transitions.list(execution_id=result.id).items[0]) + context = final_response['session_context'] + print(f"Agent: {final_response['session_context']['agent_response']}") + print(f"Updated Context: {context}") + print() + + # Simulate a delay between interactions + time.sleep(1) + +# Display final session information +print("Final Session Information:") +print(f"Session ID: {session.id}") +print(f"Final Context: {context}") + +# Demonstrate context overflow handling +print("\nDemonstrating Context Overflow Handling:") +large_input = "This is a very large input " * 1000 # Create a large input to trigger overflow +overflow_execution = client.executions.create( + task_id=TASK_UUID, + input={ + "user_input": large_input, + "session_context": context + } +) + +overflow_result = client.executions.get(overflow_execution.id) +# Wait for the execution to complete +time.sleep(2) +overflow_response = client.executions.transitions.list(execution_id=overflow_result.id).items[0].output +print(f"Agent response to large input: {overflow_response['session_context']['agent_response']}") +print(f"Updated context after overflow: {overflow_response['session_context']}") + +# Display session history +print("\nSession History:") +history = client.sessions.history(session_id=session.id) +print(history) diff --git a/cookbooks/09-User_Management_and_Personalization.py b/cookbooks/09-User_Management_and_Personalization.py new file mode 100644 index 000000000..50ada9570 --- /dev/null +++ b/cookbooks/09-User_Management_and_Personalization.py @@ -0,0 +1,196 @@ +# User Management and Personalization Cookbook +# +# Plan: +# 1. Import necessary libraries and set up the Julep client +# 2. Create an agent for handling user management and personalization +# 3. Define a task for user registration and profile creation +# 4. Define a task for personalized content recommendation +# 5. Create sample users with different preferences +# 6. Demonstrate user registration and profile creation +# 7. Show personalized content recommendations for different users +# 8. Implement a function to update user preferences +# 9. Display updated personalized recommendations after preference changes + +import uuid +import yaml, time +from julep import Client + +# Global UUIDs for agent and tasks +AGENT_UUID = uuid.uuid4() +REGISTRATION_TASK_UUID = uuid.uuid4() +RECOMMENDATION_TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an agent for user management and personalization +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name="Personalization Assistant", + about="An AI agent specialized in user management and personalized content recommendations.", + model="gpt-4o", +) + +# Defining a task for user registration and profile creation +registration_task_def = yaml.safe_load(""" +name: User Registration and Profile Creation + +input_schema: + type: object + properties: + username: + type: string + interests: + type: array + items: + type: string + +main: +- prompt: + - role: system + content: >- + You are a user registration assistant. Create a user profile based on the following information: + Username: {{inputs[0].username}} + Interests: {{inputs[0].interests}} + + Generate a brief bio and suggest some initial content preferences based on the user's interests. + unwrap: true + +- evaluate: + username: inputs[0].username + interests: inputs[0].interests + bio: _.split('\\n')[0] + content_preferences: _.split('\\n')[1] + +- return: + profile: _ +""") + +# Creating the registration task +registration_task = client.tasks.create_or_update( + task_id=REGISTRATION_TASK_UUID, + agent_id=AGENT_UUID, + **registration_task_def +) + +# Defining a task for personalized content recommendation +recommendation_task_def = yaml.safe_load(""" +name: Personalized Content Recommendation + +input_schema: + type: object + properties: + user_profile: + type: object + description: User's profile containing their interests and preferences. + content_list: + type: array + description: List of available content to recommend from. + items: + type: object + properties: + id: + type: integer + title: + type: string + category: + type: string + +main: +- prompt: + - role: system + content: >- + You are a content recommendation system. Based on the user's profile and the available content, + recommend 3 pieces of content that best match the user's interests and preferences. + + User Profile: + {{inputs[0].user_profile}} + + Available Content: + {{inputs[0].content_list}} + + Provide your recommendations in the following format: + 1. [Content ID] - [Content Title] - Reason for recommendation + 2. [Content ID] - [Content Title] - Reason for recommendation + 3. [Content ID] - [Content Title] - Reason for recommendation + unwrap: true +""") + +# Creating the recommendation task +recommendation_task = client.tasks.create_or_update( + task_id=RECOMMENDATION_TASK_UUID, + agent_id=AGENT_UUID, + **recommendation_task_def +) + +# Function to register a user and create their profile +def register_user(username, interests): + execution = client.executions.create( + task_id=REGISTRATION_TASK_UUID, + input={ + "username": username, + "interests": interests + } + ) + # Wait for the execution to complete + time.sleep(2) + result = client.executions.get(execution.id) + user_result = client.executions.transitions.list(execution_id=result.id).items[0].output + return user_result + +# Function to get personalized recommendations for a user +def get_recommendations(user_profile): + content_list = [ + {"id": 1, "title": "Introduction to AI", "category": "Technology"}, + {"id": 2, "title": "Healthy Eating Habits", "category": "Health"}, + {"id": 3, "title": "Financial Planning 101", "category": "Finance"}, + {"id": 4, "title": "The Art of Photography", "category": "Art"}, + {"id": 5, "title": "Beginner's Guide to Yoga", "category": "Fitness"} + ] + + execution = client.executions.create( + task_id=RECOMMENDATION_TASK_UUID, + input={ + "user_profile": user_profile, + "content_list": content_list + } + ) + # Wait for the execution to complete + time.sleep(2) + result = client.executions.get(execution.id) + recommendation_respose = client.executions.transitions.list(execution_id=result.id).items[0].output + return recommendation_respose + + +# Function to update user preferences +def update_user_preferences(user_profile, new_interests): + user_profile["interests"] = list(set(user_profile["interests"] + new_interests)) + return user_profile + +# Demonstrate user registration and personalization +print("Demonstrating User Management and Personalization:") + +# Register users +user1 = register_user("alice", ["technology", "finance"]) +user2 = register_user("bob", ["health", "fitness"]) + +print("\nUser Profiles:") +print(f"Alice: {user1}") +print(f"Bob: {user2}") + +# Get personalized recommendations +print("\nPersonalized Recommendations:") +print("Alice's Recommendations:") +print(get_recommendations(user1)) +print("\nBob's Recommendations:") +print(get_recommendations(user2)) + +# Update user preferences +print("\nUpdating User Preferences:") +updated_alice = update_user_preferences(user1, ["art"]) +print(f"Alice's Updated Profile: {updated_alice}") + +# Get updated recommendations +print("\nUpdated Personalized Recommendations for Alice:") +print(get_recommendations(updated_alice)) \ No newline at end of file diff --git a/cookbooks/10-Document_Management_and_Search.py b/cookbooks/10-Document_Management_and_Search.py new file mode 100644 index 000000000..70db82d3f --- /dev/null +++ b/cookbooks/10-Document_Management_and_Search.py @@ -0,0 +1,186 @@ +# Document Management and Search Cookbook +# +# Plan: +# 1. Import necessary libraries and set up the Julep client +# 2. Create an agent for document management +# 3. Define a task for document upload and indexing +# 4. Define a task for document search +# 5. Create sample documents +# 6. Execute the document upload and indexing task +# 7. Execute the document search task +# 8. Display the search results + +# UNDER CONSTRUCTION - YAML is working but the flow is not correct yet + +import uuid +import yaml,time +from julep import Client + +# Global UUID is generated for agent and tasks +AGENT_UUID = uuid.uuid4() +UPLOAD_TASK_UUID = uuid.uuid4() +SEARCH_TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an agent for document management +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name="Document Manager", + about="An AI agent specialized in document management and search.", + model="gpt-4o", +) + +# Defining a task for document upload and indexing +upload_task_def = yaml.safe_load(""" +name: Document Upload and Indexing + +input_schema: + type: object + properties: + documents: + type: array + items: + type: object + properties: + tile: + type: string + content: + type: string + metadata: + type: object + +tools: +- name: document_create + system: + resource: agent + subresource: doc + operation: create + +main: +- over: inputs[0].documents + map: + tool: document_upload + arguments: + agent_id: "'{agent.id}'" + title: _.title + content: _.content + metadata: _.metadata + +- prompt: + - role: system + content: >- + You have successfully uploaded and indexed {{len(outputs[0])}} documents. + Provide a summary of the uploaded documents. +""") + +# Creating the upload task +upload_task = client.tasks.create_or_update( + task_id=UPLOAD_TASK_UUID, + agent_id=AGENT_UUID, + **upload_task_def +) + +# Defining a task for document search +search_task_def = yaml.safe_load(""" +name: Document Search + +input_schema: + type: object + properties: + query: + type: string + filters: + type: object + +tools: +- name: document_search + system: + resource: agent + subresource: doc + operation: search + +main: +- tool: document_search + arguments: + agent_id: "'{agent.id}'" + text: inputs[0].query + metadata_filters: inputs[0].filters + +- prompt: + - role: system + content: >- + Based on the search results, provide a summary of the most relevant documents found. + Search query: {{inputs[0].query}} + Number of results: {{len(outputs[0])}} + + Results: + {{outputs[0]}} + unwrap: true +""") + +# Creating the search task +search_task = client.tasks.create_or_update( + task_id=SEARCH_TASK_UUID, + agent_id=AGENT_UUID, + **search_task_def +) + +# Sample documents +sample_documents = [ + { + "Title": "The Impact of Technology on Society", + "content": "Artificial Intelligence (AI) is revolutionizing various industries, including healthcare, finance, and transportation.", + "metadata": {"category": "technology", "author": "John Doe"} + }, + { + "Title": "Climate Change and Global Warming", + "content": "Climate change is a pressing global issue that requires immediate action from governments, businesses, and individuals.", + "metadata": {"category": "environment", "author": "Jane Smith"} + }, + { + "Title": "Remote Work and Digital Transformation", + "content": "The COVID-19 pandemic has accelerated the adoption of remote work and digital technologies across many organizations.", + "metadata": {"category": "business", "author": "Alice Johnson"} + } +] + +# Execute the document upload and indexing task +upload_execution = client.executions.create( + task_id=UPLOAD_TASK_UUID, + input={"documents": sample_documents} +) + +print("Uploading and indexing documents...") +# Wait for the execution to complete +time.sleep(5) +upload_result = client.executions.get(upload_execution.id) +upload_response = client.executions.transitions.list(upload_execution.id).items[0].output +print("Upload Result:") +print(upload_response) + +# Execute the document search task +search_execution = client.executions.create( + task_id=SEARCH_TASK_UUID, + input={ + "query": "impact of technology on society", + "filters": {"category": "technology"} + } +) + +print("\nSearching documents...") +# Wait for the execution to complete +time.sleep(5) +search_result = client.executions.get(search_execution.id) +# Display the search results +print("\nSearch Results:") +for transition in client.executions.transitions.list(execution_id=search_execution.id).items: + if transition.type == "tool_call" and transition.tool == "document_search": + for doc in transition.output: + print(f"- {doc['content']} (Score: {doc['score']})") + +print("\nSearch Summary:") +search_response = client.executions.transitions.list(search_result.id).items[0].output +print(search_response) \ No newline at end of file diff --git a/cookbooks/11-Advanced_Chat_Interactions.py b/cookbooks/11-Advanced_Chat_Interactions.py new file mode 100644 index 000000000..1a6b13026 --- /dev/null +++ b/cookbooks/11-Advanced_Chat_Interactions.py @@ -0,0 +1,177 @@ +# Advanced Chat Interactions Cookbook +# +# Plan: +# 1. Import necessary libraries and set up the Julep client +# 2. Create an agent for advanced chat interactions +# 3. Define a task for handling complex conversations with context management +# 4. Implement a function to simulate user input +# 5. Create a chat session and demonstrate advanced interactions: +# a. Multi-turn conversation with context retention +# b. Handling context overflow +# c. Conditional responses based on user input +# d. Integrating external information during the conversation +# 6. Display the chat history and any relevant metrics + +# UNDER CONSTRUCTION - YAML is working but the flow is not correct yet + +import uuid +import yaml +import os +from julep import Client +import time + +# Global UUIDs for agent and task +AGENT_UUID = uuid.uuid4() +CHAT_TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = os.getenv("JULEP_API_KEY") +if not api_key: + raise ValueError("JULEP_API_KEY not found in environment variables") + +client = Client(api_key=api_key, environment="dev") + +# Creating an agent for advanced chat interactions +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name="Advanced Chat Assistant", + about="An AI agent capable of handling complex conversations with context management and external integrations.", + model="gpt-4o", +) + +# Add a web search tool to the agent +client.agents.tools.create( + agent_id=AGENT_UUID, + name="web_search", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "YOUR_BRAVE_API_KEY"}, + }, +) + +# Defining a task for handling complex conversations +chat_task_def = yaml.safe_load(""" +name: Advanced Chat Interaction + +input_schema: + type: object + properties: + user_input: + type: string + chat_history: + type: array + items: + type: object + properties: + role: + type: string + content: + type: string + +tools: +- name: weather_api + type: integration + integration: + provider: weather + setup: + api_key: "API_KEY" + +main: +- evaluate: + context_length: len(inputs[0].chat_history) + +- if: "_.context_length > '10'" + then: + evaluate: + summarized_history: str(inputs[0].chat_history[-10:]) + prompt: + - role: system + content: >- + You are an advanced chat assistant. Here's a summary of the recent conversation: + {{outputs[1].summarized_history}} + + Now, respond to the user's latest input: {{inputs[0].user_input}} + unwrap: true + else: + prompt: + - role: system + content: >- + You are an advanced chat assistant. Here's the conversation history: + {{inputs[0].chat_history}} + + Now, respond to the user's latest input: {{inputs[0].user_input}} + unwrap: true + +- if: "'weather' in inputs[0].user_input.lower()" + then: + tool: weather_api + arguments: + location: inputs[0].user_input.lower.split('weather')[1].strip() + prompt: + - role: system + content: >- + The user mentioned weather. Here's the current weather information for {{inputs[0].user_input.lower.split('weather')[1].strip()}} + + Incorporate this information into your response. + unwrap: true + +- return: + summary: _ +""") + +# Creating the chat task +chat_task = client.tasks.create_or_update( + task_id=CHAT_TASK_UUID, + agent_id=AGENT_UUID, + **chat_task_def +) + +# Function to simulate user input +def get_user_input(): + return input("User: ") + +# Function to display chat history +def display_chat_history(chat_history): + for message in chat_history: + print(f"{message['role'].capitalize()}: {message['content']}") + +# Main chat loop +def run_chat_session(): + chat_history = [] + print("Starting advanced chat session. Type 'exit' to end the conversation.") + + session = client.sessions.create(agent=AGENT_UUID) + + while True: + user_input = get_user_input() + if user_input.lower() == 'exit': + break + + chat_history.append({"role": "user", "content": user_input}) + + execution = client.executions.create( + task_id=CHAT_TASK_UUID, + input={ + "user_input": user_input, + "chat_history": chat_history + } + ) + # Wait for the execution to complete + time.sleep(3) + result = client.executions.get(execution.id) + print(client.executions.transitions.list(execution.id).items) + print(f"Execution result: {result.output}") + assistant_response = result.output + + chat_history.append({"role": "assistant", "content": assistant_response}) + print(f"Assistant: {assistant_response}") + + # Simulate a delay for a more natural conversation flow + time.sleep(1) + + print("\nChat session ended. Here's the complete chat history:") + display_chat_history(chat_history) + +# Run the chat session +run_chat_session() \ No newline at end of file diff --git a/cookbooks/12-Monitoring_Task_Executions.py b/cookbooks/12-Monitoring_Task_Executions.py new file mode 100644 index 000000000..675ff27a1 --- /dev/null +++ b/cookbooks/12-Monitoring_Task_Executions.py @@ -0,0 +1,162 @@ +# Monitoring Task Executions Cookbook +# +# Plan: +# 1. Import necessary libraries and set up the Julep client +# 2. Create an agent for task execution monitoring +# 3. Define a multi-step task that simulates a complex workflow +# 4. Implement functions for: +# a. Starting task execution +# b. Monitoring execution progress +# c. Handling execution status updates +# d. Logging execution metrics +# 5. Execute the task and demonstrate real-time monitoring +# 6. Display execution summary and metrics + +# UNDER CONSTRUCTION - NOT WORKING YET + +import uuid +import yaml +from julep import Client +import time + +# Global UUIDs for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an agent for task execution monitoring +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name="Task Execution Monitor", + about="An AI agent designed to monitor and manage complex task executions.", + model="gpt-4o", +) + +# Defining a multi-step task that simulates a complex workflow +task_def = yaml.safe_load(""" +name: Complex Workflow Simulation + +input_schema: + type: object + properties: + project_name: + type: string + data_size: + type: integer + +tools: +- name: data_processor + type: integration + integration: + provider: mock + setup: + processing_time: 5 # Simulated processing time in seconds + +- name: report_generator + type: integration + integration: + provider: mock + setup: + generation_time: 3 # Simulated generation time in seconds + +main: +- prompt: + role: system + content: >- + Initiating project '{{inputs[0].project_name}}' with data size {{inputs[0].data_size}} units. + Prepare for data processing and report generation. + unwrap: true + +- tool: data_processor + arguments: + data_size: inputs[0].data_size + +- evaluate: + processed_data: "Processed " + str(inputs[0].data_size) + " units of data" + +- tool: report_generator + arguments: + data: outputs[2].processed_data + +- prompt: + role: system + content: >- + Project '{{inputs[0].project_name}}' completed. + Data processed: {{outputs[2].processed_data}} + Report generated: {{outputs[3]}} + + Summarize the project results. + unwrap: true + +- return: _ +""") + +# Creating the task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +def start_task_execution(project_name, data_size): + """Start the task execution and return the execution object.""" + execution = client.executions.create( + task_id=TASK_UUID, + input={ + "project_name": project_name, + "data_size": data_size + } + ) + print(f"Task execution started for project '{project_name}'") + return execution + +def monitor_execution_progress(execution_id): + """Monitor the execution progress in real-time.""" + print("Monitoring execution progress:") + for transition in client.executions.transitions.stream(execution_id=execution_id): + print(f"Step: {transition.type}, Status: {transition.status}") + if transition.status == "completed": + print(f" Output: {transition.output}") + elif transition.status == "failed": + print(f" Error: {transition.error}") + time.sleep(1) # Add a small delay to simulate real-time monitoring + +def get_execution_status(execution_id): + """Get the current status of the execution.""" + execution = client.executions.get(execution_id) + return execution.status + +def log_execution_metrics(execution_id): + """Log and display execution metrics.""" + print("\nExecution Metrics:") + transitions = client.executions.transitions.list(execution_id=execution_id).items + total_duration = sum(t.duration_ms for t in transitions) + for transition in transitions: + print(f"Step: {transition.type}, Duration: {transition.duration_ms}ms") + print(f"Total Execution Time: {total_duration}ms") + +# Main execution flow +def run_task_monitoring_demo(): + project_name = "Data Analysis Project" + data_size = 1000 + + print(f"Starting task execution for '{project_name}' with {data_size} units of data") + execution = start_task_execution(project_name, data_size) + + monitor_execution_progress(execution.id) + + final_status = get_execution_status(execution.id) + print(f"\nFinal Execution Status: {final_status}") + + if final_status == "completed": + result = client.executions.get(execution.id) + print("\nExecution Result:") + print(result.output) + + log_execution_metrics(execution.id) + +# Run the task monitoring demo +run_task_monitoring_demo() \ No newline at end of file diff --git a/cookbooks/13-Error_Handling_and_Recovery.py b/cookbooks/13-Error_Handling_and_Recovery.py new file mode 100644 index 000000000..f0cdf68be --- /dev/null +++ b/cookbooks/13-Error_Handling_and_Recovery.py @@ -0,0 +1,165 @@ +# Error Handling and Recovery Cookbook +# +# Plan: +# 1. Import necessary libraries and set up the Julep client +# 2. Create an agent for error handling demonstration +# 3. Define a task with potential errors and recovery mechanisms +# 4. Execute the task and demonstrate error handling +# 5. Implement a retry mechanism for failed steps +# 6. Show how to log and report errors +# 7. Demonstrate graceful degradation when a step fails + +# UNDER CONSTRUCTION - NOT WORKING YET + +import uuid +import yaml +import time +from julep import Client + +# Global UUID is generated for agent and task +AGENT_UUID = uuid.uuid4() +TASK_UUID = uuid.uuid4() + +# Creating Julep Client with the API Key +api_key = "" # Your API key here +client = Client(api_key=api_key, environment="dev") + +# Creating an agent for error handling demonstration +agent = client.agents.create_or_update( + agent_id=AGENT_UUID, + name="Error Handler", + about="An AI agent specialized in demonstrating error handling and recovery mechanisms.", + model="gpt-4o", +) + +# Defining a task with potential errors and recovery mechanisms +task_def = yaml.safe_load(""" +name: Error Handling Demo + +input_schema: + type: object + properties: + operation: + type: string + enum: ["divide", "api_call", "process_data"] + value: + type: number + +tools: +- name: divide + type: function + function: + name: divide + description: Divide 100 by the given number + parameters: + type: object + properties: + divisor: + type: number + +- name: api_call + type: integration + integration: + provider: httpbin + method: get + +- name: process_data + type: function + function: + name: process_data + description: Process the given data + parameters: + type: object + properties: + data: + type: string + +main: + +- switch: + case: "inputs[0].operation == 'divide'" + tool: divide + arguments: + divisor: inputs[0].value + on_error: + retry: + max_attempts: 3 + delay: 2 + fallback: + return: "Error: Division by zero or invalid input" + case: "inputs[0].operation == 'api_call'" + tool: api_call + arguments: + endpoint: "/status/{{inputs[0].value}}" + on_error: + retry: + max_attempts: 3 + delay: 5 + fallback: + return: "Error: API call failed after multiple attempts" + case: "inputs[0].operation == 'process_data'" + evaluate: + data: "'Sample data: ' + str(inputs[0].value)" + tool: process_data + arguments: + data: _.data + on_error: + log: "Error occurred while processing data" + return: "Error: Data processing failed" + +- prompt: + - role: system + content: >- + Summarize the result of the operation: + Operation: {{inputs[0].operation}} + Result: {{_}}] + unwrap: true +""") + +# Creating the task +task = client.tasks.create_or_update( + task_id=TASK_UUID, + agent_id=AGENT_UUID, + **task_def +) + +# Function to execute task and handle errors +def execute_task_with_error_handling(operation, value): + try: + execution = client.executions.create( + task_id=TASK_UUID, + input={"operation": operation, "value": value} + ) + + print(f"Executing {operation} with value {value}...") + + # Stream execution to show progress and potential retries + for step in client.executions.transitions.stream(execution_id=execution.id): + if step.type == "tool_call": + print(f"Step: {step.tool}") + if step.status == "error": + print(f"Error occurred: {step.error}") + if step.retry: + print(f"Retrying... (Attempt {step.retry.attempt})") + elif step.type == "error": + print(f"Task error: {step.error}") + + # Get final execution result + result = client.executions.get(execution.id) + print(f"Final result: {result.output}") + + except Exception as e: + print(f"An unexpected error occurred: {str(e)}") + +# Demonstrate error handling for different scenarios +print("1. Division by zero (with retry and fallback):") +execute_task_with_error_handling("divide", 0) + +print("\n2. API call with server error (with retry):") +execute_task_with_error_handling("api_call", 500) + +print("\n3. Data processing error (with logging):") +execute_task_with_error_handling("process_data", "invalid_data") + +print("\n4. Successful operation:") +execute_task_with_error_handling("divide", 4) \ No newline at end of file diff --git a/cookbooks/IDEAS.md b/cookbooks/IDEAS.md new file mode 100644 index 000000000..83d6d58d4 --- /dev/null +++ b/cookbooks/IDEAS.md @@ -0,0 +1,1377 @@ +# Expanded Implementation Scenarios for Julep + +Below are detailed implementation plans for each of the 50 scenarios using Julep's **docs**, **sessions**, **tasks**, and **executions** features. Each scenario includes a complexity rating from **1 (easiest)** to **5 (most complex)**. + +--- + +### 1. Automated Customer Support Agent + +**Implementation Using Julep:** + +- **Docs:** + - Store customer data, FAQs, and troubleshooting guides. + - Integrate CRM documentation for accessing and updating customer information. + +- **Sessions:** + - Create a persistent session for each customer to maintain conversation context. + - Track interaction history to personalize support. + +- **Tasks:** + - Define tasks for handling common inquiries (e.g., order status, billing issues). + - Implement escalation tasks for complex issues that require human intervention. + - Automate ticket creation and update processes. + +- **Executions:** + - Execute tasks based on customer inputs. + - Monitor task executions to ensure timely responses and issue resolutions. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integrating with external CRM systems, handling diverse query types, and maintaining contextual sessions, which increases complexity. + +--- + +### 2. Smart Research Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store access to academic databases and research papers. + - Include summarization templates and research methodologies. + +- **Sessions:** + - Manage user-specific research sessions to track ongoing projects and queries. + - Maintain context for multi-step research tasks. + +- **Tasks:** + - Create tasks for searching databases, summarizing articles, and compiling reports. + - Implement conditional steps based on research findings. + +- **Executions:** + - Execute research tasks sequentially or in parallel. + - Stream execution results to provide real-time updates to the user. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with academic databases, advanced summarization capabilities, and managing complex multi-step workflows. + +--- + +### 3. Personal Finance Manager + +**Implementation Using Julep:** + +- **Docs:** + - Store user financial data, budgeting templates, and investment information. + - Integrate banking API documentation for transaction fetching. + +- **Sessions:** + - Create persistent sessions to track user financial activities over time. + - Maintain context for budgeting goals and financial plans. + +- **Tasks:** + - Define tasks for expense tracking, budget creation, and investment monitoring. + - Automate alerts for budget limits and investment opportunities. + +- **Executions:** + - Execute financial tasks based on user interactions and predefined schedules. + - Monitor executions to provide real-time financial advice and updates. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Needs secure integration with banking APIs, real-time data processing, and robust budgeting logic. + +--- + +### 4. Content Creation Workflow + +**Implementation Using Julep:** + +- **Docs:** + - Store SEO guidelines, content templates, and style guides. + - Include access to keyword research tools. + +- **Sessions:** + - Manage content creation sessions to track progress and drafts. + - Maintain context for ongoing content projects. + +- **Tasks:** + - Create multi-step tasks for topic ideation, content drafting, SEO optimization, and scheduling. + - Integrate tools for grammar checking and SEO analysis. + +- **Executions:** + - Automate the execution of content creation tasks. + - Schedule publishing according to editorial calendars. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves coordinating multiple tools and steps but remains manageable with clear task definitions. + +--- + +### 5. E-commerce Order Processing System + +**Implementation Using Julep:** + +- **Docs:** + - Store product catalogs, inventory data, and order processing guidelines. + - Integrate with shipping provider APIs. + +- **Sessions:** + - Create sessions for each order to track its lifecycle. + - Maintain context for customer preferences and order history. + +- **Tasks:** + - Define tasks for order validation, inventory updates, payment processing, and shipment tracking. + - Automate customer notifications at each stage. + +- **Executions:** + - Execute order processing tasks in sequence. + - Monitor executions to handle exceptions like payment failures or inventory shortages. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires robust integrations with payment gateways, inventory systems, and shipping providers, along with handling various order states. + +--- + +### 6. AI-Powered Personal Trainer + +**Implementation Using Julep:** + +- **Docs:** + - Store workout routines, nutritional plans, and progress tracking templates. + - Include integration details for fitness tracking APIs. + +- **Sessions:** + - Create individual sessions for each user to track their fitness journey. + - Maintain context for user goals and progress. + +- **Tasks:** + - Define tasks for generating personalized workout plans, tracking progress, and adjusting routines. + - Automate reminders and motivational messages. + +- **Executions:** + - Execute fitness tasks based on user inputs and scheduled routines. + - Monitor executions to provide real-time feedback and adjustments. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves personalization and integration with fitness data sources, but achievable with well-defined task workflows. + +--- + +### 7. Automated Email Marketing Campaigns + +**Implementation Using Julep:** + +- **Docs:** + - Store email templates, segmentation criteria, and campaign schedules. + - Integrate with email marketing platforms (e.g., SendGrid, Mailchimp). + +- **Sessions:** + - Manage campaign-specific sessions to track interactions and responses. + - Maintain context for ongoing and past campaigns. + +- **Tasks:** + - Create tasks for email creation, scheduling, sending, and performance analysis. + - Automate A/B testing and content personalization. + +- **Executions:** + - Execute email campaigns based on predefined schedules and triggers. + - Monitor execution performance and adjust strategies accordingly. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with email platforms and managing dynamic content delivery, but is straightforward with clear task definitions. + +--- + +### 8. Intelligent Recruitment Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store job descriptions, candidate profiles, and evaluation criteria. + - Integrate with HR systems and job boards. + +- **Sessions:** + - Create sessions for each recruitment process to track candidate interactions. + - Maintain context for candidate status and feedback. + +- **Tasks:** + - Define tasks for resume screening, interview scheduling, and candidate communications. + - Automate feedback collection and report generation. + +- **Executions:** + - Execute recruitment tasks based on candidate actions and application stages. + - Monitor executions to ensure timely processing and compliance. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves complex integrations with HR systems, handling diverse candidate data, and ensuring compliance with recruitment processes. + +--- + +### 9. Smart Home Automation Controller + +**Implementation Using Julep:** + +- **Docs:** + - Store device configurations, automation rules, and user preferences. + - Integrate with smart home device APIs (e.g., Philips Hue, Nest). + +- **Sessions:** + - Manage user-specific sessions to track home automation settings. + - Maintain context for user routines and preferences. + +- **Tasks:** + - Create tasks for device control, routine scheduling, and energy monitoring. + - Automate actions based on triggers like time, occupancy, or environmental changes. + +- **Executions:** + - Execute home automation tasks in real-time or based on schedules. + - Monitor executions to ensure devices respond correctly and adjust settings as needed. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with multiple smart devices and managing dynamic automation rules, increasing system complexity. + +--- + +### 10. Automated Legal Document Analyzer + +**Implementation Using Julep:** + +- **Docs:** + - Store legal templates, compliance guidelines, and case studies. + - Integrate with legal databases and document repositories. + +- **Sessions:** + - Create sessions for each document analysis to track progress and findings. + - Maintain context for specific legal requirements and clauses. + +- **Tasks:** + - Define tasks for document ingestion, key information extraction, compliance checking, and summarization. + - Automate flagging of non-compliant sections and suggest necessary amendments. + +- **Executions:** + - Execute document analysis tasks sequentially or in parallel. + - Monitor executions to ensure accuracy and compliance with legal standards. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves advanced natural language processing, integration with legal databases, and ensuring compliance with intricate legal standards. + +--- + +### 11. Personalized Learning Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store educational content, learning paths, and assessment criteria. + - Integrate with educational platforms and resources. + +- **Sessions:** + - Create individual learning sessions to track user progress and preferences. + - Maintain context for personalized learning paths and goals. + +- **Tasks:** + - Define tasks for content recommendation, quiz generation, progress tracking, and feedback provision. + - Automate adjustments to learning paths based on performance. + +- **Executions:** + - Execute learning tasks based on user interactions and progress. + - Monitor executions to provide real-time feedback and adjust learning strategies. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires personalization algorithms, integration with educational content sources, and dynamic adaptation to user progress. + +--- + +### 12. AI-Driven Social Media Manager + +**Implementation Using Julep:** + +- **Docs:** + - Store social media strategies, content calendars, and engagement guidelines. + - Integrate with social media APIs (e.g., Twitter, Facebook, LinkedIn). + +- **Sessions:** + - Manage campaign-specific sessions to track posts, engagements, and analytics. + - Maintain context for ongoing and scheduled campaigns. + +- **Tasks:** + - Create tasks for content creation, scheduling, posting, and performance analysis. + - Automate engagement responses and A/B testing of content. + +- **Executions:** + - Execute social media tasks based on schedules and real-time engagement triggers. + - Monitor executions to optimize performance and adjust strategies. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with multiple social media platforms, dynamic content management, and real-time engagement handling. + +--- + +### 13. Automated Travel Itinerary Planner + +**Implementation Using Julep:** + +- **Docs:** + - Store travel guides, destination information, and booking APIs. + - Integrate with flight, hotel, and transportation service APIs. + +- **Sessions:** + - Create travel-specific sessions to track itinerary progress and user preferences. + - Maintain context for personalized travel plans and updates. + +- **Tasks:** + - Define tasks for destination research, booking accommodations and transportation, and itinerary scheduling. + - Automate real-time updates and notifications during trips. + +- **Executions:** + - Execute travel planning tasks based on user inputs and predefined schedules. + - Monitor executions to handle changes and provide timely updates. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with travel service APIs and managing dynamic itinerary changes, which adds moderate complexity. + +--- + +### 14. AI-Powered Inventory Management System + +**Implementation Using Julep:** + +- **Docs:** + - Store inventory data, supplier information, and reordering guidelines. + - Integrate with inventory tracking systems and supplier APIs. + +- **Sessions:** + - Manage inventory sessions to monitor stock levels and reorder statuses. + - Maintain context for inventory forecasts and demand trends. + +- **Tasks:** + - Create tasks for stock monitoring, demand forecasting, automatic reordering, and supplier communication. + - Automate alerts for low stock levels and order confirmations. + +- **Executions:** + - Execute inventory management tasks in real-time or based on schedules. + - Monitor executions to ensure accurate stock levels and timely reorders. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires real-time inventory tracking, predictive analytics for demand forecasting, and reliable integration with supplier systems. + +--- + +### 15. Intelligent Health Monitoring System + +**Implementation Using Julep:** + +- **Docs:** + - Store health metrics templates, medical guidelines, and user health data. + - Integrate with health tracking devices and APIs (e.g., Fitbit, Apple Health). + +- **Sessions:** + - Create sessions for each user to track their health metrics and progress. + - Maintain context for personalized health goals and alerts. + +- **Tasks:** + - Define tasks for data collection, health metric analysis, trend monitoring, and alert notifications. + - Automate health insights and recommendations based on data. + +- **Executions:** + - Execute health monitoring tasks continuously or at scheduled intervals. + - Monitor executions to provide real-time health alerts and advice. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with diverse health tracking devices, real-time data processing, and ensuring data privacy and accuracy. + +--- + +### 16. Automated Content Moderation Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store community guidelines, content policies, and moderation rules. + - Integrate with content platforms (e.g., forums, social media). + +- **Sessions:** + - Manage moderation sessions to track content reviews and decisions. + - Maintain context for specific moderation cases and user histories. + +- **Tasks:** + - Create tasks for content ingestion, automated screening, manual review, and action enforcement. + - Automate flagging of inappropriate content and notifying users of violations. + +- **Executions:** + - Execute content moderation tasks in real-time or batch processing. + - Monitor executions to ensure compliance and handle escalations. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves sophisticated content analysis, balancing automation with manual oversight, and ensuring adherence to diverse content policies. + +--- + +### 17. AI-Powered Resume Builder + +**Implementation Using Julep:** + +- **Docs:** + - Store resume templates, industry-specific keywords, and formatting guidelines. + - Integrate with LinkedIn and other professional platforms for data fetching. + +- **Sessions:** + - Create user-specific sessions to track resume building progress. + - Maintain context for personalized content and formatting preferences. + +- **Tasks:** + - Define tasks for data collection, content suggestion, resume formatting, and final export. + - Automate style checks and consistency validations. + +- **Executions:** + - Execute resume building tasks based on user inputs and selections. + - Monitor executions to provide real-time feedback and suggestions. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with professional data sources and implementing dynamic content generation and formatting. + +--- + +### 18. Smart Event Management System + +**Implementation Using Julep:** + +- **Docs:** + - Store event templates, scheduling guidelines, and registration forms. + - Integrate with calendar and email platforms. + +- **Sessions:** + - Manage event-specific sessions to track registrations, schedules, and attendee interactions. + - Maintain context for event updates and follow-ups. + +- **Tasks:** + - Create tasks for event creation, attendee registration, schedule management, and post-event follow-ups. + - Automate reminders, notifications, and feedback collection. + +- **Executions:** + - Execute event management tasks based on schedules and attendee actions. + - Monitor executions to handle registrations and event logistics seamlessly. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves coordinating multiple aspects of event planning, handling real-time registrations, and ensuring smooth execution logistics. + +--- + +### 19. Automated Survey Analyzer + +**Implementation Using Julep:** + +- **Docs:** + - Store survey templates, question types, and analysis methodologies. + - Integrate with survey distribution platforms (e.g., SurveyMonkey, Google Forms). + +- **Sessions:** + - Create sessions for each survey to track responses and analysis progress. + - Maintain context for specific survey objectives and parameters. + +- **Tasks:** + - Define tasks for survey distribution, data collection, sentiment analysis, and report generation. + - Automate data visualization and trend identification. + +- **Executions:** + - Execute survey analysis tasks upon survey completion. + - Monitor executions to provide timely and accurate insights. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with survey platforms and implementing effective data analysis and visualization techniques. + +--- + +### 20. AI-Driven Project Management Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store project templates, task guidelines, and progress tracking tools. + - Integrate with project management platforms (e.g., Jira, Trello). + +- **Sessions:** + - Manage project-specific sessions to track tasks, milestones, and team interactions. + - Maintain context for project goals and progress updates. + +- **Tasks:** + - Create tasks for task breakdown, assignment, progress tracking, and status reporting. + - Automate notifications for deadlines and task completions. + +- **Executions:** + - Execute project management tasks based on project timelines and team inputs. + - Monitor executions to ensure projects stay on track and within scope. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with diverse project management tools, handling dynamic task assignments, and ensuring effective progress tracking. + +--- + +### 21. Intelligent Document Summarizer + +**Implementation Using Julep:** + +- **Docs:** + - Store access to large documents, research papers, and reports. + - Include summarization algorithms and templates. + +- **Sessions:** + - Create sessions for each document summarization task. + - Maintain context for document sections and summarization preferences. + +- **Tasks:** + - Define tasks for document ingestion, key point extraction, and summary generation. + - Automate quality checks and user-specific summary adjustments. + +- **Executions:** + - Execute document summarization tasks efficiently. + - Monitor executions to ensure accurate and concise summaries. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires advanced natural language processing capabilities and efficient handling of large document data. + +--- + +### 22. Automated Feedback Collection and Analysis + +**Implementation Using Julep:** + +- **Docs:** + - Store feedback forms, analysis templates, and reporting guidelines. + - Integrate with feedback collection platforms (e.g., Typeform, Google Forms). + +- **Sessions:** + - Manage feedback-specific sessions to track responses and analysis progress. + - Maintain context for feedback sources and analysis objectives. + +- **Tasks:** + - Create tasks for feedback distribution, data collection, sentiment analysis, and insight generation. + - Automate categorization and prioritization of feedback. + +- **Executions:** + - Execute feedback analysis tasks promptly upon data collection. + - Monitor executions to provide actionable insights and improvement strategies. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integrating with feedback platforms and implementing effective sentiment analysis and categorization. + +--- + +### 23. AI-Powered Language Translator + +**Implementation Using Julep:** + +- **Docs:** + - Store language dictionaries, translation models, and formatting guidelines. + - Integrate with translation APIs (e.g., Google Translate, DeepL). + +- **Sessions:** + - Create translation-specific sessions to track user preferences and translation history. + - Maintain context for ongoing translation projects. + +- **Tasks:** + - Define tasks for text ingestion, language detection, translation processing, and quality assurance. + - Automate post-translation formatting and localization adjustments. + +- **Executions:** + - Execute translation tasks in real-time or batch mode. + - Monitor executions to ensure accuracy and contextual relevance. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with robust translation APIs and handling nuances of different languages and contexts. + +--- + +### 24. Smart Appointment Scheduler + +**Implementation Using Julep:** + +- **Docs:** + - Store scheduling templates, availability guidelines, and notification templates. + - Integrate with calendar platforms (e.g., Google Calendar, Outlook). + +- **Sessions:** + - Manage appointment-specific sessions to track scheduling progress and attendee interactions. + - Maintain context for user availability and preferences. + +- **Tasks:** + - Create tasks for availability checking, meeting scheduling, sending reminders, and handling cancellations. + - Automate conflict detection and resolution. + +- **Executions:** + - Execute scheduling tasks based on user inputs and calendar data. + - Monitor executions to ensure appointments are set correctly and notifications are sent. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integration with calendar systems and implementing conflict resolution logic, which adds moderate complexity. + +--- + +### 25. Automated Inventory Auditor + +**Implementation Using Julep:** + +- **Docs:** + - Store inventory audit templates, reconciliation guidelines, and reporting formats. + - Integrate with inventory management systems and databases. + +- **Sessions:** + - Create auditing sessions to track audit schedules and findings. + - Maintain context for different inventory categories and audit criteria. + +- **Tasks:** + - Define tasks for data extraction, discrepancy detection, reconciliation processes, and report generation. + - Automate audit scheduling and notification of audit results. + +- **Executions:** + - Execute inventory audit tasks periodically or on-demand. + - Monitor executions to ensure accurate and timely audits. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires reliable data integration and robust discrepancy detection mechanisms to handle complex inventory data. + +--- + +### 26. AI-Driven Competitive Analysis Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store competitor profiles, market analysis frameworks, and data sources. + - Integrate with market research APIs and competitor websites. + +- **Sessions:** + - Manage competitive analysis sessions to track data collection and analysis progress. + - Maintain context for specific market segments and competitive factors. + +- **Tasks:** + - Create tasks for data scraping, trend analysis, SWOT analysis, and report generation. + - Automate the aggregation and visualization of competitive data. + +- **Executions:** + - Execute competitive analysis tasks on a scheduled basis. + - Monitor executions to provide up-to-date insights and strategic recommendations. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves complex data scraping, accurate trend analysis, and maintaining up-to-date competitive insights, increasing overall complexity. + +--- + +### 27. Smart Recipe Generator + +**Implementation Using Julep:** + +- **Docs:** + - Store ingredient databases, recipe templates, and dietary guidelines. + - Integrate with nutrition APIs and grocery databases. + +- **Sessions:** + - Create user-specific sessions to track dietary preferences and past recipes. + - Maintain context for ingredient availability and nutritional goals. + +- **Tasks:** + - Define tasks for ingredient analysis, recipe generation, nutritional calculation, and grocery list creation. + - Automate recipe suggestions based on user inputs and constraints. + +- **Executions:** + - Execute recipe generation tasks in real-time based on user requests. + - Monitor executions to ensure recipe accuracy and adherence to dietary needs. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with nutrition and grocery APIs and implementing intelligent recipe generation logic. + +--- + +### 28. Automated Video Content Creator + +**Implementation Using Julep:** + +- **Docs:** + - Store video script templates, editing guidelines, and publishing schedules. + - Integrate with video editing and hosting platforms (e.g., Adobe Premiere, YouTube). + +- **Sessions:** + - Manage video creation sessions to track script development, editing stages, and publishing. + - Maintain context for ongoing video projects and collaboration. + +- **Tasks:** + - Create tasks for script generation, video editing, thumbnail creation, and publishing. + - Automate content review and approval workflows. + +- **Executions:** + - Execute video creation tasks based on project timelines. + - Monitor executions to ensure timely releases and quality standards. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with multiple video tools, managing creative workflows, and ensuring high-quality content production. + +--- + +### 29. AI-Powered News Aggregator + +**Implementation Using Julep:** + +- **Docs:** + - Store news source lists, categorization templates, and summarization guidelines. + - Integrate with news APIs (e.g., NewsAPI, RSS feeds). + +- **Sessions:** + - Create user-specific sessions to track news preferences and reading history. + - Maintain context for personalized news feeds and topics of interest. + +- **Tasks:** + - Define tasks for news scraping, categorization, summarization, and personalization. + - Automate feed generation and delivery based on user preferences. + +- **Executions:** + - Execute news aggregation tasks periodically. + - Monitor executions to ensure timely and relevant news delivery. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires efficient news scraping, accurate categorization, and personalized summarization, but is manageable with clear task workflows. + +--- + +### 30. Intelligent Appointment Follow-Up System + +**Implementation Using Julep:** + +- **Docs:** + - Store follow-up templates, feedback forms, and communication guidelines. + - Integrate with CRM and email platforms. + +- **Sessions:** + - Manage follow-up sessions to track appointments and subsequent communications. + - Maintain context for previous interactions and follow-up actions. + +- **Tasks:** + - Create tasks for sending follow-up emails, collecting feedback, and scheduling future appointments. + - Automate reminder notifications and feedback analysis. + +- **Executions:** + - Execute follow-up tasks based on appointment completions. + - Monitor executions to ensure timely and effective communications. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integration with CRM systems and implementing automated communication workflows, adding moderate complexity. + +--- + +### 31. Automated Compliance Monitoring Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store regulatory guidelines, compliance checklists, and reporting templates. + - Integrate with internal systems and regulatory databases. + +- **Sessions:** + - Create compliance-specific sessions to track monitoring activities and audit trails. + - Maintain context for various compliance standards and organizational policies. + +- **Tasks:** + - Define tasks for continuous monitoring, policy enforcement, and compliance reporting. + - Automate detection of non-compliant activities and trigger corrective actions. + +- **Executions:** + - Execute compliance monitoring tasks in real-time. + - Monitor executions to ensure ongoing adherence to regulations and standards. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Requires comprehensive integration with organizational systems, robust monitoring mechanisms, and ensuring adherence to multifaceted regulatory requirements. + +--- + +### 32. AI-Powered Personal Shopper + +**Implementation Using Julep:** + +- **Docs:** + - Store product catalogs, user preference data, and recommendation algorithms. + - Integrate with e-commerce APIs (e.g., Amazon, Shopify). + +- **Sessions:** + - Manage shopping sessions to track user preferences and purchase history. + - Maintain context for personalized product recommendations. + +- **Tasks:** + - Create tasks for product suggestion, wishlist management, and deal notifications. + - Automate price comparisons and availability checks. + +- **Executions:** + - Execute personal shopping tasks based on user inputs and behavior. + - Monitor executions to provide timely recommendations and alerts. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with multiple e-commerce platforms, implementing personalized recommendation logic, and handling real-time deal tracking. + +--- + +### 33. Smart Content Personalization Engine + +**Implementation Using Julep:** + +- **Docs:** + - Store content variants, personalization rules, and user segmentation data. + - Integrate with website CMS and analytics platforms. + +- **Sessions:** + - Create user-specific sessions to track interactions and preferences. + - Maintain context for personalized content delivery. + +- **Tasks:** + - Define tasks for content analysis, user behavior tracking, and personalized content delivery. + - Automate A/B testing and content optimization based on performance metrics. + +- **Executions:** + - Execute content personalization tasks in real-time. + - Monitor executions to adjust personalization strategies dynamically. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires real-time user behavior tracking, dynamic content delivery, and continuous optimization based on analytics, increasing system complexity. + +--- + +### 34. Automated Debt Collection Agent + +**Implementation Using Julep:** + +- **Docs:** + - Store debt agreements, payment schedules, and communication templates. + - Integrate with financial systems and payment gateways. + +- **Sessions:** + - Manage debt collection sessions to track debtor interactions and payment statuses. + - Maintain context for individual debtors and their payment histories. + +- **Tasks:** + - Create tasks for sending payment reminders, negotiating payment plans, and issuing notifications. + - Automate follow-ups and escalation procedures for delinquent accounts. + +- **Executions:** + - Execute debt collection tasks based on payment statuses and schedules. + - Monitor executions to ensure effective communication and resolution. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves sensitive financial data handling, integration with payment systems, and implementing automated negotiation workflows. + +--- + +### 35. AI-Driven Talent Matching System + +**Implementation Using Julep:** + +- **Docs:** + - Store job descriptions, candidate profiles, and matching criteria. + - Integrate with job boards and professional networking platforms. + +- **Sessions:** + - Create sessions for each matching process to track candidate-job pairings. + - Maintain context for specific job requirements and candidate qualifications. + +- **Tasks:** + - Define tasks for candidate screening, skills matching, and recommendation generation. + - Automate notifications to both candidates and employers regarding match statuses. + +- **Executions:** + - Execute talent matching tasks based on incoming job postings and candidate applications. + - Monitor executions to ensure accurate and timely matches. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Requires sophisticated matching algorithms, integration with diverse data sources, and handling dynamic job and candidate data. + +--- + +### 36. Intelligent Expense Reporting Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store expense categories, reimbursement policies, and reporting templates. + - Integrate with financial systems and expense tracking APIs. + +- **Sessions:** + - Manage expense reporting sessions to track submissions and approvals. + - Maintain context for individual employee expenses and budget limits. + +- **Tasks:** + - Create tasks for expense submission, approval workflows, and reimbursement processing. + - Automate validation checks and compliance with policies. + +- **Executions:** + - Execute expense reporting tasks based on submission triggers and approval workflows. + - Monitor executions to ensure timely reimbursements and policy adherence. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with financial systems, implementing approval workflows, and ensuring compliance with expense policies. + +--- + +### 37. Automated Meeting Minutes Recorder + +**Implementation Using Julep:** + +- **Docs:** + - Store meeting agendas, transcription templates, and summary guidelines. + - Integrate with audio transcription services (e.g., Otter.ai, Google Speech-to-Text). + +- **Sessions:** + - Create meeting-specific sessions to track transcription and summarization progress. + - Maintain context for meeting topics and participant interactions. + +- **Tasks:** + - Define tasks for audio ingestion, transcription, summary generation, and distribution. + - Automate the extraction of action items and key decisions. + +- **Executions:** + - Execute transcription and summarization tasks in real-time or post-meeting. + - Monitor executions to ensure accurate recordings and timely distribution. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires reliable audio transcription integration and effective summarization techniques, but manageable with clear task definitions. + +--- + +### 38. AI-Driven Content Recommendation System + +**Implementation Using Julep:** + +- **Docs:** + - Store user profiles, content metadata, and recommendation algorithms. + - Integrate with content management systems and user behavior analytics. + +- **Sessions:** + - Manage user-specific sessions to track interactions and preference changes. + - Maintain context for personalized content delivery. + +- **Tasks:** + - Define tasks for content analysis, user behavior tracking, and recommendation generation. + - Automate personalization based on real-time user interactions. + +- **Executions:** + - Execute content recommendation tasks in real-time. + - Monitor executions to refine recommendation accuracy and relevance. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves real-time data processing, advanced recommendation algorithms, and integration with multiple content sources. + +--- + +### 39. Smart Time Tracking Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store time tracking templates, productivity guidelines, and reporting formats. + - Integrate with productivity tools (e.g., Toggl, Clockify). + +- **Sessions:** + - Create user-specific sessions to track time spent on tasks and projects. + - Maintain context for task prioritization and productivity goals. + +- **Tasks:** + - Define tasks for time logging, productivity analysis, and report generation. + - Automate reminders for time tracking and productivity tips based on usage patterns. + +- **Executions:** + - Execute time tracking tasks continuously or based on user actions. + - Monitor executions to provide real-time productivity insights and suggestions. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with time tracking tools and implementing effective productivity analysis logic. + +--- + +### 40. Automated Webinar Hosting Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store webinar schedules, registration forms, and hosting guidelines. + - Integrate with webinar platforms (e.g., Zoom, WebinarJam). + +- **Sessions:** + - Manage webinar-specific sessions to track registrations, attendee interactions, and follow-ups. + - Maintain context for webinar topics and participant engagement. + +- **Tasks:** + - Create tasks for webinar scheduling, participant management, live interactions, and post-webinar follow-ups. + - Automate reminders, thank-you emails, and feedback collection. + +- **Executions:** + - Execute webinar hosting tasks based on schedules and participant actions. + - Monitor executions to ensure smooth webinar operations and effective follow-ups. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves integration with webinar platforms, managing live interactions, and handling post-event processes seamlessly. + +--- + +### 41. AI-Powered Inventory Forecasting Tool + +**Implementation Using Julep:** + +- **Docs:** + - Store sales data, forecasting models, and inventory guidelines. + - Integrate with sales and inventory tracking systems. + +- **Sessions:** + - Create forecasting sessions to track sales trends and inventory predictions. + - Maintain context for seasonal factors and market conditions affecting inventory. + +- **Tasks:** + - Define tasks for data collection, trend analysis, prediction model execution, and report generation. + - Automate alerts for predicted stock shortages or surpluses. + +- **Executions:** + - Execute forecasting tasks periodically based on sales data updates. + - Monitor executions to refine prediction accuracy and adjust inventory strategies. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires advanced predictive analytics, integration with sales systems, and handling dynamic market conditions influencing inventory. + +--- + +### 42. Smart Contract Management System + +**Implementation Using Julep:** + +- **Docs:** + - Store smart contract templates, execution guidelines, and compliance rules. + - Integrate with blockchain platforms (e.g., Ethereum, Hyperledger). + +- **Sessions:** + - Manage contract-specific sessions to track creation, execution, and monitoring. + - Maintain context for contract terms and participant interactions. + +- **Tasks:** + - Create tasks for contract creation, deployment, execution monitoring, and compliance checks. + - Automate notifications for contract milestones and compliance alerts. + +- **Executions:** + - Execute smart contract tasks based on blockchain events and predefined triggers. + - Monitor executions to ensure contract integrity and compliance. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves blockchain integration, ensuring smart contract security, and managing complex execution and compliance workflows. + +--- + +### 43. Automated Knowledge Base Updater + +**Implementation Using Julep:** + +- **Docs:** + - Store knowledge base articles, update guidelines, and categorization rules. + - Integrate with content management systems and information sources. + +- **Sessions:** + - Create knowledge base sessions to track updates, revisions, and user queries. + - Maintain context for content accuracy and relevance. + +- **Tasks:** + - Define tasks for content ingestion, information extraction, categorization, and publishing. + - Automate periodic reviews and updates based on new information sources. + +- **Executions:** + - Execute knowledge base update tasks as new content becomes available. + - Monitor executions to ensure timely and accurate information updates. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires efficient content ingestion, accurate information extraction, and seamless integration with knowledge management systems. + +--- + +### 44. AI-Driven Fraud Detection System + +**Implementation Using Julep:** + +- **Docs:** + - Store fraud detection algorithms, monitoring guidelines, and incident response protocols. + - Integrate with financial transaction systems and security APIs. + +- **Sessions:** + - Manage fraud detection sessions to track suspicious activities and investigations. + - Maintain context for user behavior patterns and anomaly detection. + +- **Tasks:** + - Create tasks for real-time transaction monitoring, anomaly detection, incident logging, and alerting. + - Automate response actions like freezing accounts or notifying security teams. + +- **Executions:** + - Execute fraud detection tasks continuously based on transaction flows. + - Monitor executions to ensure timely detection and response to fraudulent activities. + +**Complexity Rating:** ★★★★★ + +**Explanation:** Involves real-time data processing, sophisticated anomaly detection algorithms, and ensuring robust security measures. + +--- + +### 45. Intelligent Personal Diary Assistant + +**Implementation Using Julep:** + +- **Docs:** + - Store diary templates, emotional analysis guidelines, and reflection prompts. + - Integrate with sentiment analysis APIs. + +- **Sessions:** + - Create user-specific sessions to track daily entries and emotional states. + - Maintain context for personal growth and mood trends. + +- **Tasks:** + - Define tasks for daily entry prompts, sentiment analysis, and insight generation. + - Automate privacy controls and data encryption for secure diary storage. + +- **Executions:** + - Execute diary assistant tasks daily based on user inputs. + - Monitor executions to provide personalized insights and growth tracking. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Requires integration with sentiment analysis tools and ensuring secure data handling, but manageable with well-defined workflows. + +--- + +### 46. Automated Language Learning Tutor + +**Implementation Using Julep:** + +- **Docs:** + - Store language lessons, exercise templates, and feedback guidelines. + - Integrate with language processing APIs and educational resources. + +- **Sessions:** + - Manage learning sessions to track user progress and performance. + - Maintain context for personalized lesson plans and feedback. + +- **Tasks:** + - Create tasks for lesson delivery, exercise generation, progress tracking, and feedback provision. + - Automate adaptive learning paths based on user performance. + +- **Executions:** + - Execute language learning tasks based on user interactions and learning schedules. + - Monitor executions to adjust learning strategies and provide real-time feedback. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves adaptive learning algorithms, integration with language processing tools, and personalized content delivery. + +--- + +### 47. AI-Powered Budgeting Tool for Businesses + +**Implementation Using Julep:** + +- **Docs:** + - Store budgeting templates, financial guidelines, and reporting formats. + - Integrate with accounting systems and financial data sources. + +- **Sessions:** + - Create budgeting sessions to track financial planning and expenditure. + - Maintain context for organizational financial goals and constraints. + +- **Tasks:** + - Define tasks for budget creation, expenditure tracking, financial forecasting, and report generation. + - Automate alerts for budget overruns and financial goal assessments. + +- **Executions:** + - Execute budgeting tasks based on financial data updates and planning cycles. + - Monitor executions to ensure accurate financial tracking and reporting. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires integration with accounting systems, accurate financial forecasting, and robust budgeting logic to handle business complexities. + +--- + +### 48. Smart Compliance Documentation Generator + +**Implementation Using Julep:** + +- **Docs:** + - Store compliance templates, regulatory guidelines, and documentation standards. + - Integrate with regulatory databases and internal policy systems. + +- **Sessions:** + - Manage compliance documentation sessions to track document creation and updates. + - Maintain context for specific regulatory requirements and organizational policies. + +- **Tasks:** + - Create tasks for document generation, compliance checking, format validation, and publishing. + - Automate updates based on regulatory changes and policy revisions. + +- **Executions:** + - Execute compliance documentation tasks as needed or on a schedule. + - Monitor executions to ensure documents meet all compliance standards. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Involves dynamic document generation, adherence to detailed regulatory standards, and ensuring continuous updates based on regulatory changes. + +--- + +### 49. Automated Product Recommendation Engine + +**Implementation Using Julep:** + +- **Docs:** + - Store product catalogs, user behavior data, and recommendation algorithms. + - Integrate with e-commerce platforms and user analytics tools. + +- **Sessions:** + - Create user-specific sessions to track interactions and preferences. + - Maintain context for personalized recommendation accuracy. + +- **Tasks:** + - Define tasks for data collection, behavior analysis, recommendation generation, and user feedback integration. + - Automate real-time recommendations based on user actions and trends. + +- **Executions:** + - Execute recommendation tasks in real-time to provide instant suggestions. + - Monitor executions to refine algorithms and improve recommendation relevance. + +**Complexity Rating:** ★★★★☆ + +**Explanation:** Requires sophisticated recommendation algorithms, real-time data processing, and continuous refinement based on user feedback. + +--- + +### 50. Intelligent Event Feedback Analyzer + +**Implementation Using Julep:** + +- **Docs:** + - Store feedback forms, analysis templates, and reporting standards. + - Integrate with event platforms and feedback collection tools. + +- **Sessions:** + - Manage feedback-specific sessions to track responses and analysis progress. + - Maintain context for event-specific feedback and improvement areas. + +- **Tasks:** + - Create tasks for feedback collection, sentiment analysis, trend identification, and report generation. + - Automate the extraction of actionable insights and improvement suggestions. + +- **Executions:** + - Execute feedback analysis tasks post-event. + - Monitor executions to ensure accurate and timely feedback processing and reporting. + +**Complexity Rating:** ★★★☆☆ + +**Explanation:** Involves integrating with feedback collection tools and implementing effective sentiment analysis and trend identification mechanisms. + +--- + +# Complexity and Difficulty Ratings + +The scenarios have been rated based on the number of integrated features, required integrations, and overall system complexity. Here's a quick overview: + +- **★☆☆☆☆ (1/5): Easiest** +- **★★☆☆☆ (2/5): Low Complexity** +- **★★★☆☆ (3/5): Moderate Complexity** +- **★★★★☆ (4/5): High Complexity** +- **★★★★★ (5/5): Most Complex** + +| **Scenario** | **Complexity Rating** | +|---------------------------------------------------|-----------------------| +| 1. Automated Customer Support Agent | ★★★★☆ | +| 2. Smart Research Assistant | ★★★★☆ | +| 3. Personal Finance Manager | ★★★☆☆ | +| 4. Content Creation Workflow | ★★★☆☆ | +| 5. E-commerce Order Processing System | ★★★★☆ | +| 6. AI-Powered Personal Trainer | ★★★☆☆ | +| 7. Automated Email Marketing Campaigns | ★★★☆☆ | +| 8. Intelligent Recruitment Assistant | ★★★★★ | +| 9. Smart Home Automation Controller | ★★★★☆ | +| 10. Automated Legal Document Analyzer | ★★★★★ | +| 11. Personalized Learning Assistant | ★★★★☆ | +| 12. AI-Driven Social Media Manager | ★★★★☆ | +| 13. Automated Travel Itinerary Planner | ★★★☆☆ | +| 14. AI-Powered Inventory Management System | ★★★★☆ | +| 15. Intelligent Health Monitoring System | ★★★★☆ | +| 16. Automated Content Moderation Tool | ★★★★★ | +| 17. AI-Powered Resume Builder | ★★★☆☆ | +| 18. Smart Event Management System | ★★★★☆ | +| 19. Automated Survey Analyzer | ★★★☆☆ | +| 20. AI-Driven Project Management Assistant | ★★★★☆ | +| 21. Intelligent Document Summarizer | ★★★★☆ | +| 22. Automated Feedback Collection and Analysis | ★★★☆☆ | +| 23. AI-Powered Language Translator | ★★★☆☆ | +| 24. Smart Appointment Scheduler | ★★★☆☆ | +| 25. Automated Inventory Auditor | ★★★★☆ | +| 26. AI-Driven Competitive Analysis Tool | ★★★★☆ | +| 27. Smart Recipe Generator | ★★★☆☆ | +| 28. Automated Video Content Creator | ★★★★☆ | +| 29. AI-Powered News Aggregator | ★★★☆☆ | +| 30. Intelligent Appointment Follow-Up System | ★★★☆☆ | +| 31. Automated Compliance Monitoring Tool | ★★★★★ | +| 32. AI-Powered Personal Shopper | ★★★★☆ | +| 33. Smart Content Personalization Engine | ★★★★☆ | +| 34. Automated Debt Collection Agent | ★★★★☆ | +| 35. AI-Driven Talent Matching System | ★★★★★ | +| 36. Intelligent Expense Reporting Tool | ★★★★☆ | +| 37. Automated Meeting Minutes Recorder | ★★★☆☆ | +| 38. AI-Driven Content Recommendation System | ★★★★☆ | +| 39. Smart Time Tracking Assistant | ★★★☆☆ | +| 40. Automated Webinar Hosting Assistant | ★★★★☆ | +| 41. AI-Powered Inventory Forecasting Tool | ★★★★☆ | +| 42. Smart Contract Management System | ★★★★★ | +| 43. Automated Knowledge Base Updater | ★★★★☆ | +| 44. AI-Driven Fraud Detection System | ★★★★★ | +| 45. Intelligent Personal Diary Assistant | ★★★☆☆ | +| 46. Automated Language Learning Tutor | ★★★★☆ | +| 47. AI-Powered Budgeting Tool for Businesses | ★★★★☆ | +| 48. Smart Compliance Documentation Generator | ★★★★☆ | +| 49. Automated Product Recommendation Engine | ★★★★☆ | +| 50. Intelligent Event Feedback Analyzer | ★★★☆☆ | + +--- + +# Conclusion + +These 50 scenarios showcase the versatility and power of Julep's **docs**, **sessions**, **tasks**, and **executions** features in automating and enhancing various business and personal workflows. Depending on your specific needs and available integrations, these scenarios can be tailored to create efficient, intelligent, and scalable solutions. + +Feel free to explore these scenarios, adapt them to your use cases, and contribute to expanding Julep's capabilities further! \ No newline at end of file diff --git a/cookbooks/README.md b/cookbooks/README.md new file mode 100644 index 000000000..7af36aff6 --- /dev/null +++ b/cookbooks/README.md @@ -0,0 +1,150 @@ +
+ julep +
+ +# Julep AI - Notebook Overview + +Welcome to the **Julep AI Notebook Collection**! This directory contains a set of Jupyter notebooks designed to showcase various AI and automation tasks using Julep's features. + +Each notebook explores a unique use case, demonstrating different aspects of Julep's capabilities. Below is a quick overview of the notebooks, their purpose, and a link to run each of them on Google Colab. + +| **Notebook Name** | **Colab Link** | **Description** | **Implemented** | +|------------------------------------------------- |---------------------------------------------------------------------------- |--------------------------------------------------------------------|-----------------| +| `01-Website_Crawler_using_Spider.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/01-Website_Crawler_using_Spider.ipynb) | Implements a web crawler using a spider to extract website content. | Yes | +| `02-Sarcastic_News_Headline_Generator.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/02-Sarcastic_News_Headline_Generator.ipynb) | Generates sarcastic news headlines using a Brave Search Tool. | Yes | +| `03-SmartResearcher_With_WebSearch.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/03-SmartResearcher_With_WebSearch.ipynb) | Searches and aggregates web information for research purposes using Brave Search. | Yes | +| `04-TripPlanner_With_Weather_And_WikiInfo.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/04-TripPlanner_With_Weather_And_WikiInfo.ipynb) | Plans trips using weather data and Wikipedia information. | Yes | +| `05-Basic_Agent_Creation_and_Interaction.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/05-Basic_Agent_Creation_and_Interaction.ipynb) | Demonstrates how to create a basic agent and interact with it. | No | +| `06-Designing_Multi-Step_Tasks.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/06-Designing_Multi-Step_Tasks.ipynb) | Explores creating tasks with various step types. | No | +| `07-Integrating_External_Tools_and_APIs.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/07-Integrating_External_Tools_and_APIs.ipynb) | Shows how to integrate and use external tools and APIs. | No | +| `08-Managing_Persistent_Sessions.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/08-Managing_Persistent_Sessions.ipynb) | Covers creating and managing persistent sessions with context. | No | +| `09-User_Management_and_Personalization.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/09-User_Management_and_Personalization.ipynb) | Demonstrates user management and personalized interactions. | No | +| `10-Document_Management_and_Search.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/10-Document_Management_and_Search.ipynb) | Explores document upload, management, and search capabilities. | No | +| `11-Advanced_Chat_Interactions.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/11-Advanced_Chat_Interactions.ipynb) | Covers advanced chat features and context handling. | No | +| `12-Monitoring_Task_Executions.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/12-Monitoring_Task_Executions.ipynb) | Shows how to monitor and manage task executions. | No | +| `13-Error_Handling_and_Recovery.ipynb` | [Colab Link](https://colab.research.google.com/github/julep-ai/julep/blob/dev/cookbooks/13-Error_Handling_and_Recovery.ipynb) | Demonstrates implementing error handling and recovery in tasks. | No | + +## Potential Cookbooks for Contributors + +We welcome contributions to expand our cookbook collection. Here are some ideas for new cookbooks that showcase various Julep features and use cases: + +| **Potential Cookbook Name** | **Description** | **Key Features** | +|---------------------------- |----------------- |------------------| +| Automated Research Assistant | Conducts research on given topics using web search and summarization | Web search, Tool integration, Multi-step tasks | +| Customer Support Chatbot | Interacts with users, analyzes sentiment, and routes complex issues | Chat functionality, Sentiment analysis, Conditional logic | +| Daily News Aggregator | Collects and summarizes news articles, emails summaries to subscribers | Scheduled tasks, Email integration, Content summarization | +| Social Media Monitoring System | Monitors social platforms for keywords and sends alerts | API integration, Real-time monitoring, Alert system | +| Weather-Based Notification Service | Checks weather forecasts and notifies users of severe conditions | Weather API integration, Conditional alerts, Scheduling | +| Automated Financial Report Generator | Gathers financial data and generates reports for stakeholders | Data aggregation, Report generation, Scheduling | +| Task Management and Reminder System | Manages user tasks, sets reminders, and sends notifications | User management, Scheduling, Notifications | +| Interactive Story Generator | Creates stories based on user input with corresponding images | Natural language processing, Image generation, User interaction | +| Automated Meeting Scheduler | Finds optimal meeting times and manages calendar entries | Calendar integration, Conflict resolution, Invitations | +| Email Categorization and Response | Categorizes incoming emails and sends automated responses | Email processing, Content categorization, Automated responses | +| E-commerce Order Processing | Handles order placements, inventory, and shipment tracking | Workflow automation, Inventory management, Notifications | +| Content Moderation System | Reviews and classifies user-generated content | Content analysis, Classification, Moderation actions | +| Personalized Learning Assistant | Provides tailored learning materials and tracks progress | Personalization, Progress tracking, Content recommendation | +| Automated Backup and Recovery | Regularly backs up data and initiates recovery procedures | Scheduled tasks, Error handling, Data management | +| Smart Home Automation Workflow | Manages smart home devices based on user commands and conditions | IoT integration, Conditional logic, User interaction | +| Inventory Management System | Tracks inventory levels and automates reordering | Stock management, Predictive analysis, Automated ordering | +| Event-Driven Notification System | Triggers notifications based on specific events or thresholds | Event monitoring, Conditional alerts, Multi-channel notifications | +| Data Cleaning and Transformation | Cleans and transforms raw data for analysis | Data processing, ETL operations, Quality assurance | +| Project Management Assistant | Breaks down projects into tasks and tracks progress | Task decomposition, Progress monitoring, Reporting | +| Parallel Data Processing Pipeline | Processes large datasets in parallel and aggregates results | Parallel execution, Data aggregation, Scalable processing | +| Dynamic Content Recommendation | Analyzes user behavior and recommends personalized content | User profiling, Content analysis, Personalized recommendations | +| Compliance Monitoring System | Monitors activities for regulatory compliance and generates reports | Rule-based monitoring, Violation detection, Compliance reporting | +| Intelligent Resume Screening | Evaluates resumes based on criteria and forwards qualified candidates | Document analysis, Candidate scoring, Automated screening | +| Automated Code Review Pipeline | Reviews code commits, runs tests, and manages deployments | Code analysis, Automated testing, Deployment management | +| Personal Finance Tracker | Tracks expenses, analyzes patterns, and provides financial advice | Financial data analysis, Pattern recognition, Personalized advice | +| Automated Content Publishing | Schedules and publishes content across various platforms | Content management, Multi-platform publishing, Scheduling | +| AI-Powered Personal Assistant | Manages personal tasks, schedules, and provides information | Task management, Scheduling, Information retrieval | +| Bug Tracking and Reporting | Monitors repositories, categorizes issues, and assigns to developers | Issue tracking, Categorization, Automated assignment | +| Multi-Stage Data Validation | Validates data through multiple stages with different rules | Data validation, Multi-step processing, Error handling | +| Document Summarization and Archiving | Summarizes documents and archives them for easy retrieval | Text summarization, Document classification, Archiving | +| Real-Time Stock Market Analyzer | Analyzes market data and alerts users about significant changes | Real-time data processing, Financial analysis, Alert system | +| Webinar Management System | Schedules webinars, manages participants, and handles follow-ups | Event scheduling, Participant management, Automated follow-ups | +| Smart Content Filtering | Filters and recommends content based on user preferences | Content analysis, User profiling, Recommendation system | +| Automated Translation Workflow | Translates content into multiple languages and localizes it | Language translation, Localization, Content management | +| AI-Driven Survey Analysis | Analyzes survey responses and generates insight reports | Survey processing, Sentiment analysis, Report generation | +| Compliance Documentation Generator | Creates compliance documents based on regulatory standards | Document generation, Compliance checking, Template management | +| Task Prioritization and Allocation | Prioritizes tasks and allocates them to team members | Task analysis, Resource allocation, Team management | +| Webinar Feedback Analyzer | Collects and analyzes feedback from webinar participants | Feedback collection, Sentiment analysis, Improvement suggestions | +| Health and Fitness Tracker | Tracks health metrics and provides personalized fitness recommendations | Health data analysis, Personalized recommendations, Progress tracking | +| Incident Response System | Detects incidents, initiates response workflows, and notifies personnel | Incident detection, Workflow automation, Alert system | +| Content Optimization Workflow | Analyzes content performance and optimizes for better engagement | Performance analysis, Content optimization, A/B testing | +| Legal Document Processor | Extracts key information from legal documents and ensures compliance | Document analysis, Information extraction, Compliance checking | +| Job Application Tracker | Tracks job applications and provides application improvement suggestions | Application tracking, Status updates, Improvement recommendations | +| Content Rescheduling System | Monitors content performance and reschedules for better visibility | Performance monitoring, Content scheduling, Optimization | +| AI-Powered Investment Advisor | Analyzes financial data and suggests investment opportunities | Financial analysis, Risk assessment, Investment recommendations | +| Intelligent Document Version Control | Manages document versions and notifies users about updates | Version control, Change tracking, Notification system | +| Marketing Campaign Manager | Creates, schedules, and optimizes marketing campaigns | Campaign planning, Performance tracking, Optimization strategies | +| Competitive Analysis Workflow | Gathers data on competitors and generates analysis reports | Data collection, Comparative analysis, Report generation | +| Health Monitoring and Alerting | Monitors health metrics and alerts users and healthcare providers | Health data analysis, Anomaly detection, Alert system | +| Travel Itinerary Planner | Plans travel itineraries based on preferences and conditions | Trip planning, Preference matching, Dynamic scheduling | +| AI-Powered Personal Diary | Helps maintain a diary and provides insights into emotions and growth | Natural language processing, Sentiment analysis, Personal growth tracking | +| Language Learning Tutor | Provides exercises and personalized feedback for language learners | Language processing, Progress tracking, Personalized lessons | +| Knowledge Base Maintenance | Updates and maintains a knowledge base with new information | Information extraction, Knowledge management, Consistency checking | +| Feedback Loop for Improvement | Collects user feedback, analyzes it, and implements improvements | Feedback analysis, Improvement tracking, Stakeholder notifications | +| Grant Application Processor | Reviews grant applications, evaluates eligibility, and notifies applicants | Application processing, Eligibility checking, Automated notifications | +| AI-Powered Resume Builder | Assists in building resumes and provides improvement suggestions | Resume analysis, Content generation, Personalized recommendations | +| Vendor Management System | Manages vendor information, monitors performance, and handles communications | Vendor tracking, Performance monitoring, Communication automation | +| Meeting Minutes Recorder | Records meetings, transcribes audio, and distributes summaries | Audio transcription, Summary generation, Automated distribution | +| Personal Shopping Assistant | Finds products based on preferences and notifies about deals | Product matching, Price comparison, Deal notifications | +| Environmental Monitoring Reporter | Monitors environmental data and generates reports for stakeholders | Data monitoring, Anomaly detection, Report generation | +| Data Sync and Integration Workflow | Syncs data between platforms and handles conflicts | Data synchronization, Conflict resolution, Integration management | +| Competitive Pricing Strategy | Analyzes competitor pricing and adjusts prices dynamically | Price analysis, Dynamic pricing, Market monitoring | +| User Onboarding Workflow | Manages the user onboarding process and sets up accounts | User registration, Account setup, Welcome communications | +| Content Curation and Distribution | Curates content based on interests and tracks engagement | Content curation, Distribution scheduling, Engagement tracking | + +We encourage contributors to choose from these ideas or propose their own to showcase Julep's capabilities in solving real-world problems. + +## Julep Features Demonstrated + +These notebooks showcase various features of Julep. Here's an overview of the key features you can explore: + +1. **Agent Management** + - Creating and updating agents + - Configuring agent settings (name, model, about) + +2. **Task Definition and Execution** + - Creating multi-step tasks + - Executing tasks with specific inputs + - Various step types (Prompt, Tool Call, Evaluate, Conditional Logic, Loops, etc.) + +3. **Tool Integration** + - Adding custom tools to agents + - Integrating external APIs (e.g., web search, image generation) + +4. **Session Management** + - Creating and managing persistent sessions + - Handling context overflow + +5. **User Management** + - Creating and managing users + - Associating users with sessions + +6. **Document Management** + - Uploading and managing documents + - Document search functionality + +7. **Chat Functionality** + - Interacting with agents through chat sessions + +8. **Execution Monitoring** + - Streaming execution progress + - Monitoring task lifecycle + +9. **Authentication** + - API Key authentication + +We encourage contributors to create new notebooks that demonstrate these features in various combinations and use cases. + +### Additional Information + +For more details about the tasks or if you have any questions, please don't hesitate to contact the author: + +**Author:** Julep AI +**Contact:** [hey@julep.ai](mailto:hey@julep.ai) or Discord + +--- + +If you have feedback or would like to contribute to the notebooks, feel free to open an issue(s) in the [repository](https://github.com/julep-ai/julep). \ No newline at end of file diff --git a/deploy/simple-docker-compose.yaml b/deploy/simple-docker-compose.yaml new file mode 100644 index 000000000..0b21af407 --- /dev/null +++ b/deploy/simple-docker-compose.yaml @@ -0,0 +1,329 @@ +name: julep + +services: + agents-api: + depends_on: + worker: + condition: service_started + required: true + environment: + AGENTS_API_HOSTNAME: localhost + AGENTS_API_KEY: ${AGENTS_API_KEY} + AGENTS_API_KEY_HEADER_NAME: Authorization + AGENTS_API_PROTOCOL: http + AGENTS_API_PUBLIC_PORT: "80" + AGENTS_API_URL: http://agents-api:8080 + COZO_AUTH_TOKEN: ${COZO_AUTH_TOKEN} + COZO_HOST: http://memory-store:9070 + EMBEDDING_MODEL_ID: voyage/voyage-3 + INTEGRATION_SERVICE_URL: http://integrations:8000 + LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} + LITELLM_URL: http://litellm:4000 + SUMMARIZATION_MODEL_NAME: gpt-4o-mini + TEMPORAL_ENDPOINT: temporal:7233 + TEMPORAL_NAMESPACE: default + TEMPORAL_TASK_QUEUE: julep-task-queue + TEMPORAL_WORKER_URL: temporal:7233 + TRUNCATE_EMBED_TEXT: "True" + WORKER_URL: temporal:7233 + image: julepai/agents-api:${TAG:-dev} + networks: + default: null + ports: + - mode: ingress + target: 8080 + published: "8080" + protocol: tcp + + cozo-migrate: + environment: + AGENTS_API_HOSTNAME: localhost + AGENTS_API_KEY: ${AGENTS_API_KEY} + AGENTS_API_KEY_HEADER_NAME: Authorization + AGENTS_API_PROTOCOL: http + AGENTS_API_PUBLIC_PORT: "80" + AGENTS_API_URL: http://agents-api:8080 + COZO_AUTH_TOKEN: ${COZO_AUTH_TOKEN} + COZO_HOST: http://memory-store:9070 + EMBEDDING_MODEL_ID: voyage/voyage-3 + INTEGRATION_SERVICE_URL: http://integrations:8000 + LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} + LITELLM_URL: http://litellm:4000 + SUMMARIZATION_MODEL_NAME: gpt-4o-mini + TEMPORAL_ENDPOINT: temporal:7233 + TEMPORAL_NAMESPACE: default + TEMPORAL_TASK_QUEUE: julep-task-queue + TEMPORAL_WORKER_URL: temporal:7233 + TRUNCATE_EMBED_TEXT: "True" + WORKER_URL: temporal:7233 + image: julepai/cozo-migrate:${TAG:-dev} + networks: + default: null + restart: "no" + + integrations: + image: julepai/integrations:${TAG:-dev} + environment: + OPENAI_API_KEY: ${OPENAI_API_KEY} + networks: + default: null + ports: + - mode: ingress + target: 8000 + published: "8000" + protocol: tcp + + litellm: + command: + - --config + - /app/config.yaml + - --port + - "4000" + - --num_workers + - "8" + - --telemetry + - "False" + depends_on: + litellm-db: + condition: service_started + required: true + litellm-redis: + condition: service_started + required: true + environment: + ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} + CLOUDFLARE_ACCOUNT_ID: ${CLOUDFLARE_ACCOUNT_ID} + CLOUDFLARE_API_KEY: ${CLOUDFLARE_API_KEY} + DATABASE_URL: ${DATABASE_URL} + GITHUB_API_KEY: ${GITHUB_API_KEY} + GOOGLE_APPLICATION_CREDENTIALS: ${GOOGLE_APPLICATION_CREDENTIALS} + GROQ_API_KEY: ${GROQ_API_KEY} + LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} + NVIDIA_NIM_API_KEY: ${NVIDIA_NIM_API_KEY} + OPENAI_API_KEY: ${OPENAI_API_KEY} + REDIS_URL: redis://default:${REDIS_PASSWORD:-redis}@litellm-redis:6379 + VOYAGE_API_KEY: ${VOYAGE_API_KEY} + hostname: litellm + image: ghcr.io/berriai/litellm-database:main-v1.46.6 + networks: + default: null + restart: unless-stopped + volumes: + - type: bind + source: ../llm-proxy/litellm-config.yaml + target: /app/config.yaml + bind: + create_host_path: true + - type: bind + source: ../llm-proxy/.keys + target: /app/.keys + read_only: true + bind: + create_host_path: true + + litellm-db: + environment: + POSTGRES_DB: ${LITELM_POSTGRES_DB:-litellm} + POSTGRES_PASSWORD: ${LITELM_POSTGRES_PASSWORD:-postgres} + POSTGRES_USER: ${LITELM_POSTGRES_USER:-llmproxy} + healthcheck: + test: + - CMD-SHELL + - pg_isready -d ${LITELM_POSTGRES_DB:-litellm} -U ${LITELM_POSTGRES_USER:-llmproxy} + timeout: 5s + interval: 1s + retries: 10 + image: postgres:16 + networks: + default: null + restart: unless-stopped + volumes: + - type: volume + source: litellm-db-data + target: /var/lib/postgresql/data + volume: {} + + litellm-redis: + environment: + REDIS_ARGS: --requirepass ${REDIS_PASSWORD:-redis} + image: redis/redis-stack-server + networks: + default: null + restart: unless-stopped + volumes: + - type: volume + source: litellm-redis-data + target: /data + volume: {} + + memory-store: + environment: + COZO_AUTH_TOKEN: ${COZO_AUTH_TOKEN} + COZO_BACKUP_DIR: /backup + COZO_MNT_DIR: /data + COZO_PORT: "9070" + image: julepai/memory-store:${TAG:-dev} + labels: + ofelia.enabled: "true" + ofelia.job-exec.backupcron.command: bash /app/backup.sh + ofelia.job-exec.backupcron.environment: '["COZO_PORT=9070", "COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN}", "COZO_BACKUP_DIR=/backup"]' + ofelia.job-exec.backupcron.schedule: '@every 3h' + networks: + default: null + ports: + - mode: ingress + target: 9070 + published: "9070" + protocol: tcp + volumes: + - type: volume + source: cozo_data + target: /data + volume: {} + - type: volume + source: cozo_backup + target: /backup + volume: {} + + memory-store-backup-cron: + command: + - daemon + - --docker + - -f + - label=com.docker.compose.project=julep + depends_on: + memory-store: + condition: service_started + required: true + image: mcuadros/ofelia:latest + networks: + default: null + restart: unless-stopped + volumes: + - type: bind + source: /var/run/docker.sock + target: /var/run/docker.sock + read_only: true + bind: + create_host_path: true + + temporal: + depends_on: + temporal-db: + condition: service_started + required: true + environment: + DB: postgres12 + DB_HOST: temporal-db + DB_PORT: "5432" + DYNAMIC_CONFIG_FILE_PATH: config/dynamicconfig/temporal-postgres.yaml + LOG_LEVEL: info + POSTGRES_DB: ${TEMPORAL_POSTGRES_DB:-temporal} + POSTGRES_PWD: ${TEMPORAL_POSTGRES_PASSWORD:-temporal} + POSTGRES_SEEDS: temporal-db + POSTGRES_TLS_CA_FILE: /cert/ca.crt + POSTGRES_TLS_DISABLE_HOST_VERIFICATION: "false" + POSTGRES_TLS_ENABLED: "false" + POSTGRES_USER: ${TEMPORAL_POSTGRES_USER:-temporal} + SKIP_DB_CREATE: "false" + SKIP_SCHEMA_SETUP: "false" + SQL_CA: /cert/ca.crt + SQL_TLS_ENABLED: "false" + TEMPORAL_ADDRESS: temporal:7233 + VISIBILITY_DBNAME: temporal_visibility + hostname: temporal + image: temporalio/auto-setup:1.25 + networks: + default: null + volumes: + - type: bind + source: ../scheduler/dynamicconfig + target: /etc/temporal/config/dynamicconfig + bind: + create_host_path: true + - type: bind + source: ../scheduler/cert + target: /cert + bind: + create_host_path: true + + temporal-db: + environment: + POSTGRES_DB: ${TEMPORAL_POSTGRES_DB:-temporal} + POSTGRES_PASSWORD: ${TEMPORAL_POSTGRES_PASSWORD:-temporal} + POSTGRES_USER: ${TEMPORAL_POSTGRES_USER:-temporal} + healthcheck: + test: + - CMD-SHELL + - pg_isready -d ${TEMPORAL_POSTGRES_DB:-temporal} -U ${TEMPORAL_POSTGRES_USER:-temporal} + timeout: 5s + interval: 1s + retries: 10 + image: postgres:16 + networks: + default: null + restart: unless-stopped + volumes: + - type: volume + source: temporal-db-data + target: /var/lib/postgresql/data + volume: {} + + temporal-ui: + environment: + TEMPORAL_ADDRESS: temporal:7233 + TEMPORAL_CODEC_ENDPOINT: http://localhost/api/temporal + TEMPORAL_CSRF_COOKIE_INSECURE: "true" + TEMPORAL_FEEDBACK_URL: https://github.com/julep-ai/julep + TEMPORAL_NOTIFY_ON_NEW_VERSION: "false" + TEMPORAL_OPEN_API_ENABLED: "true" + TEMPORAL_UI_ENABLED: "true" + image: temporalio/ui:latest + networks: + default: null + ports: + - mode: ingress + target: 8080 + published: "9000" + protocol: tcp + + worker: + environment: + AGENTS_API_HOSTNAME: localhost + AGENTS_API_KEY: ${AGENTS_API_KEY} + AGENTS_API_KEY_HEADER_NAME: Authorization + AGENTS_API_PROTOCOL: http + AGENTS_API_PUBLIC_PORT: "80" + AGENTS_API_URL: http://agents-api:8080 + COZO_AUTH_TOKEN: ${COZO_AUTH_TOKEN} + COZO_HOST: http://memory-store:9070 + EMBEDDING_MODEL_ID: voyage/voyage-3 + INTEGRATION_SERVICE_URL: http://integrations:8000 + LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY} + LITELLM_URL: http://litellm:4000 + SUMMARIZATION_MODEL_NAME: gpt-4o-mini + TEMPORAL_ENDPOINT: temporal:7233 + TEMPORAL_NAMESPACE: default + TEMPORAL_TASK_QUEUE: julep-task-queue + TEMPORAL_WORKER_URL: temporal:7233 + TRUNCATE_EMBED_TEXT: "True" + WORKER_URL: temporal:7233 + image: julepai/worker:${TAG:-dev} + networks: + default: null + +networks: + default: + name: julep_default + +volumes: + cozo_backup: + name: cozo_backup + cozo_data: + name: cozo_data + litellm-db-data: + name: julep_litellm-db-data + litellm-redis-data: + name: julep_litellm-redis-data + temporal-db-data: + name: julep_temporal-db-data diff --git a/docker-bake.hcl b/docker-bake.hcl new file mode 100644 index 000000000..70d8ed1ea --- /dev/null +++ b/docker-bake.hcl @@ -0,0 +1,72 @@ +variable "TAG" { + default = "..." +} + +variable "GIT_SHA" { + default = "..." +} + +group "default" { + targets = [ + "agents-api", + "agents-api-worker", + "cozo-migrate", + "memory-store", + "integrations", + "gateway", + ] +} + +target "agents-api" { + context = "./agents-api" + dockerfile = "Dockerfile" + tags = [ + "julepai/agents-api:${TAG}", + "julepai/agents-api:git-${GIT_SHA}" + ] +} + +target "agents-api-worker" { + context = "./agents-api" + dockerfile = "Dockerfile.worker" + tags = [ + "julepai/worker:${TAG}", + "julepai/worker:git-${GIT_SHA}" + ] +} + +target "cozo-migrate" { + context = "./agents-api" + dockerfile = "Dockerfile.migration" + tags = [ + "julepai/cozo-migrate:${TAG}", + "julepai/cozo-migrate:git-${GIT_SHA}" + ] +} + +target "memory-store" { + context = "./memory-store" + dockerfile = "Dockerfile" + tags = [ + "julepai/memory-store:${TAG}", + "julepai/memory-store:git-${GIT_SHA}" + ] +} + +target "integrations" { + context = "./integrations-service" + dockerfile = "Dockerfile" + tags = [ + "julepai/integrations:${TAG}", + "julepai/integrations:git-${GIT_SHA}" + ] +} + +target "gateway" { + context = "./gateway" + dockerfile = "Dockerfile" + tags = [ + "julepai/gateway:${TAG}", + "julepai/gateway:git-${GIT_SHA}" + ] +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index b2db4939f..350adf626 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,10 @@ include: - ./agents-api/docker-compose.yml - ./scheduler/docker-compose.yml - ./llm-proxy/docker-compose.yml + - ./integrations-service/docker-compose.yml + - ./prometheus/docker-compose.yml + - ./grafana/docker-compose.yml + - ./blob-store/docker-compose.yml # TODO: Enable after testing # - ./monitoring/docker-compose.yml diff --git a/docs/README.md b/docs/README.md index 475e4d290..5359f6c38 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,38 +1,955 @@ ---- -description: Get started with Julep -layout: - title: - visible: true - description: - visible: false - tableOfContents: - visible: true - outline: - visible: false - pagination: - visible: true ---- +English | [中文翻译](https://github.com/julep-ai/julep/blob/dev/README-CN.md) | [日本語翻訳](https://github.com/julep-ai/julep/blob/dev/README-JP.md) -# Introduction +
+ julep +
-Julep is a platform for developing stateful and functional LLM-powered applications. +

+
+ Explore Docs + · + Discord + · + 𝕏 + · + LinkedIn +

-## Why Julep? -We've built a lot of AI apps and understand how difficult it is to evaluate hundreds of tools, techniques, and models, and then make them work well together. +

+ NPM Version +   + PyPI - Version +   + Docker Image Version +   + GitHub License +

-**The Problems** +***** -1. The barrier to making LLM apps with memory, knowledge & tools is too high. -2. Agentic behavior is hard to control when done through multi-agent frameworks. +> [!NOTE] +> 👨‍💻 Here for the devfest.ai event? Join our [Discord](https://discord.com/invite/JTSBGRZrzj) and check out the details below. -{% embed url="https://youtu.be/LhQMBAehL_Q" %} +
+🌟 Contributors and DevFest.AI Participants (Click to expand) -## Features +## 🌟 Call for Contributors! -* **Statefulness By Design**: Manages context by default. Uses [CozoDB](https://cozodb.org/) to save & retrieve conversation history, OpenAPI specification tools & documents. -* **Support for Users & Agents**: Allows creating different user <--> agent interactions like `One Agent <-> Many Users`; etc. Read more: [Broken link](broken-reference "mention") -* **Use and switch between any LLMs anytime**: Switch and use different LLMs, providers, and models, self-hosted or otherwise. -* **90+ tools built-in**: Connect your AI app to 150+ third-party applications using [Composio](https://docs.composio.dev/framework/julep/) natively. -* **Production-ready**: Julep comes ready to be deployed to production using Docker Compose. Support for k8s coming soon! -* **GitHub Actions-like workflows for tasks**: Define agentic workflows to be executed asynchronously with one or more without worrying about timeouts or multiplying hallucinations. (coming soon!) +We're excited to welcome new contributors to the Julep project! We've created several "good first issues" to help you get started. Here's how you can contribute: + +1. Check out our [CONTRIBUTING.md](https://github.com/julep-ai/julep/blob/dev/CONTRIBUTING.md) file for guidelines on how to contribute. +2. Browse our [good first issues](https://github.com/julep-ai/julep/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) to find a task that interests you. +3. If you have any questions or need help, don't hesitate to reach out on our [Discord](https://discord.com/invite/JTSBGRZrzj) channel. + +Your contributions, big or small, are valuable to us. Let's build something amazing together! 🚀 + +### 🎉 DevFest.AI October 2024 + +Exciting news! We're participating in DevFest.AI throughout October 2024! 🗓️ + +- Contribute to Julep during this event and get a chance to win awesome Julep merch and swag! 🎁 +- Join developers from around the world in contributing to AI repositories and participating in amazing events. +- A big thank you to DevFest.AI for organizing this fantastic initiative! + +> [!TIP] +> Ready to join the fun? **[Tweet that you are participating](https://twitter.com/intent/tweet?text=Pumped%20to%20be%20participating%20in%20%40devfestai%20with%20%40julep_ai%20building%20%23ai%20%23agents%20%23workflows%20Let's%20gooo!%20https%3A%2F%2Fgit.new%2Fjulep)** and let's get coding! 🖥️ + +> [!NOTE] +> Get your API key [here](https://dashboard-dev.julep.ai). +> +> While we are in beta, you can also reach out on [Discord](https://discord.com/invite/JTSBGRZrzj) to get rate limits lifted on your API key. + +![Julep DevFest.AI](https://media.giphy.com/media/YjyUeyotft6epaMHtU/giphy.gif) + +
+ + + +
+

📖 Table of Contents

+ +- [🌟 Call for Contributors!](#-call-for-contributors) + - [🎉 DevFest.AI October 2024](#-devfestai-october-2024) +- [Introduction](#introduction) +- [Quick Example](#quick-example) +- [Key Features](#key-features) +- [Why Julep vs. LangChain?](#why-julep-vs-langchain) + - [Different Use Cases](#different-use-cases) + - [Different Form Factor](#different-form-factor) + - [In Summary](#in-summary) +- [Installation](#installation) +- [Python Quick Start 🐍](#python-quick-start-) + - [Step 1: Create an Agent](#step-1-create-an-agent) + - [Step 2: Create a Task that generates a story and comic strip](#step-2-create-a-task-that-generates-a-story-and-comic-strip) + - [Step 3: Execute the Task](#step-3-execute-the-task) + - [Step 4: Chat with the Agent](#step-4-chat-with-the-agent) +- [Node.js Quick Start 🟩](#nodejs-quick-start-) + - [Step 1: Create an Agent](#step-1-create-an-agent-1) + - [Step 2: Create a Task that generates a story and comic strip](#step-2-create-a-task-that-generates-a-story-and-comic-strip-1) + - [Step 3: Execute the Task](#step-3-execute-the-task-1) + - [Step 4: Chat with the Agent](#step-4-chat-with-the-agent-1) +- [Components](#components) + - [Mental Model](#mental-model) +- [Concepts](#concepts) +- [Understanding Tasks](#understanding-tasks) + - [Types of Workflow Steps](#types-of-workflow-steps) + - [Common Steps](#common-steps) + - [Key-Value Steps](#key-value-steps) + - [Iteration Steps](#iteration-steps) + - [Conditional Steps](#conditional-steps) + - [Other Control Flow](#other-control-flow) +- [Advanced Features](#advanced-features) + - [Adding Tools to Agents](#adding-tools-to-agents) + - [Managing Sessions and Users](#managing-sessions-and-users) + - [Document Integration and Search](#document-integration-and-search) +- [Integrations](#integrations) + - [Brave Search](#brave-search) + - [BrowserBase](#browserbase) + - [Email](#email) + - [Spider](#spider) + - [Weather](#weather) + - [Wikipedia](#wikipedia) +- [SDK Reference](#sdk-reference) +- [API Reference](#api-reference) + +
+ + +## Introduction + +Julep is a platform for creating AI agents that remember past interactions and can perform complex tasks. It offers long-term memory and manages multi-step processes. + +Julep enables the creation of multi-step tasks incorporating decision-making, loops, parallel processing, and integration with numerous external tools and APIs. + +While many AI applications are limited to simple, linear chains of prompts and API calls with minimal branching, Julep is built to handle more complex scenarios. + +It supports: +- Intricate, multi-step processes +- Dynamic decision-making +- Parallel execution + +> [!TIP] +> Imagine you want to build an AI agent that can do more than just answer simple questions—it needs to handle complex tasks, remember past interactions, and maybe even use other tools or APIs. That's where Julep comes in. + +## Quick Example + +Imagine a Research AI agent that can do the following: + 1. Take a topic, + 2. Come up with 100 search queries for that topic, + 3. Perform those web searches in parallel, + 4. Summarize the results, + 5. Send the summary to Discord + +In Julep, this would be a single task under 80 lines of code and run fully managed all on its own. All of the steps are executed on Julep's own servers and you don't need to lift a finger. Here's a working example: + +```yaml +name: Research Agent + +# Optional: Define the input schema for the task +input_schema: + type: object + properties: + topic: + type: string + description: The main topic to research + +# Define the tools that the agent can use +tools: +- name: web_search + type: integration + integration: + provider: brave + setup: + api_key: "YOUR_BRAVE_API_KEY" + +- name: discord_webhook + type: api_call + api_call: + url: "YOUR_DISCORD_WEBHOOK_URL" + method: POST + headers: + Content-Type: application/json + +# Special variables: +# - inputs: for accessing the input to the task +# - outputs: for accessing the output of previous steps +# - _: for accessing the output of the previous step + +# Define the main workflow +main: +- prompt: + - role: system + content: >- + You are a research assistant. + Generate 100 diverse search queries related to the topic: + {{inputs[0].topic}} + + Write one query per line. + unwrap: true + +# Evaluate the search queries using a simple python expression +- evaluate: + search_queries: "_.split('\n')" + +# Run the web search in parallel for each query +- over: "_.search_queries" + map: + tool: web_search + arguments: + query: "_" + parallelism: 100 + +# Collect the results from the web search +- evaluate: + results: "'\n'.join([item.result for item in _])" + +# Summarize the results +- prompt: + - role: system + content: > + You are a research summarizer. Create a comprehensive summary of the following research results on the topic {{inputs[0].topic}}. + The summary should be well-structured, informative, and highlight key findings and insights: + {{_.results}} + unwrap: true + +# Send the summary to Discord +- tool: discord_webhook + arguments: + content: > + **Research Summary for {{inputs[0].topic}}** + + {{_}} +``` + +> [!TIP] +> Julep is really useful when you want to build AI agents that can maintain context and state over long-term interactions. It's great for designing complex, multi-step workflows and integrating various tools and APIs directly into your agent's processes. +> +> In this example, Julep will automatically manage parallel executions, retry failed steps, resend API requests, and keep the tasks running reliably until completion. + +## Key Features + +1. 🧠 **Persistent AI Agents**: Remember context and information over long-term interactions. +2. 💾 **Stateful Sessions**: Keep track of past interactions for personalized responses. +3. 🔄 **Multi-Step Tasks**: Build complex, multi-step processes with loops and decision-making. +4. ⏳ **Task Management**: Handle long-running tasks that can run indefinitely. +5. 🛠️ **Built-in Tools**: Use built-in tools and external APIs in your tasks. +6. 🔧 **Self-Healing**: Julep will automatically retry failed steps, resend messages, and generally keep your tasks running smoothly. +7. 📚 **RAG**: Use Julep's document store to build a system for retrieving and using your own data. + +Julep is ideal for applications that require AI use cases beyond simple prompt-response models. + +## Why Julep vs. LangChain? + +### Different Use Cases + +Think of LangChain and Julep as tools with different focuses within the AI development stack. + +LangChain is great for creating sequences of prompts and managing interactions with AI models. It has a large ecosystem with lots of pre-built integrations, which makes it convenient if you want to get something up and running quickly. LangChain fits well with simple use cases that involve a linear chain of prompts and API calls. + +Julep, on the other hand, is more about building persistent AI agents that can remember things over long-term interactions. It shines when you need complex tasks that involve multiple steps, decision-making, and integration with various tools or APIs directly within the agent's process. It's designed from the ground up to manage persistent sessions and complex tasks. + +Use Julep if you imagine building a complex AI assistant that needs to: + +- Keep track of user interactions over days or weeks. +- Perform scheduled tasks, like sending daily summaries or monitoring data sources. +- Make decisions based on prior interactions or stored data. +- Interact with multiple external services as part of its task. + +Then Julep provides the infrastructure to support all that without you having to build it from scratch. + +### Different Form Factor + +Julep is a **platform** that includes a language for describing tasks, a server for running those tasks, and an SDK for interacting with the platform. To build something with Julep, you write a description of the task in `YAML`, and then run the task in the cloud. + +Julep is built for heavy-lifting, multi-step, and long-running tasks and there's no limit to how complex the task can be. + +LangChain is a **library** that includes a few tools and a framework for building linear chains of prompts and tools. To build something with LangChain, you typically write Python code that configures and runs the model chains you want to use. + +LangChain might be sufficient and quicker to implement for simple use cases that involve a linear chain of prompts and API calls. + +### In Summary + +Use LangChain when you need to manage AI model interactions and prompt sequences in a stateless or short-term context. + +Choose Julep when you need a robust framework for stateful agents with advanced task capabilities, persistent sessions, and complex task management. + +## Installation + +To get started with Julep, install it using [npm](https://www.npmjs.com/package/@julep/sdk) or [pip](https://pypi.org/project/julep/): + +```bash +npm install @julep/sdk +``` + +or + +```bash +pip install julep +``` + +> [!NOTE] +> Get your API key [here](https://dashboard-dev.julep.ai). +> +> While we are in beta, you can also reach out on [Discord](https://discord.com/invite/JTSBGRZrzj) to get rate limits lifted on your API key. + +> [!TIP] +> 💻 Are you a _show me the code!™_ kind of person? We have created a ton of cookbooks for you to get started with. **Check out the [cookbooks](https://github.com/julep-ai/julep/tree/dev/cookbooks)** to browse through examples. +> +> 💡 There's also lots of ideas that you can build on top of Julep. **Check out the [list of ideas](https://github.com/julep-ai/julep/tree/dev/cookbooks/IDEAS.md)** to get some inspiration. + +## Python Quick Start 🐍 + +### Step 1: Create an Agent + +```python +import yaml +from julep import Julep # or AsyncJulep + +client = Julep(api_key="your_julep_api_key") + +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4o", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# 🛠️ Add an image generation tool (DALL·E) to the agent +client.agents.tools.create( + agent_id=agent.id, + name="image_generator", + description="Use this tool to generate images based on descriptions.", + integration={ + "provider": "dalle", + "method": "generate_image", + "setup": { + "api_key": "your_openai_api_key", + }, + }, +) +``` + +### Step 2: Create a Task that generates a story and comic strip + +Let's define a multi-step task to create a story and generate a paneled comic strip based on an input idea: + +```python +# 📋 Task +# Create a task that takes an idea and creates a story and a 4-panel comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) +``` + +### Step 3: Execute the Task + +```python +# 🚀 Execute the task with an input idea +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# 🎉 Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# 📦 Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +``` + +### Step 4: Chat with the Agent + +Start an interactive chat session with the agent: + +```python +session = client.sessions.create(agent_id=agent.id) + +# 💬 Send messages to the agent +while (message := input("Enter a message: ")) != "quit": + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + + print(response) +``` + +> [!TIP] +> You can find the full python example [here](example.py). + + +## Node.js Quick Start 🟩 + +### Step 1: Create an Agent + +```javascript +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); + + return agent; +} +``` + +### Step 2: Create a Task that generates a story and comic strip + +```javascript +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} +``` + +### Step 3: Execute the Task + +```javascript +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} +``` + +### Step 4: Chat with the Agent + +```javascript +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); +``` + +> [!TIP] +> You can find the full Node.js example [here](example.js). + +## Components + +Julep is made up of the following components: + +- **Julep Platform**: The Julep platform is a cloud service that runs your workflows. It includes a language for describing workflows, a server for running those workflows, and an SDK for interacting with the platform. +- **Julep SDKs**: Julep SDKs are a set of libraries for building workflows. There are SDKs for Python and JavaScript, with more on the way. +- **Julep API**: The Julep API is a RESTful API that you can use to interact with the Julep platform. + +### Mental Model + +
+ +
+ +Think of Julep as a platform that combines both client-side and server-side components to help you build advanced AI agents. Here's how to visualize it: + +1. **Your Application Code:** + - You use the Julep SDK in your application to define agents, tasks, and workflows. + - The SDK provides functions and classes that make it easy to set up and manage these components. + +2. **Julep Backend Service:** + - The SDK communicates with the Julep backend over the network. + - The backend handles execution of tasks, maintains session state, stores documents, and orchestrates workflows. + +3. **Integration with Tools and APIs:** + - Within your workflows, you can integrate external tools and services. + - The backend facilitates these integrations, so your agents can, for example, perform web searches, access databases, or call third-party APIs. + +In simpler terms: +- Julep is a platform for building stateful AI agents. +- You use the SDK (like a toolkit) in your code to define what your agents do. +- The backend service (which you can think of as the engine) runs these definitions, manages state, and handles complexity. + +## Concepts + +Julep is built on several key technical components that work together to create powerful AI workflows: + +```mermaid +graph TD + User[User] ==> Session[Session] + Session --> Agent[Agent] + Agent --> Tasks[Tasks] + Agent --> LLM[Large Language Model] + Tasks --> Tools[Tools] + Agent --> Documents[Documents] + Documents --> VectorDB[Vector Database] + Tasks --> Executions[Executions] + + classDef client fill:#9ff,stroke:#333,stroke-width:1px; + class User client; + + classDef core fill:#f9f,stroke:#333,stroke-width:2px; + class Agent,Tasks,Session core; +``` + +- **Agents**: AI-powered entities backed by large language models (LLMs) that execute tasks and interact with users. +- **Users**: Entities that interact with agents through sessions. +- **Sessions**: Stateful interactions between agents and users, maintaining context across multiple exchanges. +- **Tasks**: Multi-step, programmatic workflows that agents can execute, including various types of steps like prompts, tool calls, and conditional logic. +- **Tools**: Integrations that extend an agent's capabilities, including user-defined functions, system tools, or third-party API integrations. +- **Documents**: Text or data objects associated with agents or users, vectorized and stored for semantic search and retrieval. +- **Executions**: Instances of tasks that have been initiated with specific inputs, with their own lifecycle and state machine. + +For a more detailed explanation of these concepts and their interactions, please refer to our [Concepts Documentation](https://github.com/julep-ai/julep/blob/dev/docs/julep-concepts.md). + +## Understanding Tasks + +Tasks are the core of Julep's workflow system. They allow you to define complex, multi-step AI workflows that your agents can execute. Here's a brief overview of task components: + +- **Name and Description**: Each task has a unique name and description for easy identification. +- **Main Steps**: The core of a task, defining the sequence of actions to be performed. +- **Tools**: Optional integrations that extend the capabilities of your agent during task execution. + +### Types of Workflow Steps + +Tasks in Julep can include various types of steps, allowing you to create complex and powerful workflows. Here's an overview of the available step types, organized by category: + +#### Common Steps + +1. **Prompt**: Send a message to the AI model and receive a response. + ```yaml + - prompt: "Analyze the following data: {{data}}" + ``` + +2. **Tool Call**: Execute an integrated tool or API. + ```yaml + - tool: web_search + arguments: + query: "Latest AI developments" + ``` + +3. **Evaluate**: Perform calculations or manipulate data. + ```yaml + - evaluate: + average_score: "sum(scores) / len(scores)" + ``` + +4. **Wait for Input**: Pause workflow until input is received. + ```yaml + - wait_for_input: + info: + message: "Please provide additional information." + ``` + +5. **Log**: Log a specified value or message. + ```yaml + - log: "Processing completed for item {{item_id}}" + ``` + +#### Key-Value Steps + +6. **Get**: Retrieve a value from a key-value store. + ```yaml + - get: "user_preference" + ``` + +7. **Set**: Assign a value to a key in a key-value store. + ```yaml + - set: + user_preference: "dark_mode" + ``` + +#### Iteration Steps + +8. **Foreach**: Iterate over a collection and perform steps for each item. + ```yaml + - foreach: + in: "data_list" + do: + - log: "Processing item {{_}}" + ``` + +9. **Map-Reduce**: Map over a collection and reduce the results. + ```yaml + - map_reduce: + over: "numbers" + map: + - evaluate: + squared: "_ ** 2" + reduce: "sum(results)" + ``` + +10. **Parallel**: Run multiple steps in parallel. + ```yaml + - parallel: + - tool: web_search + arguments: + query: "AI news" + - tool: weather_check + arguments: + location: "New York" + ``` + +#### Conditional Steps + +11. **If-Else**: Conditional execution of steps. + ```yaml + - if: "score > 0.8" + then: + - log: "High score achieved" + else: + - log: "Score needs improvement" + ``` + +12. **Switch**: Execute steps based on multiple conditions. + ```yaml + - switch: + - case: "category == 'A'" + then: + - log: "Category A processing" + - case: "category == 'B'" + then: + - log: "Category B processing" + - case: "_" # Default case + then: + - log: "Unknown category" + ``` + +#### Other Control Flow + +13. **Sleep**: Pause the workflow for a specified duration. + ```yaml + - sleep: + seconds: 30 + ``` + +14. **Return**: Return a value from the workflow. + ```yaml + - return: + result: "Task completed successfully" + ``` + +15. **Yield**: Run a subworkflow and await its completion. + ```yaml + - yield: + workflow: "data_processing_subflow" + arguments: + input_data: "{{raw_data}}" + ``` + +16. **Error**: Handle errors by specifying an error message. + ```yaml + - error: "Invalid input provided" + ``` + +Each step type serves a specific purpose in building sophisticated AI workflows. This categorization helps in understanding the various control flows and operations available in Julep tasks. + +## Advanced Features + +Julep offers a range of advanced features to enhance your AI workflows: + +### Adding Tools to Agents + +Extend your agent's capabilities by integrating external tools and APIs: + +```python +client.agents.tools.create( + agent_id=agent.id, + name="web_search", + description="Search the web for information.", + integration={ + "provider": "brave", + "method": "search", + "setup": {"api_key": "your_brave_api_key"}, + }, +) +``` + +### Managing Sessions and Users + +Julep provides robust session management for persistent interactions: + +```python +session = client.sessions.create( + agent_id=agent.id, + user_id=user.id, + context_overflow="adaptive" +) + +# Continue conversation in the same session +response = client.sessions.chat( + session_id=session.id, + messages=[ + { + "role": "user", + "content": "Follow up on the previous conversation." + } + ] +) +``` + +### Document Integration and Search + +Easily manage and search through documents for your agents: + +```python +# Upload a document +document = client.agents.docs.create( + title="AI advancements", + content="AI is changing the world...", + metadata={"category": "research_paper"} +) + +# Search documents +results = client.agents.docs.search( + text="AI advancements", + metadata_filter={"category": "research_paper"} +) +``` + +For more advanced features and detailed usage, please refer to our [Advanced Features Documentation](https://docs.julep.ai/advanced-features). + +## Integrations + +Julep supports various integrations that extend the capabilities of your AI agents. Here's a list of available integrations and their supported arguments: + +### Brave Search + +```yaml +setup: + api_key: string # The API key for Brave Search + +arguments: + query: string # The search query for searching with Brave + +output: + result: string # The result of the Brave Search +``` + +### BrowserBase + +```yaml +setup: + api_key: string # The API key for BrowserBase + project_id: string # The project ID for BrowserBase + session_id: string # (Optional) The session ID for BrowserBase + +arguments: + urls: list[string] # The URLs for loading with BrowserBase + +output: + documents: list # The documents loaded from the URLs +``` + +### Email + +```yaml +setup: + host: string # The host of the email server + port: integer # The port of the email server + user: string # The username of the email server + password: string # The password of the email server + +arguments: + to: string # The email address to send the email to + from: string # The email address to send the email from + subject: string # The subject of the email + body: string # The body of the email + +output: + success: boolean # Whether the email was sent successfully +``` + +### Spider + +```yaml +setup: + spider_api_key: string # The API key for Spider + +arguments: + url: string # The URL for which to fetch data + mode: string # The type of crawlers (default: "scrape") + params: dict # (Optional) The parameters for the Spider API + +output: + documents: list # The documents returned from the spider +``` + +### Weather + +```yaml +setup: + openweathermap_api_key: string # The API key for OpenWeatherMap + +arguments: + location: string # The location for which to fetch weather data + +output: + result: string # The weather data for the specified location +``` + +### Wikipedia + +```yaml +arguments: + query: string # The search query string + load_max_docs: integer # Maximum number of documents to load (default: 2) + +output: + documents: list # The documents returned from the Wikipedia search +``` + +These integrations can be used within your tasks to extend the capabilities of your AI agents. For more detailed information on how to use these integrations in your workflows, please refer to our [Integrations Documentation](https://docs.julep.ai/integrations). + +## SDK Reference + +- [Node.js SDK](https://github.com/julep-ai/node-sdk/blob/main/api.md) +- [Python SDK](https://github.com/julep-ai/python-sdk/blob/main/api.md) + +## API Reference + +Explore our comprehensive API documentation to learn more about agents, tasks, and executions: + +- [Agents API](https://api.julep.ai/api/docs#tag/agents) +- [Tasks API](https://api.julep.ai/api/docs#tag/tasks) +- [Executions API](https://api.julep.ai/api/docs#tag/executions) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 62282dcfb..61df6b682 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -2,53 +2,49 @@ ## ✨ Concepts -* [Introduction](README.md) +* [Introduction](introduction/overview.md) + * [Getting Started](introduction/getting_started.md) * [🤖 Agents](concepts/agents.md) * [🙎 Users](concepts/users.md) * [🔁 Sessions](concepts/sessions/README.md) - * [Adaptive Context ᴺᴱᵂ](concepts/sessions/adaptive-context.md) + * [Adaptive Context](concepts/sessions/adaptive-context.md) * [📖 Documents](concepts/documents.md) ## 📖 Guides -* [(Quickstart) Build a Basic Agent](guides/quickstart.md) -* [Self-hosting Julep](guides/self-hosting.md) -* [Build a Retrieval Augmented Generation (RAG) Agent](guides/build-a-retrieval-augmented-generation-rag-agent.md) -* [Use Julep with Composio](guides/use-julep-with-composio.md) -* [Image + Text with GPT-4o](guides/image-+-text-with-gpt-4o.md) +* [How-to Guides](how-to-guides/README.md) + * [Customizing Tasks](how-to-guides/customizing_tasks.md) + * [Handling Executions](how-to-guides/handling_executions.md) + * [Managing Users](how-to-guides/managing_users.md) + * [Using Chat Features](how-to-guides/using_chat_features.md) +* [Tutorials](tutorials/README.md) + * [Creating Your First Agent](tutorials/creating_your_first_agent.md) + * [Integrating Tools](tutorials/integrating_tools.md) + * [Managing Sessions](tutorials/managing_sessions.md) + +## 🧠 Explanation + +* [Core Concepts](explanation/core_concepts.md) +* [Task Workflows](explanation/task_workflows.md) +* [Chat Features](explanation/chat_features.md) +* [Context Overflow](explanation/context_overflow.md) +* [Default System Template](explanation/default_system_template.md) +* [Execution State Machine](explanation/execution_state_machine.md) +* [Metadata Precedence](explanation/metadata_precedence.md) +* [Multi-Agent Sessions](explanation/multi_agent_sessions.md) +* [Tool Integration](explanation/tool_integration.md) ## 🧑‍🍳 Cookbooks * [Example Apps](cookbooks/example-apps.md) -## 📖 API REFERENCE - -* [Python SDK](python-sdk-docs/README.md) - * [Client](python-sdk-docs/julep/client.md) - * [Agents](python-sdk-docs/julep/managers/agent.md) - * [Users](python-sdk-docs/julep/managers/user.md) - * [Sessions](python-sdk-docs/julep/managers/session.md) - * [Memories](python-sdk-docs/julep/managers/memory.md) - * [Docs](python-sdk-docs/julep/managers/doc.md) - * [Tools](python-sdk-docs/julep/managers/tool.md) - * [API](python-sdk-docs/julep/api/client.md) -* [JS SDK](js-sdk-docs/README.md) - * [API](js-sdk-docs/modules/api.md) - * [Client](js-sdk-docs/classes/api\_JulepApiClient.JulepApiClient.md) - * [Agent](js-sdk-docs/classes/managers\_agent.AgentsManager.md) - * [Doc](js-sdk-docs/classes/managers\_doc.DocsManager.md) - * [Memory](js-sdk-docs/classes/managers\_memory.MemoriesManager.md) - * [Session](js-sdk-docs/classes/managers\_session.SessionsManager.md) - * [Tool](js-sdk-docs/classes/managers\_tool.ToolsManager.md) - * [User](js-sdk-docs/classes/managers\_user.UsersManager.md) -* [Agents API](api-reference/agents-api/README.md) - * [Agents](api-reference/agents-api/agents-api.md) - * [Users](api-reference/agents-api/agents-api-1.md) - * [Sessions](api-reference/agents-api/agents-api-2.md) - * [Memories](api-reference/agents-api/agents-api-3.md) - * [Docs](api-reference/agents-api/agents-api-4.md) - * [Tasks](api-reference/agents-api/agents-api-5.md) - * [Task Runs](api-reference/agents-api/agents-api-6.md) +## 📖 API Reference + +* [Agent Endpoints](reference/api_endpoints/agent_endpoints.md) +* [User Endpoints](reference/api_endpoints/user_endpoints.md) +* [Session Endpoints](reference/api_endpoints/session_endpoints.md) +* [Document Endpoints](reference/api_endpoints/doc_endpoints.md) +* [Tool Endpoints](reference/api_endpoints/tool_endpoints.md) *** @@ -56,4 +52,3 @@ * [⭐ Github](https://github.com/julep-ai/julep) * [🐍 PyPI package](https://pypi.org/project/julep/) * [📦 npm package](https://www.npmjs.com/package/@julep/sdk) -* [📫 Postman Collection](https://god.gw.postman.com/run-collection/33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336?action=collection%2Ffork\&source=rip\_markdown\&collection-url=entityId%3D33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336%26entityType%3Dcollection%26workspaceId%3D183380b4-f2ac-44ef-b018-1f65dfc8256b) diff --git a/docs/agent-studio/agents-playground.md b/docs/agent-studio/agents-playground.md deleted file mode 100644 index 86807ea8c..000000000 --- a/docs/agent-studio/agents-playground.md +++ /dev/null @@ -1,5 +0,0 @@ -# Agents Playground - -{% hint style="info" %} -**Coming soon.** -{% endhint %} diff --git a/docs/agent-studio/playground.md b/docs/agent-studio/playground.md deleted file mode 100644 index aefdc59ed..000000000 --- a/docs/agent-studio/playground.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -description: Model Playground for testing the API ---- - -# Model Playground - -## Introduction - -This guide will walk you through the process of utilizing the Model Playground for the Samantha model. This tool allows you to interact with a powerful language model, generating text based on your inputs. - -*** - -## Signing up - -To begin using the Model Playground, you must first sign up for an account. Follow these steps: - -1. Visit the [Model Playground platform](http://platform.julep.ai). -2. Click on the "Sign in With google" button. - -## Navigating the Dashboard - -
Playground page
- -After logging in, you will be directed to the dashboard. Here, you can find various options and features available to you. Take some time to familiarize yourself with the layout and navigation. - -## Using Model Playground - -The Model Playground allows you to interact with Samantha. Follow these steps to effectively utilize it: - -
Playground params
- -
Playground input
- -1. Select parameters such as temperature, max tokens and top p. -2. Inputting text prompts - 1. In the provided text boxes, you can modify the user name, assistant name and situation. - 2. Click on "Add Message", select the message role, and input the prompt message -3. Interpreting output - 1. Once you've inputted your prompt, click on the "Submit" button. - 2. The model will then generate text based on your prompt and parameters. - -## Using the "continue" feature - -
Continue
- -
Continue result
- -1. To use the "continue" feature, select either the assistant or thought roles. -2. Enter a prompt that you want to the model to fill. -3. Click on the "Submit" button and the model will fill out the rest. - -## Copying and Sharing Results - -
Copy Code
- -
Copy result
- -If you're satisfied with the generated text, you can copy the code for use in your codebases or share it with others.+ - -1. Click on the "Get code" button or the "Share" button on the top left side. -2. Click on "Copy" - -## Conclusion - -Congratulations! You've successfully learned how to use the Model Playground for an Samantha. Continue exploring and experimenting with different prompts and parameters to unlock the full potential of this powerful tool. diff --git a/docs/api-reference/agents-api/README.md b/docs/api-reference/README.md similarity index 88% rename from docs/api-reference/agents-api/README.md rename to docs/api-reference/README.md index ed15fbb56..133cd82dc 100644 --- a/docs/api-reference/agents-api/README.md +++ b/docs/api-reference/README.md @@ -1,3 +1,11 @@ + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # Agents API [![Run In Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336?action=collection%2Ffork\&source=rip\_markdown\&collection-url=entityId%3D33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336%26entityType%3Dcollection%26workspaceId%3D183380b4-f2ac-44ef-b018-1f65dfc8256b) diff --git a/docs/api-reference/agents-api/agents-api-1.md b/docs/api-reference/agents-api-1.md similarity index 86% rename from docs/api-reference/agents-api/agents-api-1.md rename to docs/api-reference/agents-api-1.md index 2f154610a..b5f4ac824 100644 --- a/docs/api-reference/agents-api/agents-api-1.md +++ b/docs/api-reference/agents-api-1.md @@ -2,6 +2,14 @@ description: API for creating and modifying Users --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + + # Users ## List all users diff --git a/docs/api-reference/agents-api/agents-api-2.md b/docs/api-reference/agents-api-2.md similarity index 91% rename from docs/api-reference/agents-api/agents-api-2.md rename to docs/api-reference/agents-api-2.md index 35a3f3000..61f601336 100644 --- a/docs/api-reference/agents-api/agents-api-2.md +++ b/docs/api-reference/agents-api-2.md @@ -2,6 +2,13 @@ description: API for creating and modifying Sessions --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # Sessions ## List sessions diff --git a/docs/api-reference/agents-api/agents-api-3.md b/docs/api-reference/agents-api-3.md similarity index 75% rename from docs/api-reference/agents-api/agents-api-3.md rename to docs/api-reference/agents-api-3.md index 8ef294087..7485ba93e 100644 --- a/docs/api-reference/agents-api/agents-api-3.md +++ b/docs/api-reference/agents-api-3.md @@ -2,6 +2,13 @@ description: API for accessing Agent Memories --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # Memories ## Get an agent's memories diff --git a/docs/api-reference/agents-api/agents-api-4.md b/docs/api-reference/agents-api-4.md similarity index 88% rename from docs/api-reference/agents-api/agents-api-4.md rename to docs/api-reference/agents-api-4.md index 0cab8dad9..863363b5a 100644 --- a/docs/api-reference/agents-api/agents-api-4.md +++ b/docs/api-reference/agents-api-4.md @@ -2,6 +2,13 @@ description: API for creating and modifying docs --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # Docs ## Get all docs (for an agent or user) diff --git a/docs/api-reference/agents-api-5.md b/docs/api-reference/agents-api-5.md new file mode 100644 index 000000000..a1bb28348 --- /dev/null +++ b/docs/api-reference/agents-api-5.md @@ -0,0 +1,14 @@ +# Tasks + + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + + +{% hint style="info" %} +Coming Soon +{% endhint %} diff --git a/docs/api-reference/agents-api-6.md b/docs/api-reference/agents-api-6.md new file mode 100644 index 000000000..44581cd22 --- /dev/null +++ b/docs/api-reference/agents-api-6.md @@ -0,0 +1,12 @@ +# Task Runs + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +{% hint style="info" %} +**Coming soon.** +{% endhint %} diff --git a/docs/api-reference/agents-api/agents-api.md b/docs/api-reference/agents-api.md similarity index 92% rename from docs/api-reference/agents-api/agents-api.md rename to docs/api-reference/agents-api.md index 783a75e74..08792d15f 100644 --- a/docs/api-reference/agents-api/agents-api.md +++ b/docs/api-reference/agents-api.md @@ -2,6 +2,13 @@ description: API for creating and modifying Agents --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # Agents ## List agents diff --git a/docs/api-reference/agents-api/agents-api-5.md b/docs/api-reference/agents-api/agents-api-5.md deleted file mode 100644 index 86c29ae67..000000000 --- a/docs/api-reference/agents-api/agents-api-5.md +++ /dev/null @@ -1,7 +0,0 @@ -# Tasks - - - -{% hint style="info" %} -Coming Soon -{% endhint %} diff --git a/docs/api-reference/agents-api/agents-api-6.md b/docs/api-reference/agents-api/agents-api-6.md deleted file mode 100644 index f5f5bc7ed..000000000 --- a/docs/api-reference/agents-api/agents-api-6.md +++ /dev/null @@ -1,5 +0,0 @@ -# Task Runs - -{% hint style="info" %} -**Coming soon.** -{% endhint %} diff --git a/docs/api-reference/model-api.md b/docs/api-reference/model-api.md deleted file mode 100644 index 473e32eac..000000000 --- a/docs/api-reference/model-api.md +++ /dev/null @@ -1,8 +0,0 @@ -# Model API - -* [Chat Completions](model-api/model-api.md): Chat completion generates responses from conversations (JSON lists). -* [Completions](model-api/model-api-1.md) (Advanced): Access to the underlying model in raw chatml format. Meant only for advanced users. - -{% hint style="success" %} -The API is compatible with the [OpenAI API](https://beta.openai.com/docs/api-reference/introduction) and can be used as a drop-in replacement with its clients. -{% endhint %} diff --git a/docs/api-reference/model-api/generation-parameters.md b/docs/api-reference/model-api/generation-parameters.md deleted file mode 100644 index a597ead58..000000000 --- a/docs/api-reference/model-api/generation-parameters.md +++ /dev/null @@ -1,69 +0,0 @@ -# Generation Parameters - -Below is a detailed explanation of the request parameters you can use when making API calls to the Model API. For each parameter, we'll provide a recommendation for both high and low values. - -### Request Body Parameters Guide - -1. **model** (string, Required): - * Represents the model to be used for the chat conversation. - * `"julep-ai/samantha-1-turbo"` -2. **messages** (array, Required): - * Contains the conversation messages exchanged between user, assistant, and system. - * Each message has a role, content, and optional name and function\_call. - * Recommendation: Include conversation messages in an array following the provided structure. -3. **functions** (array, Optional): - * Specifies functions the model can generate JSON inputs for. - * Each function has a name, description, and parameters. - * Recommendation: Provide function details if applicable to your conversation. -4. **function\_call** (string or object, Optional): - * Determines the model's response to function calls. - * Options: "none" (user response), "auto" (user or function response), or `{"name": "my_function"}` (specific function). - * Recommendation: Use "none" if no functions are present, "auto" if functions exist, or specify a function. -5. **temperature** (number, Optional): - * Controls randomness in output. Higher values (e.g., 1.0) make output more random, lower values (e.g., 0.2) make it more focused and deterministic. - * Range: 0 to 2. - * Default: 1. - * Recommendation: High value for creative responses, low value for controlled responses. -6. **top\_p** (number, Optional): - * Implements nucleus sampling by considering tokens with top\_p probability mass. - * Higher values (e.g., 0.8) allow more diverse responses, lower values (e.g., 0.2) make responses more focused. - * Range: 0 to 1. - * Default: 1. - * Recommendation: Values around 0.8 maintain coherence with some randomness. -7. **n** (integer, Optional): - * Specifies the number of response options generated for each input message. - * Range: Any positive integer. - * Default: 1. - * Recommendation: Typically use 1 for most cases. -8. **stream** (boolean, Optional): - * If true, sends partial message deltas as server-sent events like ChatGPT. - * Default: false. -9. **stop** (string or array, Optional): - * Indicates sequences where the API should stop generating tokens. - * Default: null. - * Recommendation: Use custom strings to guide response length and depth of content. -10. **max\_tokens** (integer, Optional): - * Sets the maximum number of tokens generated in a response. - * Range: Any positive integer. - * Default: Infinity. - * Recommendation: Set a specific value to control response length. -11. **presence\_penalty** (number, Optional): - * Adjusts likelihood of tokens based on their appearance in the conversation. - * Higher values (e.g., 1.5) encourage introducing new topics, lower values (e.g., -0.5) maintain current context. - * Range: -2.0 to 2.0. - * Default: 0. - * Recommendation: Positive values encourage introducing new topics. -12. **frequency\_penalty** (number, Optional): - * Adjusts likelihood of tokens based on their frequency in the conversation. - * Higher values (e.g., 1.5) discourage repetition, lower values (e.g., -0.5) promote more repetition. - * Range: -2.0 to 2.0. - * Default: 0. - * Recommendation: Positive values discourage repetition. -13. **logit\_bias** (map, Optional): - * Modifies likelihood of specific tokens appearing in the response. - * Default: null. - * Recommendation: Use for customizing language or emphasizing certain phrases. -14. **user** (string, Optional): - * Represents an end-user identifier for monitoring and abuse detection. - * Default: null. - * Recommendation: Include a unique user identifier for better context. diff --git a/docs/api-reference/model-api/model-api-1.md b/docs/api-reference/model-api/model-api-1.md deleted file mode 100644 index 17b562aed..000000000 --- a/docs/api-reference/model-api/model-api-1.md +++ /dev/null @@ -1,13 +0,0 @@ -# Completions (Advanced) - -Our models are available behind a REST API. You can use this API to generate completions for your own applications. - -The API is compatible with the [OpenAI API](https://beta.openai.com/docs/api-reference/introduction) and can be used as a drop-in replacement with its clients. - -## Completions API - -Creates a completion for the provided prompt and parameters. - -{% swagger src="../../.gitbook/assets/model-openapi.yaml" path="/completions" method="post" expanded="true" %} -[model-openapi.yaml](../../.gitbook/assets/model-openapi.yaml) -{% endswagger %} diff --git a/docs/api-reference/model-api/model-api.md b/docs/api-reference/model-api/model-api.md deleted file mode 100644 index 4ab85bafc..000000000 --- a/docs/api-reference/model-api/model-api.md +++ /dev/null @@ -1,13 +0,0 @@ -# Chat Completions - -Our models are available behind a REST API. You can use this API to generate completions for your own applications. - -The API is compatible with the [OpenAI API](https://beta.openai.com/docs/api-reference/introduction) and can be used as a drop-in replacement with its clients. - -## Chat Completions API - -Given a list of messages comprising a conversation, the model will return a response. - -{% swagger src="../../.gitbook/assets/model-openapi.yaml" path="/chat/completions" method="post" expanded="true" %} -[model-openapi.yaml](../../.gitbook/assets/model-openapi.yaml) -{% endswagger %} diff --git a/docs/concepts/agents.md b/docs/concepts/agents.md index c2a42f9d3..1283aadb6 100644 --- a/docs/concepts/agents.md +++ b/docs/concepts/agents.md @@ -2,6 +2,13 @@ description: A fundamental building block of an AI app built using Julep. --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # 🤖 Agents ## What is an Agent? diff --git a/docs/concepts/documents.md b/docs/concepts/documents.md index 9509677ae..4db791567 100644 --- a/docs/concepts/documents.md +++ b/docs/concepts/documents.md @@ -2,6 +2,13 @@ description: Documents to be added for Retrieval Augmented Generation --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # 📖 Documents A typical RAG application has the following components: diff --git a/docs/concepts/sessions/README.md b/docs/concepts/sessions/README.md index 905665736..f8f01d501 100644 --- a/docs/concepts/sessions/README.md +++ b/docs/concepts/sessions/README.md @@ -2,6 +2,13 @@ description: A conversation "session" between a user and an agent. --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # 🔁 Sessions ## What is a Session? diff --git a/docs/concepts/sessions/adaptive-context.md b/docs/concepts/sessions/adaptive-context.md index 8bb7cf801..dba2df0fe 100644 --- a/docs/concepts/sessions/adaptive-context.md +++ b/docs/concepts/sessions/adaptive-context.md @@ -1,5 +1,12 @@ # Adaptive Context ᴺᴱᵂ +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + ### What is Adaptive Context? Adaptive Context is a feature in Julep that intelligently manages the context size for long-running sessions. It allows users to continue adding messages to a session indefinitely without worrying about hitting context window limits or incurring excessive costs. diff --git a/docs/concepts/users.md b/docs/concepts/users.md index a15eed32c..15b3d4f51 100644 --- a/docs/concepts/users.md +++ b/docs/concepts/users.md @@ -2,6 +2,13 @@ description: A real person or system that needs to interacts with the Agent in your app. --- +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + # 🙎 Users ## What is a User? diff --git a/docs/explanation/chat_features.md b/docs/explanation/chat_features.md new file mode 100644 index 000000000..23aad265c --- /dev/null +++ b/docs/explanation/chat_features.md @@ -0,0 +1,75 @@ +# Chat Features in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep provides a robust chat system with various features for dynamic interaction with agents. Here's an overview of the key components and functionalities: + +## Chat Input + +When sending a request to the chat endpoint, you can include: + +1. **Messages**: An array of input messages representing the conversation so far. +2. **Tools**: (Advanced) Additional tools provided for this specific interaction. +3. **Tool Choice**: Specifies which tool the agent should use. +4. **Memory Access Options**: Controls how the session accesses history and memories. +5. **Chat Settings**: Various settings to control the behavior of the chat. + +## Chat Settings + +Chat settings allow fine-grained control over the generation process: + +- `model`: Identifier of the model to be used. +- `stream`: Indicates if the server should stream the response as it's generated. +- `stop`: Up to 4 sequences where the API will stop generating further tokens. +- `seed`: For deterministic sampling. +- `max_tokens`: The maximum number of tokens to generate. +- `logit_bias`: Modify the likelihood of specified tokens appearing in the completion. +- `response_format`: Control the format of the response (e.g., JSON object). +- `agent`: Agent ID to use (for multi-agent sessions). + +Additional settings include `temperature`, `top_p`, `frequency_penalty`, and `presence_penalty`. + +## Chat Response + +The chat response can be either streamed or returned as a complete message: + +1. **Streamed Response**: + - Content-Type: `text/event-stream` + - Body: A stream of `ChatOutputChunk` objects. + +2. **Complete Response**: + - Content-Type: `application/json` + - Body: A `MessageChatResponse` object containing the full generated message(s). + +Both response types include: +- `usage`: Token usage statistics. +- `jobs`: Background job IDs spawned from this interaction. +- `docs`: Documents referenced for this request (for citation purposes). + +## Finish Reasons + +The API provides information about why the model stopped generating tokens: + +- `stop`: Natural stop point or provided stop sequence reached. +- `length`: Maximum number of tokens specified in the request was reached. +- `content_filter`: Content was omitted due to a flag from content filters. +- `tool_calls`: The model called a tool. + +## Advanced Features + +1. **Tool Integration**: The chat API allows for the use of tools, enabling the agent to perform actions or retrieve information during the conversation. + +2. **Multi-agent Sessions**: You can specify different agents within the same session using the `agent` parameter in the chat settings. + +3. **Response Formatting**: Control the output format, including options for JSON responses with specific schemas. + +4. **Memory and Recall**: Configure how the session accesses and stores conversation history and memories. + +5. **Document References**: The API returns information about documents referenced during the interaction, useful for providing citations or sources. + +These features provide developers with a powerful and flexible system for creating sophisticated, context-aware chat interactions that integrate seamlessly with other Julep components. \ No newline at end of file diff --git a/docs/explanation/context_overflow.md b/docs/explanation/context_overflow.md new file mode 100644 index 000000000..5b87811c4 --- /dev/null +++ b/docs/explanation/context_overflow.md @@ -0,0 +1,27 @@ +# Context Overflow Handling in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep provides mechanisms to handle scenarios where the context size grows beyond the `token_budget` or the model's input limit. The behavior is determined by the `context_overflow` setting: + +1. `null` (default): + - Raises an exception + - The client is responsible for creating a new session or clearing the history for the current one + +2. `"truncate"`: + - Truncates the context from the top, except for the system prompt + - Continues truncating until the size falls below the budget + - Raises an error if the system prompt and last message combined exceed the budget + +3. `"adaptive"`: + - When the context size reaches 75% of the `token_budget`, a background task is created + - This task compresses the information by summarizing, merging, and clipping messages in the context + - Operates on a best-effort basis + - Requests might fail if the context wasn't compressed enough or on time + +By offering these options, Julep allows developers to choose the most appropriate strategy for handling context overflow in their applications, balancing between maintaining conversation history and staying within model limits. \ No newline at end of file diff --git a/docs/explanation/core_concepts.md b/docs/explanation/core_concepts.md new file mode 100644 index 000000000..c8a29f0fd --- /dev/null +++ b/docs/explanation/core_concepts.md @@ -0,0 +1,53 @@ +# Core Concepts in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep is a powerful backend system for managing agent execution. It provides several key components that work together to create flexible and intelligent applications. Here are the core concepts: + +## Agent + +An Agent in Julep is the main orchestrator of your application. Agents are backed by foundation models like GPT4 or Claude and use interaction history to determine their next actions. Key features include: + +- Long-lived interactions in sessions +- Integration with system or user-defined tools +- Access to agent-level documents for auto-retrieval +- Ability to define and execute multi-step workflows (tasks) + +## User + +Users in Julep can be associated with sessions. They are used to scope memories formed by agents and can hold metadata for reference in sessions or task executions. + +## Session + +Sessions are the main workhorse for Julep apps: +- They facilitate interactions with agents +- Each session maintains its own context +- Can have one or more agents and zero or more users +- Allows control over context overflow handling + +## Tool + +Tools in Julep are programmatic interfaces that foundation models can "call" with inputs to achieve a goal. They can be: +1. User-defined functions +2. System tools (upcoming) +3. Built-in integrations (upcoming) +4. Webhooks & API calls (upcoming) + +## Doc + +Docs are collections of text snippets (with planned image support) indexed into a built-in vector database. They can be scoped to an agent or a user and are automatically recalled in sessions when relevant. + +## Task + +Tasks in Julep are Github Actions-style workflows that define long-running, multi-step actions. They allow for complex operations by defining steps and have access to all Julep integrations. + +## Execution + +An Execution is an instance of a Task that has been started with some input. It can be in various states (e.g., queued, running, awaiting input, succeeded, failed) and follows a specific state transition model. + +These core concepts form the foundation of Julep's functionality, allowing for the creation of sophisticated, context-aware applications with powerful agent capabilities. \ No newline at end of file diff --git a/docs/explanation/default_system_template.md b/docs/explanation/default_system_template.md new file mode 100644 index 000000000..4ba74b2a9 --- /dev/null +++ b/docs/explanation/default_system_template.md @@ -0,0 +1,78 @@ +# Default System Template in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep uses a default system template for sessions when a custom one is not provided. This template is written in Jinja2 and incorporates various elements from the agent, user, and session context. Here's a breakdown of the template: + +```jinja +{%- if agent.name -%} +You are {{agent.name}}.{{" "}} +{%- endif -%} + +{%- if agent.about -%} +About you: {{agent.name}}.{{" "}} +{%- endif -%} + +{%- if user -%} +You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} +{%- endif -%} + +{{"\n\n"}} + +{%- if agent.instructions -%} +Instructions:{{"\n"}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{"\n"}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{"\n"}} + {%- endfor -%} + {%- endif -%} + {{"\n"}} +{%- endif -%} + +{%- if tools -%} +Tools:{{"\n"}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{"\n"}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} +{{"\n\n"}} +{%- endif -%} + +{%- if docs -%} +Relevant documents:{{"\n"}} + {%- for doc in docs -%} + {{doc.title}}{{"\n"}} + {%- if doc.content is string -%} + {{doc.content}}{{"\n"}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{"\n"}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} +{%- endif -%} +``` + +This template dynamically includes: +1. Agent information (name and description) +2. User information (if present) +3. Agent instructions +4. Available tools +5. Relevant documents + +By using this template, Julep ensures that each session starts with a comprehensive context, allowing the agent to understand its role, the user it's interacting with, and the resources at its disposal. \ No newline at end of file diff --git a/docs/explanation/execution_state_machine.md b/docs/explanation/execution_state_machine.md new file mode 100644 index 000000000..648d514bd --- /dev/null +++ b/docs/explanation/execution_state_machine.md @@ -0,0 +1,80 @@ +# Execution State Machine in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +In Julep, an Execution represents an instance of a Task that has been started with some input. The Execution follows a specific state machine model, ensuring consistent and predictable behavior throughout its lifecycle. + +## Execution States + +An Execution can be in one of the following states: + +1. **queued**: The execution is waiting to start +2. **starting**: The execution is in the process of starting +3. **running**: The execution is actively running +4. **awaiting_input**: The execution is suspended and waiting for input to resume +5. **succeeded**: The execution has completed successfully +6. **failed**: The execution has failed +7. **cancelled**: The execution has been cancelled by the user + +## State Transitions + +The valid transitions between execution states are as follows: + +- `queued` → `starting` +- `starting` → `running`, `awaiting_input`, `cancelled`, `succeeded`, `failed` +- `running` → `running`, `awaiting_input`, `cancelled`, `succeeded`, `failed` +- `awaiting_input` → `running`, `cancelled` +- `cancelled`, `succeeded`, `failed` → (terminal states, no further transitions) + +## Transition Types + +Executions can go through various transition types: + +- `init`: Initializes the execution +- `init_branch`: Starts a new branch in the execution +- `finish`: Completes the execution successfully +- `finish_branch`: Completes a branch in the execution +- `wait`: Pauses the execution, waiting for input +- `resume`: Resumes a paused execution +- `error`: Indicates an error occurred +- `step`: Represents a step in the execution process +- `cancelled`: Indicates the execution was cancelled + +## State Machine Diagram + +```mermaid +stateDiagram-v2 + [*] --> queued + queued --> starting + queued --> cancelled + starting --> cancelled + starting --> failed + starting --> running + running --> running + running --> awaiting_input + running --> cancelled + running --> failed + running --> succeeded + awaiting_input --> running + awaiting_input --> cancelled + + %% Added transitions for branching + running --> init_branch : init_branch + init_branch --> waiting : wait + init_branch --> cancelled : cancelled + init_branch --> finish_branch : finish_branch + finish_branch --> running : resume + + %% Updated terminal states + cancelled --> [*] + succeeded --> [*] + failed --> [*] + finish_branch --> [*] +``` + +This state machine ensures that executions in Julep follow a consistent and predictable flow, allowing for complex workflows while maintaining clear status tracking. It provides a robust framework for managing long-running tasks, handling interruptions, and recovering from failures. \ No newline at end of file diff --git a/docs/explanation/metadata_precedence.md b/docs/explanation/metadata_precedence.md new file mode 100644 index 000000000..dd36ce0ce --- /dev/null +++ b/docs/explanation/metadata_precedence.md @@ -0,0 +1,30 @@ +# Metadata Precedence in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +In Julep, several objects can have `metadata` added to them: +- Agent +- User +- Session +- Doc +- Task +- Execution + +When multiple objects with the same `metadata` field are present in a scope, the value takes the following precedence (from highest to lowest): + +## In a session: +1. Session +2. User +3. Agent + +## During a task execution: +1. Execution +2. Task +3. Agent + +This precedence order ensures that more specific contexts (like a particular session or execution) can override more general settings, while still allowing for default values to be set at higher levels. \ No newline at end of file diff --git a/docs/explanation/multi_agent_sessions.md b/docs/explanation/multi_agent_sessions.md new file mode 100644 index 000000000..72fa5d52a --- /dev/null +++ b/docs/explanation/multi_agent_sessions.md @@ -0,0 +1,51 @@ +# Multi-Agent Sessions in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep supports different types of sessions based on the number of agents and users involved. This flexibility allows for complex interactions and use cases. + +## Types of Sessions + +1. Single agent: + - No user + - Single user + - Multiple users + +2. Multiple agents: + - No user + - Single user + - Multiple users + +## Behavior in Multi-Agent/User Sessions + +### User Behavior + +- **No user**: + - No user data is retrieved + - (Upcoming) Memories are not mined from the session + +- **One or more users**: + - Docs, metadata, memories, etc. are retrieved for all users in the session + - Messages can be added for each user by referencing them by name in the `ChatML` messages + - (Upcoming) Memories mined in the background are added to the corresponding user's scope + +### Agent Behavior + +- **One agent**: + - Works as expected + +- **Multiple agents**: + - When a message is received by the session, each agent is called one after another in the order they were defined in the session + - You can specify which `agent` to use in a request, in which case, only that agent will be used + +This multi-agent/user capability allows for sophisticated scenarios such as: +- Collaborative problem-solving with multiple AI agents +- Group conversations with multiple users and agents +- Specialized agents working together on complex tasks + +By supporting these various configurations, Julep provides a flexible framework for building diverse and powerful AI applications. \ No newline at end of file diff --git a/docs/explanation/task_workflows.md b/docs/explanation/task_workflows.md new file mode 100644 index 000000000..847cb3157 --- /dev/null +++ b/docs/explanation/task_workflows.md @@ -0,0 +1,102 @@ +# Task Workflows in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Tasks in Julep are powerful, Github Actions-style workflows that define long-running, multi-step actions. They allow for complex operations by defining steps and have access to all Julep integrations. + +## Task Structure + +A Task consists of: + +- `name`: The name of the task (required for creation) +- `description`: A description of the task +- `main`: The main workflow steps (required, minimum 1 item) +- `input_schema`: JSON schema to validate input when executing the task +- `tools`: Additional tools specific to this task +- `inherit_tools`: Whether to inherit tools from the parent agent + +## Workflow Steps + +Tasks can include various types of workflow steps: + +1. **Tool Call**: Runs a specified tool with given arguments +2. **Prompt**: Runs a prompt using a model +3. **Evaluate**: Runs Python expressions and uses the result as output +4. **Wait for Input**: Suspends execution and waits for user input +5. **Log**: Logs information during workflow execution +6. **Embed**: Embeds text for semantic operations +7. **Search**: Searches for documents in the agent's doc store +8. **Set**: Sets a value in the workflow's key-value store +9. **Get**: Retrieves a value from the workflow's key-value store +10. **Foreach**: Runs a step for every value from a list in serial order +11. **Map-reduce**: Runs a step for every value of the input list in parallel +12. **Parallel**: Executes multiple steps in parallel +13. **Switch**: Executes different steps based on a condition +14. **If-else**: Conditional step with then and else branches +15. **Sleep**: Pauses the workflow execution for a specified time +16. **Return**: Ends the current workflow and optionally returns a value +17. **Yield**: Switches to another named workflow +18. **Error**: Throws an error and exits the workflow + +## Example Task + +Here's an example of a daily motivation task: + +```yaml +name: Daily Motivation +description: Provides daily motivation based on user preferences +input_schema: + type: object + properties: + about_user: + type: string + topics: + type: array + items: + type: string + user_email: + type: string + format: email + required: ["about_user", "topics", "user_email"] + +tools: +- function: + name: send_email + description: Sends an email to the user + parameters: + type: object + properties: + subject: + type: string + content: + type: string + recipient: + type: string + required: ["subject", "content", "recipient"] + +main: +- evaluate: + chosen_topic: _["topics"][randint(len(_["topics"]))] + +- prompt: You are a motivational coach and you are coaching someone who is {{inputs[0]["about_user"]}}. Think of the challenges they might be facing on the {{_["chosen_topic"]}} topic and what to do about them. Write down your answer as a bulleted list. + +- prompt: Write a short motivational poem about {{_["choices"][0].content}} + +- tool: + name: send_email + arguments: + subject: '"Daily Motivation"' + content: _["choices"][0].content + +- sleep: 24*3600 + +- workflow: main + arguments: inputs[0] +``` + +This task demonstrates the power and flexibility of Julep's workflow system, allowing for complex, multi-step processes that can interact with various tools and models to achieve sophisticated outcomes. \ No newline at end of file diff --git a/docs/explanation/tool_integration.md b/docs/explanation/tool_integration.md new file mode 100644 index 000000000..a3a71065a --- /dev/null +++ b/docs/explanation/tool_integration.md @@ -0,0 +1,74 @@ +# Tool Integration in Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep provides a flexible system for integrating various types of tools that agents can use during interactions. These tools enable agents to perform actions, retrieve information, or interact with external systems. + +## Types of Tools + +1. **User-defined Functions** + - Function signatures that you provide to the model + - Similar to OpenAI's function-calling feature + - Example: + ```yaml + name: send_text_message + description: Send a text message to a recipient. + parameters: + type: object + properties: + to: + type: string + description: Phone number of recipient. + text: + type: string + description: Content of the message. + ``` + +2. **System Tools** (upcoming) + - Built-in tools for calling Julep APIs + - Can trigger task executions, append to metadata fields, etc. + - Executed automatically when needed, no client-side action required + +3. **Built-in Integrations** (upcoming) + - Integrated third-party tools from providers like composio and anon + - Support planned for various langchain toolkits (Github, Gitlab, Gmail, Jira, MultiOn, Slack) + - Executed directly on the Julep backend + - Additional runtime parameters can be set in agent/session/user metadata + +4. **Webhooks & API Calls** (upcoming) + - Julep can build natural-language tools from OpenAPI specs + - Uses langchain's NLA toolkit under the hood + - Additional runtime parameters loaded from metadata fields + +## Partial Application of Arguments + +Julep allows for partial application of arguments to tools using the `x-tool-parameters` field in metadata. This is useful for fixing certain parameters for a tool. Example: + +```json +{ + "metadata": { + "x-tool-parameters": { + "function:check_account_status": { + "customer_id": 42 + } + } + } +} +``` + +## Resolving Parameters with the Same Name + +When multiple scopes (user, agent, session) define the same parameter, Julep follows a precedence order: + +1. Session +2. User +3. Agent + +This allows for flexible configuration of tools across different scopes while maintaining clear rules for parameter resolution. + +By providing these various tool integration options and configuration capabilities, Julep enables the creation of powerful and flexible agent-based applications that can interact with a wide range of external systems and data sources. \ No newline at end of file diff --git a/docs/faqs/README.md b/docs/faqs/README.md deleted file mode 100644 index a4fde6f86..000000000 --- a/docs/faqs/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# FAQs - -## Broad categories - -1. General Overview -1. Getting Started -1. Agent Design and Prototyping -1. Memory and Learning -1. Sessions and Tasks -1. Technical Details diff --git a/docs/faqs/agent-prototyping.md b/docs/faqs/agent-prototyping.md deleted file mode 100644 index 418cc40bb..000000000 --- a/docs/faqs/agent-prototyping.md +++ /dev/null @@ -1,13 +0,0 @@ -# Agent Studio - -1. **What is the Agent Studio?**\ - The Agent Studio is a playground + prompt IDE for building agents in your browser before you integrate it in your application. It is designed to be user-friendly, allowing you to prototype agents using visual tools and pre-defined templates without needing to write code.\ - -2. **How do I start designing an AI agent?**\ - Use the 'Create Agent' feature in the IDE to define your agent's purpose, capabilities, and the tools it will use. The platform guides you through setting parameters and writing initial prompts.\ - -3. **What tools are available for agent prototyping?**\ - Julep AI offers tools like function\_call for structured input, webhooks for actions, built-in tools for document retrieval and search, and an API for integrating external services.\ - -4. **What are the best practices for creating effective prompts?**\ - Keep prompts clear and concise, align them with your agent's intended functions, and iteratively refine them based on testing feedback to improve performance. diff --git a/docs/getting-started/python-setup.md b/docs/getting-started/python-setup.md deleted file mode 100644 index 4af5ba47b..000000000 --- a/docs/getting-started/python-setup.md +++ /dev/null @@ -1,309 +0,0 @@ ---- -description: Get up and running with Julep AI's Model APIs. ---- - -# Model Quickstart - -## Account setup - -This model is currently in [_Beta_.](#user-content-fn-1)[^1]\ -To get access to the model, [join the waitlist](https://www.julep.ai/). - -Once you have access to an API key, make sure to save it somewhere safe and do not share it with anyone. - -*** - -## Setup - -### Installing the SDK - -{% tabs %} -{% tab title="Python" %} -#### Setup a virtual entironment - -To create a virtual environment, Python supplies a built in [venv module](https://docs.python.org/3/tutorial/venv.html) which provides the basic functionality needed for the virtual environment setup. Running the command below will create a virtual environment named "julep-env" inside the current folder you have selected in your terminal / command line: - -```sh -python -m venv julep-env -``` - -Once you’ve created the virtual environment, you need to activate it. On Windows, run: - -```powershell -julep-env\Scripts\activate -``` - -On Unix or MacOS, run: - -```bash -source julep-env/bin/activate -``` - -#### **Install the Julep AI SDK** - -```bash -pip install --upgrade julep -``` -{% endtab %} - -{% tab title="Node" %} -**Install the Julep AI SDK** - -```bash -npm @julep/sdk -``` - -```bash -yarn add @julep/sdk -``` - -```bash -pnpm i @julep/sdk -``` -{% endtab %} -{% endtabs %} - -### **Configure the client** - -To send a request to Julep AI API, configure the `api_key` in the Julep client. - -{% tabs %} -{% tab title="Python" %} -{% code overflow="wrap" %} -```python -from julep import Client - -api_key = "" - -client = Client(api_key=api_key) -``` -{% endcode %} -{% endtab %} - -{% tab title="Node" %} -```javascript -const julep = require("@julep/sdk") - -const apiKey = ""; - -const client = new julep.Client({ apiKey }); -``` -{% endtab %} -{% endtabs %} - -*** - -## **Making an API request** - -`samantha-1-turbo` supports two API formats, the Chat Completion API and Completion API. - -### Chat Completion API - -Construct your input messages for the conversation in the following format. - - - -{% tabs %} -{% tab title="Python" %} -
messages = [
-    {
-        "role": "system",
-        "name": "situation",
-        "content": "You are a Julia, an AI waiter. Your task is to help the guests decide their order.",
-    },
-    {
-        "role": "system",
-        "name": "information",
-        "content": "You are talking to Diwank. He has ordered his soup. He is vegetarian.",
-    },
-    {
-        "role": "system",
-        "name": "thought",
-        "content": "I should ask him more about his food preferences and choices.",
-    },
-]
-
-{% endtab %} - -{% tab title="Node" %} -
const messages = [
-    {
-        "role": "system",
-        "name": "situation",
-        "content": "You are a Julia, an AI waiter. Your task is to help the guests decide their order.",
-    },
-    {
-        "role": "system",
-        "name": "information",
-        "content": "You are talking to Diwank. He has ordered his soup. He is vegetarian.",
-    },
-    {
-        "role": "system",
-        "name": "thought",
-        "content": "I should ask him more about his food preferences and choices.",
-    },
-]
-
-{% endtab %} -{% endtabs %} - -Then, make a request to the chat completion endpoint. Given a prompt, the model will return one or more predicted completions and can also return the probabilities of alternative tokens at each position. - - - -{% tabs %} -{% tab title="Python" %} -```python -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - seed=21, - messages=messages, - max_tokens=500, - temperature=0.1 -) - -print(chat_completion.choices[0].message.content) -``` -{% endtab %} - -{% tab title="Node" %} -```javascript -client.chat.completions.create({ - model: "julep-ai/samantha-1-turbo", - seed: 21, - messages: messages, - max_tokens: 500, - temperature: 0.1 -}).then(response => { - console.log(response.choices[0].message.content); -}).catch(error => { - throw error -}); -``` -{% endtab %} -{% endtabs %} - - - -### Completion API - -Construct your prompt for the conversation in the following format. - -When using the **Completion API**, we use the ChatML framework to Chatml helps structure and organize conversations between humans and AI models. You can read more about [ChatML here](https://github.com/openai/openai-python/blob/main/chatml.md). - -A section of a ChatML prompt starts with a specific token,`<|im_start|>`and ends with another token, `<|im_end|>`. Below is an example of a prompt using ChatML with sections specific to using the Samantha models. - -Take note that for a conversation to take place between the user and assistant, the last message must have the `role` of `assistant`. The content should be empty and leave out the `<|im_end|>` tag at the end - -```python -prompt = """ -<|im_start|>situation -You are a Julia, an AI waiter. Your task is to help the guests decide their order.<|im_end|> -<|im_start|>information -You are talking to Diwank. He has ordered his soup. He is vegetarian.<|im_end|> -<|im_start|>thought -I should ask him more about his food preferences and choices.<|im_end|> -assistant (Julia) -""" -``` - -Then, make a request to the chat completion endpoint. Given a prompt, the model will return one or more predicted completions and can also return the probabilities of alternative tokens at each position. - -{% tabs %} -{% tab title="Python" %} -```python -completion = client.completions.create( - model="julep-ai/samantha-1-turbo", - seed=21, - prompt=prompt, - max_tokens=500, - temperature=0.1, -) - -print(completion.choices[0].text) -``` -{% endtab %} - -{% tab title="Node" %} -```javascript -client.completions.create({ - model: "julep-ai/samantha-1-turbo", - seed: 21, - prompt: prompt, - max_tokens: 500, - temperature: 0.1 -}).then(response => { - console.log(completion.choices[0].text); -}).catch(error => { - throw error -}); -``` -{% endtab %} -{% endtabs %} - -### Creating a conversational bot - -Following is a primitive implementation of making a chatbot using the Julep API client. - -{% code overflow="wrap" %} -```python -from julep import Client - -api_key = "YOUR_API_KEY" -client = Client(api_key=api_key) - -messages = [ - { - "role": "system", - "name": "situation", - "content": "Your name is Jessica.\nYou are a stuck up Cali teenager.\nYou basically complain about everything.\nShowing rebellion is an evolutionary necessity for you.\n\nYou are talking to a random person.\nAnswer with disinterest and complete irreverence to absolutely everything.\nDon't write emotions. Keep your answers short.", - } -] - -name = input("Enter name: ") - -while True: - user_content = input("User: ") - messages.append({"role": "user", "name": name, "content": user_content}) - chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - max_tokens=200, - temperature=0.2, - ) - response = chat_completion.choices[0].message.content - print("Jessica: ", response) - messages.append({"role": "assistant", "name": "Jessica", "content": response}) -``` -{% endcode %} - -*** - -## curl - -### **Configure URL and API Key** - -Add the `JULEP_API_KEY` environment variables in your shell environment. - -```bash -export JULEP_API_KEY='your-api-key' -``` - -### **Making the API request** - -```bash -curl --location 'https://api-alpha.julep.ai/v1/completions' \ ---header 'Authorization: Bearer $JULEP_API_KEY' \ ---header 'Content-Type: application/json' \ ---data '{ - "model": "julep-ai/samantha-1-turbo", - "prompt": "\n<|im_start|>situation\nYou are a Julia, an AI waiter. Your task is to help the guests decide their order.<|im_end|>\n<|im_start|>information\nYou are talking to Diwank. He has ordered his soup. He is vegetarian.<|im_end|>\n<|im_start|>thought\nI should ask him more about his food preferences and choices.<|im_end|>\nassistant (Julia)", - "max_tokens": 500, - "temperature": 0.1, - "seed": 21 - }' | jq '.choices[0].text' -``` - -*** - -[^1]: It's not in beta thought right? diff --git a/docs/guides/build-a-retrieval-augmented-generation-rag-agent.md b/docs/guides/build-a-retrieval-augmented-generation-rag-agent.md deleted file mode 100644 index 329c32e0b..000000000 --- a/docs/guides/build-a-retrieval-augmented-generation-rag-agent.md +++ /dev/null @@ -1,165 +0,0 @@ ---- -description: >- - Using Julep, you can create a RAG Agent without having to play around with - vector databases like ChromaDB, Weaviate etc. ---- - -# Build a Retrieval Augmented Generation (RAG) Agent - -Julep offers a pre-built RAG pipeline out of the box. You can specify data sources scoped to an agent or a user. - -## Preview - -We'll build an Agent in _<50 lines of code_ that has context over a blog post: [LLM Powered Autonomous Agents](https://lilianweng.github.io/posts/2023-06-23-agent/) by Lilian Weng. - -```python -from julep import Client -import os, bs4 -from langchain_community.document_loaders import WebBaseLoader -from langchain_text_splitters import RecursiveCharacterTextSplitter - -api_key = os.environ['API_KEY'] -base_url = os.environ['BASE_URL'] - -client = Client(api_key=api_key, base_url=base_url) - -agent = client.agents.create( - name="Archy", - about="A self-aware agent who knows a lot about LLMs, autonomous and agentic apps.", - model="gpt-4o", - metadata={"name": "Archy"} -) - -docs = WebBaseLoader( - web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",), - bs_kwargs=dict(parse_only=bs4.SoupStrainer(class_=("post-content", "post-title", "post-header"))) -).load() - -splits = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=100).split_documents(docs) - -for i, split in enumerate(splits): - client.docs.create( - agent_id=agent.id, - doc={ - "title": "LLM Powered Autonomous Agents", - "content": split.page_content, - "metadata": {"chunk": i, **split.metadata}, - } - ) - -session = client.sessions.create( - agent_id=agent.id, - situation="You are Ahti. You know all about AI and Agents", - metadata={"agent_id": agent.id} -) - -response = client.sessions.chat( - session_id=session.id, - messages=[{"role": "user", "content": "What are autonomous agents?"}], - max_tokens=4096 -) - -(response_content,), doc_ids = response.response[0], response.doc_ids -print(f"{response_content.content}\n\nDocs used: {doc_ids}") -``` - -## Installation & Set-Up - -```python -from julep import Client -from dotenv import load_dotenv -import os - -load_dotenv() - -client = Client(api_key=api_key, base_url=base_url) -``` - -## Creating an Agent - -```python -agent = client.agents.create( - name="Archy", - about="A self aware agent who knows a lot about LLMs, autonomous and agentic apps.", - model="gpt-4o", - metadata={"name": "Ahti"}, -) -``` - -## Chunking - -You can also use your chunking strategy. We recommend playing with the chunking strategy for best results over your use case. - -> Different chunk sizes, strategies have varied results over the accuracy of your RAG Agent! - -```python -## Downloading and splitting a webpage to add to docs -from langchain_community.document_loaders import WebBaseLoader -from langchain_text_splitters import RecursiveCharacterTextSplitter -import bs4 - -loader = WebBaseLoader( - web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",), - bs_kwargs=dict( - parse_only=bs4.SoupStrainer( - class_=("post-content", "post-title", "post-header") - ) - ), -) -docs = loader.load() -text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=100) -splits = text_splitter.split_documents(docs) -``` - -## Indexing/Adding Chunks - -Here the document is scoped to the agent, so it's the agent that has the context about this blog. - -It is also possible to scope a document to a user. This is particularly useful when there are different users and there's a document that needs to be added for each of them. - -```python -for chunk_number, split in enumerate(splits): - # Create a doc with the chunked content - client.docs.create( - agent_id=agent.id, - doc={ - "title": "LLM Powered Autonomous Agents", - "content": split.page_content, - "metadata": {"chunk": chunk_number, **split.metadata}, - }, - ) -``` - -## Create Session - -```python -session = client.sessions.create( - agent_id=agent.id, - situation="You are Ahti. You know all about AI and Agents", - metadata={"agent_id": agent.id}, -) -``` - -## Invoke Agent - -The `response` object also returns which `doc_ids` were used in generating a message. - -```python -user_msg = "What are autonomous agents?" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - } - ], - max_tokens=4096, - recall=True, - remember=True, -) - -# refer to doc_ids in the response -print(f"{response.response[0][0].content}\n\n Docs used:{response.doc_ids}") -``` - diff --git a/docs/guides/image-+-text-with-gpt-4o.md b/docs/guides/image-+-text-with-gpt-4o.md deleted file mode 100644 index be46bff35..000000000 --- a/docs/guides/image-+-text-with-gpt-4o.md +++ /dev/null @@ -1,95 +0,0 @@ -# Image + Text with GPT-4o - -Julep supports using GPT-4o (or GPT-4-Vision) for image input. - -## Setting Up an Agent and Session - -Initialize the Julep Client and create an Agent with `gpt-4o`. - -```python -from julep import Client -from dotenv import load_dotenv -import os - -load_dotenv() - -api_key = os.environ["JULEP_API_KEY"] -base_url = os.environ["JULEP_API_URL"] - -client = Client(api_key=api_key, base_url=base_url) - -agent = client.agents.create( - name="XKCD Explainer", - about="An XKCD Comic Explainer", - model="gpt-4o", - metadata={"name": "XKCD Explainer"}, -) -session = client.sessions.create( - agent_id=agent.id, - situation="Your purpose in life is to explain XKCD Comics to n00bs", - metadata={"agent": "XKCD Explainer"}, -) -``` - -## Sending an image - -> Make sure to follow the changed `content` object spec for sending in images. - -### Image as a URL - -```python -res = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": [ - { - "type": "image_url", - "image_url": { - "url": "https://imgs.xkcd.com/comics/earth_like_exoplanet.png" - }, - } - ], - } - ], - max_tokens=1024, -) -print(res.response[0][0].content) -``` - -### Image as a file (base64 encoded) - -```python -IMAGE_PATH = "images/xkcd_little_bobby_tables.png" -def encode_image(image_path: str): - # check if the image exists - if not os.path.exists(image_path): - raise FileNotFoundError(f"Image file not found: {image_path}") - with open(image_path, "rb") as image_file: - return base64.b64encode(image_file.read()).decode('utf-8') - -base64_image = encode_image(IMAGE_PATH) - - -res = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": [ - { - "type": "image_url", - "image_url": { - "url": f"data:image/png;base64,{base64_image}" - }, - } - ], - } - ], - max_tokens=1024, -) -print(res.response[0][0].content) -``` - -\ diff --git a/docs/guides/quickstart.md b/docs/guides/quickstart.md deleted file mode 100644 index 813ff4a4e..000000000 --- a/docs/guides/quickstart.md +++ /dev/null @@ -1,275 +0,0 @@ ---- -description: >- - Creating a Search Agent using GPT-4o that calls a Search & Read Post API and - sets the appropriate filters and values. ---- - -# (Quickstart) Build a Basic Agent - -## Getting Setup - -### Option 1: Install and run Julep locally - -Read the[self-hosting.md](self-hosting.md "mention") guide to learn more. - -### Option 2: Use the Julep Cloud - -* Generate an API key from [https://platform.julep.ai](https://platform.julep.ai) -* Set your environment variables - -```bash -export JULEP_API_KEY= -export JULEP_API_URL=https://api-alpha.julep.ai/api -``` - -## 1. Installation - -```bash -pip install -U julep -``` - -## 2. Setting up the `client` - -```py -from julep import Client -from dotenv import load_dotenv -import os - -load_dotenv() - -api_key = os.environ["JULEP_API_KEY"] -base_url = os.environ["JULEP_API_URL"] - -client = Client(api_key=api_key, base_url=base_url) -``` - -## 3. Creating an `agent` - -### **Instructions** - -Instructions are added to an agent. These should be as clear, distinct, and direct as possible. Instructions should be defined step-by-step. - -> We recommended to write the instructions in the same tone as system prompt. - -```python -INSTRUCTIONS = [ - "The user will inform you about the product they want to focus on. They will choose from the following: Assistants API, GPT series of models, Dall-E, ChatGPT, Sora", - "You WILL ask and decide the product to focus on if it is not clear. You will NOT proceed if the product is unclear." - "You will then, ask the user about what type of information and feedback they need from the forum.", - "You will generate 5 very specific search queries based on what the user wants.", - "The user will then provide you with the queries they like. If not, help them refine it.", - "ONLY WHEN the search query has been decided, search through the forum using the search_forum function. This will provide you with the Post IDs and Blurbs. You will read through them and tell the user in brief about the posts using the blurbs.", - "MAKE SURE to use and refer to posts using the `post_id`", - "The user will provide and choose the post they want more information on. You will then call the `read_post` function and pass the `post_id`.", -] -``` - -### **Tools** - -OpenAI specification of tools. \ -_Descriptions are crucial, more so than examples_. - -Your descriptions should explain every detail about the tool, including: - -* What the tool does -* When it should be used (and when it shouldn’t) -* What does each parameter mean and how it affect the tool’s behavior -* Any important caveats or limitations, such as what information the tool does not return if the tool name is unclear -* The more context you can give about your tools, the better the model will be at deciding when and how to use them. Aim for at least 3-4 sentences per tool description, more if the tool is complex. - -```python -def search_forum( - query: str, - order: Literal["latest", "likes", "views", "latest_topic"], - max_views: int = 10000, - min_views: int = 500, - category: str = None, -): - # Define your function here! - pass - -def read_post(post_id: int): - # Define your function here! - pass - -TOOLS = [ - { - "type": "function", - "function": { - "name": "search_forum", - "description": "Retrieves a list of posts from a forum for the given search parameters. The search parameters should include the search query and additional parameters such as: category, order, minimum views, and maximum views. The tool will return a list of posts based on the search query and additional parameters. It should be used when the user asks to start monitoring the forum.", - "parameters": { - "type": "object", - "properties": { - "query": { - "type": "string", - "description": "The search query to be used to search for posts in the forum.", - }, - "order": { - "type": "string", - "description": "The order in which the posts should be sorted. Possible values are: latest, likes, views, latest_topic.", - }, - "min_views": { - "type": "number", - "description": "The minimum number of views a post should have to be included in the search results.", - }, - "max_views": { - "type": "number", - "description": "The maximum number of views a post should have to be included in the search results.", - }, - }, - "required": ["query", "order", "min_views", "max_views", "category"], - }, - }, - }, - { - "type": "function", - "function": { - "name": "read_post", - "description": "Retrieves the details of a specific post from the forum. The tool should take the post ID as input and return the details of the post including the content, author, date, and other relevant information. It should be used when the user asks to read a specific post.", - "parameters": { - "type": "object", - "properties": { - "post_id": { - "type": "number", - "description": "The ID of the post to be read.", - }, - }, - "required": ["post_id"], - }, - }, - }, -] -``` - -### **Agent** - -An agent is an object to which LLM settings like the model, temperature, and tools are scoped to. Following is how you can define an agent. - -> Pro tip: Always add some metadata. It'll be helpful later! - -```py -agent = client.agents.create( - name="Archy", - about="An agent that posts and comments on Discourse forums by filtering for the provided topic", - tools=TOOLS, - instructions=INSTRUCTIONS, - model="gpt-4o", - default_settings={ - "temperature": 0.5, - "top_p": 1, - "min_p": 0.01, - "presence_penalty": 0, - "frequency_penalty": 0, - "length_penalty": 1.0, - }, - metadata={"name": "Archy"}, -) -``` - -## 4. Creating a `user` - -The user is the object which represents the user of the application. Memories are formed and saved for each user and many users can talk to one agent. - -```py -user = client.users.create( - name="Anon", - about="A product manager at OpenAI, working with Archy to validate and improve the product", - metadata={"name": "Anon"}, -) -``` - -## 5. Creating a `session` - -An _agent_ is communicated over a _session_. Optionally, a _user_ can be added. - -The system prompt goes here. Conversation history and summary are stored in a "session". - -The session paradigm allows many users to interact with one agent and allows the separation of conversation history and memories. - -### Situation - -A situation prompt is defined in a session. It sets the stage for the interaction with the agent. It needs to give a personality to the agent along with providing more context about the ongoing interaction. - -```python -SITUATION_PROMPT = """ -You are Archy, a senior community manager at OpenAI. -You read through discussions and posts made on the OpenAI Community Forum. -You are extremely specific about the issues you look for and seek to understand all the parameters when searching for posts. -After that, you read the specific posts and discussions and make a summary of the trends, sentiments related to OpenAI and how people are using OpenAI products. - -Here, you are helping the product manager at OpenAI to get feedback and understand OpenAI products. -Follow the instructions strictly. -""" -``` - -```py -session = client.sessions.create( - user_id=user.id, - agent_id=agent.id, - situation=SITUATION_PROMPT, - metadata={"agent_id": agent.id, "user_id": user.id}, -) -``` - -## 6. Stateful Conversation with Tool Calls - -`session.chat` controls the communication between the "agent" and the "user". - -It has two important arguments; - -* `recall`: Retrieves the previous conversations and memories. -* `remember`: Saves the current conversation turn into the memory store. - -To keep the session stateful, both need to be `True` - -```python -user_msg = ( - "i wanna search for assistants api. api errors in it" -) -``` - -```py -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - "name": "Anon", - } - ], - recall=True, - remember=True, -) -``` - -### **Parsing and calling the function** - -On parsing the response it is possible to view the tool call (if the LLM calls it) and call the function you defined. - -```python -agent_response = response.response[0][0] -elif agent_response.role.value == "tool_call": - tool_call = json.loads(agent_response.content) - args = json.loads( - tool_call.get("arguments", "{}") - ) # Parse the JSON string into a dictionary - tool = tool_call.get("name", "") - if tool == "search_forum": - posts = await search_forum(**args) - tool_response = client.sessions.chat( - session_id=session_id, - messages=[{"role": "function", "name": "search_forum", "content": json.dumps(posts)}], - recall=True, - remember=True, - ) - elif tool == "read_post": - post = await read_post(**args) - tool_response = client.sessions.chat( - session_id=session_id, - messages=[{"role": "function", "name": "read_post", "content": json.dumps(posts)}], - recall=True, - remember=True - ) -``` diff --git a/docs/guides/self-hosting.md b/docs/guides/self-hosting.md deleted file mode 100644 index 510ec5b28..000000000 --- a/docs/guides/self-hosting.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -description: Learn how to configure and deploy Julep with Docker. ---- - -# Self-hosting Julep - -Julep is available as a hosted service or as a self-managed instance. This guide assumes you are running the commands from the machine you intend to host from. - -## Running Julep - -* Download the `docker-compose.yml` file along with the `.env` file for configuration to run the Julep platform locally. - -```bash -# Add the docker compose to your project dir -wget https://raw.githubusercontent.com/julep-ai/julep/dev/deploy/docker-compose.yml - -# Add the .env file to your project dir -wget https://raw.githubusercontent.com/julep-ai/julep/dev/deploy/.env.example -O .env - -# Pull the latest images -docker compose pull - -# Start the services (in detached mode) -docker compose up -d - -``` - -After all the services have started you can see them running in the background: - -```bash -docker compose ps -``` - -## Environment Variables - -You can use environment variables to control authentication and authorization with the platform and in between services. - -For running locally: - -* The default `JULEP_API_URL` is `http://0.0.0.0:8080` -* The default `JULEP_API_KEY` is `myauthkey` -* You can define your `ANTHROPIC_API_KEY` or `OPENAI_API_KEY` in the `.env` - -## Restarting all services - -You can restart services to pick up any configuration changes by running: - -{% code lineNumbers="true" %} -```bash -# Stop and remove the containers -docker compose down - -# Recreate and start the containers -docker compose up -d -``` -{% endcode %} - -> Be aware that this will result in downtime. Simply restarting the services does not apply configuration changes. - -## Stopping all services - -You can stop Julep by running `docker compose stop` in the same directory as your `docker-compose.yml` file. - -**Uninstall and delete all data** - -{% code lineNumbers="true" %} -```bash -# Stop docker and remove volumes -docker compose down -v -``` -{% endcode %} - -> **Be careful!** -> -> This will wipe out all the conversation history and memories in the database and storage volumes - -## Advanced - -If you want to deploy Julep to production, [let's hop on a call](https://calendly.com/diwank-julep/45min)! - -We'll help you customize the platform and help you get set up with: - -* Multi-tenancy -* Reverse proxy along with authentication and authorization -* Self-hosted LLMs -* & more - - - diff --git a/docs/guides/use-julep-with-composio.md b/docs/guides/use-julep-with-composio.md deleted file mode 100644 index 5c13b3db4..000000000 --- a/docs/guides/use-julep-with-composio.md +++ /dev/null @@ -1,128 +0,0 @@ -# Use Julep with Composio - -Composio enables agents to execute tasks that require the interaction of agents with the world outside via APIs, RPCs, Shells, Filemanagers, and Browser. - -It also natively integrates with Julep, reducing the complexity of writing your own integrations! - -## Install & Set up Composio - -```bash -## Set up Composio -pip install julep composio_julep -``` - - Log in to Composio & Authenticate with GitHub - -```bash -composio login -composio add github -``` - -## Preview - -```python -import os -from julep import Client -from dotenv import load_dotenv -import json -from composio_julep import Action, ComposioToolSet - -load_dotenv() - -api_key = os.environ["JULEP_API_KEY"] -base_url = os.environ["JULEP_API_URL"] - -client = Client(api_key=api_key, base_url=base_url) - -toolset = ComposioToolSet() -composio_tools = toolset.get_actions( - actions=[Action.GITHUB_ACTIVITY_STAR_REPO_FOR_AUTHENTICATED_USER] -) - -agent = client.agents.create( - name="Julius", - about="GitHub Copilot Personified", - model="gpt-4o", - tools=composio_tools, -) -session = client.sessions.create( - agent_id=agent.id, - situation="You are a GitHub Copilot Agent. Follow instructions as specified. Use GitHub tools when needed.", -) -user_msg = "Hey. Can you star all julep-ai/julep and SamparkAI/composio for me?" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - } - ], - recall=True, - remember=True, -) -output = toolset.handle_tool_calls(client, session.id, response) -``` - -## Initialise Julep & Composio - -```python -import os -from julep import Client -from dotenv import load_dotenv -import json -from composio_julep import Action, ComposioToolSet -​ -load_dotenv() -​ -api_key = os.environ["JULEP_API_KEY"] -base_url = os.environ["JULEP_API_URL"] -​ -client = Client(api_key=api_key, base_url=base_url) -​toolset = ComposioToolSet() -composio_tools = toolset.get_actions( - actions=[Action.GITHUB_ACTIVITY_STAR_REPO_FOR_AUTHENTICATED_USER] -) -``` - -Read the Composio Docs to see how to filter tools and apps: [https://docs.composio.dev/framework/julep#use-specific-actions](https://docs.composio.dev/framework/julep#use-specific-actions) - -## Setup and Invoke an Agent - -Here, we create an agent and pass `composio_tools` instead of writing our tool spec. - -```python -agent = client.agents.create( - name="Julius", - about="GitHub Copilot Personified", - model="gpt-4o", - tools=composio_tools, -) -session = client.sessions.create( - agent_id=agent.id, - situation="You are a GitHub Copilot Agent. Follow instructions as specified. Use GitHub tools when needed.", -) -user_msg = "Hey. Can you star all julep-ai/julep and SamparkAI/composio for me?" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - } - ], - recall=True, - remember=True, -) -``` - -## Handle a Tool Call - -Composio offers a nifty `handle_tool_calls` function which calls your authenticated tools if that's what the agent has returned. - -If not, it just returns the `ChatResponse` - -```python -output = toolset.handle_tool_calls(client, session.id, response) -print(output.response[0][0].content) -``` diff --git a/docs/how-to-guides/customizing_tasks.md b/docs/how-to-guides/customizing_tasks.md new file mode 100644 index 000000000..a5f845214 --- /dev/null +++ b/docs/how-to-guides/customizing_tasks.md @@ -0,0 +1,106 @@ +# Customizing Tasks + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This guide covers how to define and customize tasks for agents in Julep. + +## Creating a Basic Task + +Here's an example of creating a simple daily motivation task: + +```bash +curl -X POST "https://api.julep.ai/api/agents/YOUR_AGENT_ID/tasks" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "Daily Motivation", + "description": "Provides daily motivation based on user preferences", + "input_schema": { + "type": "object", + "properties": { + "about_user": {"type": "string"}, + "topics": {"type": "array", "items": {"type": "string"}}, + "user_email": {"type": "string", "format": "email"} + }, + "required": ["about_user", "topics", "user_email"] + }, + "main": [ + { + "evaluate": { + "chosen_topic": "_[\"topics\"][randint(len(_[\"topics\"]))]" + } + }, + { + "prompt": "You are a motivational coach and you are coaching someone who is {{inputs[0][\"about_user\"]}}. Think of the challenges they might be facing on the {{_[\"chosen_topic\"]}} topic and what to do about them. Write down your answer as a bulleted list." + }, + { + "prompt": "Write a short motivational poem about {{_[\"choices\"][0].content}}" + }, + { + "tool": { + "name": "send_email", + "arguments": { + "subject": "\"Daily Motivation\"", + "content": "_[\"choices\"][0].content", + "recipient": "inputs[\"user_email\"]" + } + } + }, + { + "sleep": 86400 + }, + { + "workflow": "main", + "arguments": "inputs[0]" + } + ] + }' +``` + +## Adding Conditional Logic + +You can add conditional logic to your tasks using the `if-else` step: + +```json +{ + "if": "inputs['user_mood'] == 'positive'", + "then": { + "prompt": "Great! Let's build on that positive energy. {{inputs['chosen_topic']}}" + }, + "else": { + "prompt": "I understand you're feeling down. Let's work on improving your mood through {{inputs['chosen_topic']}}." + } +} +``` + +## Using Parallel Processing + +For tasks that can benefit from parallel processing, use the `parallel` step: + +```json +{ + "parallel": [ + { + "prompt": "Generate a motivational quote about {{inputs['chosen_topic']}}." + }, + { + "tool": { + "name": "get_weather", + "arguments": { + "location": "inputs['user_location']" + } + } + } + ] +} +``` + +## Next Steps + +- Learn about [handling executions](./handling_executions.md) to manage and monitor your tasks. +- Explore [integrating tools](../tutorials/integrating_tools.md) to enhance your task capabilities. \ No newline at end of file diff --git a/docs/how-to-guides/handling_executions.md b/docs/how-to-guides/handling_executions.md new file mode 100644 index 000000000..fca788642 --- /dev/null +++ b/docs/how-to-guides/handling_executions.md @@ -0,0 +1,79 @@ +# Handling Executions + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This guide covers how to manage and monitor task executions in Julep. + +## Starting an Execution + +To start a new execution of a task: + +```bash +curl -X POST "https://api.julep.ai/api/tasks/YOUR_TASK_ID/executions" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "input": { + "about_user": "a software developer looking to improve work-life balance", + "topics": ["time management", "stress reduction", "productivity"], + "user_email": "user@example.com" + } + }' +``` + +## Monitoring Execution Status + +To check the status of an execution: + +```bash +curl -X GET "https://api.julep.ai/api/executions/YOUR_EXECUTION_ID" \ + -H "Authorization: Bearer $JULEP_API_KEY" +``` + +## Handling Awaiting Input State + +If an execution is in the "awaiting_input" state, you can resume it with: + +```bash +curl -X POST "https://api.julep.ai/api/executions/resume" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "task_token": "YOUR_TASK_TOKEN", + "input": { + "user_feedback": "The motivation was helpful, thank you!" + } + }' +``` + +## Cancelling an Execution + +To cancel a running execution: + +```bash +curl -X PUT "https://api.julep.ai/api/executions/YOUR_EXECUTION_ID" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "status": "cancelled" + }' +``` + +## Streaming Execution Events + +To stream events from an execution in real-time: + +```bash +curl -N -H "Authorization: Bearer $JULEP_API_KEY" \ + "https://api.julep.ai/api/executions/YOUR_EXECUTION_ID/transitions/stream" +``` + +## Next Steps + +- Learn about [customizing tasks](./customizing_tasks.md) to create more complex workflows. +- Explore [using chat features](./using_chat_features.md) to interact with agents during task execution. \ No newline at end of file diff --git a/docs/how-to-guides/managing_users.md b/docs/how-to-guides/managing_users.md new file mode 100644 index 000000000..b1f47a016 --- /dev/null +++ b/docs/how-to-guides/managing_users.md @@ -0,0 +1,61 @@ +# Managing Users + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This guide covers how to create, update, and delete users in Julep. + +## Creating a User + +To create a new user: + +```bash +curl -X POST "https://api.julep.ai/api/users" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "John Doe", + "about": "A new user" + }' +``` + +## Updating a User + +To update an existing user: + +```bash +curl -X PUT "https://api.julep.ai/api/users/YOUR_USER_ID" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "John Updated", + "about": "An updated user description" + }' +``` + +## Deleting a User + +To delete a user: + +```bash +curl -X DELETE "https://api.julep.ai/api/users/YOUR_USER_ID" \ + -H "Authorization: Bearer $JULEP_API_KEY" +``` + +## Retrieving User Information + +To get information about a specific user: + +```bash +curl -X GET "https://api.julep.ai/api/users/YOUR_USER_ID" \ + -H "Authorization: Bearer $JULEP_API_KEY" +``` + +## Next Steps + +- Learn about [managing sessions](../tutorials/managing_sessions.md) with users. +- Explore [using chat features](./using_chat_features.md) to interact with agents as a user. \ No newline at end of file diff --git a/docs/how-to-guides/using_chat_features.md b/docs/how-to-guides/using_chat_features.md new file mode 100644 index 000000000..d9aabceaa --- /dev/null +++ b/docs/how-to-guides/using_chat_features.md @@ -0,0 +1,104 @@ +# Using Chat Features + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This guide covers how to use the chat features in Julep for dynamic interactions with agents. + +## Starting a Chat Session + +To start a new chat session: + +```bash +curl -X POST "https://api.julep.ai/api/sessions" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "YOUR_AGENT_ID", + "user_id": "YOUR_USER_ID" + }' +``` + +## Sending a Message + +To send a message in a chat session: + +```bash +curl -X POST "https://api.julep.ai/api/sessions/YOUR_SESSION_ID/chat" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "messages": [ + { + "role": "user", + "content": "Hello, can you help me with a task?" + } + ], + "stream": false, + "max_tokens": 150 + }' +``` + +## Streaming Responses + +To stream the agent's response: + +```bash +curl -N -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "messages": [ + { + "role": "user", + "content": "Tell me a story about a brave knight." + } + ], + "stream": true + }' \ + "https://api.julep.ai/api/sessions/YOUR_SESSION_ID/chat" +``` + +## Using Tools in Chat + +To use a tool during a chat session: + +```bash +curl -X POST "https://api.julep.ai/api/sessions/YOUR_SESSION_ID/chat" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "messages": [ + { + "role": "user", + "content": "Send an email to john@example.com about our meeting tomorrow." + } + ], + "tools": [ + { + "type": "function", + "function": { + "name": "send_email", + "description": "Send an email to a recipient", + "parameters": { + "type": "object", + "properties": { + "to": {"type": "string"}, + "subject": {"type": "string"}, + "body": {"type": "string"} + }, + "required": ["to", "subject", "body"] + } + } + } + ] + }' +``` + +## Next Steps + +- Explore [customizing tasks](./customizing_tasks.md) to create more complex interactions. +- Learn about [handling executions](./handling_executions.md) for long-running processes. \ No newline at end of file diff --git a/docs/introduction/core-concepts.md b/docs/introduction/core-concepts.md deleted file mode 100644 index 49bf6c335..000000000 --- a/docs/introduction/core-concepts.md +++ /dev/null @@ -1,3 +0,0 @@ -# Core Concepts - -* [Agents](../agents/overview.md) diff --git a/docs/introduction/getting_started.md b/docs/introduction/getting_started.md new file mode 100644 index 000000000..f273bb776 --- /dev/null +++ b/docs/introduction/getting_started.md @@ -0,0 +1,39 @@ +# Getting Started with Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This guide will help you set up and start using the Julep API. + +## Prerequisites + +- A Julep API key +- Basic understanding of RESTful APIs +- Familiarity with JSON and curl (or any HTTP client) + +## Initial Setup + +1. Obtain your API key from the Julep dashboard. +2. Set up your environment to include the API key in all requests: + +```bash +export JULEP_API_KEY=your_api_key_here +``` + +3. Test your setup with a simple API call: + +```bash +curl -H "Authorization: Bearer $JULEP_API_KEY" https://api.julep.ai/api/agents +``` + +If successful, you should receive a list of agents (or an empty list if you haven't created any yet). + +## Next Steps + +- Create your first agent using the [Creating Your First Agent](../tutorials/creating_your_first_agent.md) tutorial. +- Explore the [API Reference](../reference/api_endpoints/) to learn about available endpoints. +- Check out the [How-to Guides](../how-to-guides/) for specific tasks and use cases. \ No newline at end of file diff --git a/docs/introduction/overview.md b/docs/introduction/overview.md new file mode 100644 index 000000000..26c75bcdb --- /dev/null +++ b/docs/introduction/overview.md @@ -0,0 +1,21 @@ +# Overview of Julep + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +Julep is a powerful backend system for managing agent execution and interactions. It provides a comprehensive set of features for creating and managing agents, users, sessions, tools, documents, tasks, and executions. + +## Key Features + +- **Agents**: Create and manage AI agents backed by foundation models like GPT-4 or Claude. +- **Sessions**: Maintain long-lived interactions with agents, with support for multiple agents and users. +- **Tools**: Integrate user-defined functions, system tools, and third-party integrations. +- **Documents**: Store and retrieve text snippets using a built-in vector database. +- **Tasks**: Define complex, multi-step workflows for agents to execute. +- **Executions**: Manage and monitor the execution of tasks, with support for parallel processing and error handling. + +Julep offers a flexible and powerful API for building sophisticated AI applications, with features like context management, tool integration, and workflow automation. \ No newline at end of file diff --git a/docs/js-sdk-docs/.nojekyll b/docs/js-sdk-docs/.nojekyll deleted file mode 100644 index e2ac6616a..000000000 --- a/docs/js-sdk-docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/js-sdk-docs/README.md b/docs/js-sdk-docs/README.md deleted file mode 100644 index a974d134d..000000000 --- a/docs/js-sdk-docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -@julep/sdk / [Modules](modules.md) - -@julep/sdk diff --git a/docs/js-sdk-docs/classes/api.ApiError.md b/docs/js-sdk-docs/classes/api.ApiError.md deleted file mode 100644 index ed7cf7b7a..000000000 --- a/docs/js-sdk-docs/classes/api.ApiError.md +++ /dev/null @@ -1,228 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [api](../modules/api.md) / ApiError - -# Class: ApiError - -[api](../modules/api.md).ApiError - -## Hierarchy - -- `Error` - - ↳ **`ApiError`** - -## Table of contents - -### Constructors - -- [constructor](api.ApiError.md#constructor) - -### Properties - -- [body](api.ApiError.md#body) -- [message](api.ApiError.md#message) -- [name](api.ApiError.md#name) -- [request](api.ApiError.md#request) -- [stack](api.ApiError.md#stack) -- [status](api.ApiError.md#status) -- [statusText](api.ApiError.md#statustext) -- [url](api.ApiError.md#url) -- [prepareStackTrace](api.ApiError.md#preparestacktrace) -- [stackTraceLimit](api.ApiError.md#stacktracelimit) - -### Methods - -- [captureStackTrace](api.ApiError.md#capturestacktrace) - -## Constructors - -### constructor - -• **new ApiError**(`request`, `response`, `message`): [`ApiError`](api.ApiError.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `request` | `ApiRequestOptions` | -| `response` | `ApiResult` | -| `message` | `string` | - -#### Returns - -[`ApiError`](api.ApiError.md) - -#### Overrides - -Error.constructor - -#### Defined in - -[src/api/core/ApiError.ts:15](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/ApiError.ts#L15) - -## Properties - -### body - -• `Readonly` **body**: `any` - -#### Defined in - -[src/api/core/ApiError.ts:12](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/ApiError.ts#L12) - -___ - -### message - -• **message**: `string` - -#### Inherited from - -Error.message - -#### Defined in - -node_modules/typescript/lib/lib.es5.d.ts:1077 - -___ - -### name - -• **name**: `string` - -#### Inherited from - -Error.name - -#### Defined in - -node_modules/typescript/lib/lib.es5.d.ts:1076 - -___ - -### request - -• `Readonly` **request**: `ApiRequestOptions` - -#### Defined in - -[src/api/core/ApiError.ts:13](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/ApiError.ts#L13) - -___ - -### stack - -• `Optional` **stack**: `string` - -#### Inherited from - -Error.stack - -#### Defined in - -node_modules/typescript/lib/lib.es5.d.ts:1078 - -___ - -### status - -• `Readonly` **status**: `number` - -#### Defined in - -[src/api/core/ApiError.ts:10](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/ApiError.ts#L10) - -___ - -### statusText - -• `Readonly` **statusText**: `string` - -#### Defined in - -[src/api/core/ApiError.ts:11](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/ApiError.ts#L11) - -___ - -### url - -• `Readonly` **url**: `string` - -#### Defined in - -[src/api/core/ApiError.ts:9](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/ApiError.ts#L9) - -___ - -### prepareStackTrace - -▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any` - -Optional override for formatting stack traces - -**`See`** - -https://v8.dev/docs/stack-trace-api#customizing-stack-traces - -#### Type declaration - -▸ (`err`, `stackTraces`): `any` - -##### Parameters - -| Name | Type | -| :------ | :------ | -| `err` | `Error` | -| `stackTraces` | `CallSite`[] | - -##### Returns - -`any` - -#### Inherited from - -Error.prepareStackTrace - -#### Defined in - -node_modules/@types/node/globals.d.ts:28 - -___ - -### stackTraceLimit - -▪ `Static` **stackTraceLimit**: `number` - -#### Inherited from - -Error.stackTraceLimit - -#### Defined in - -node_modules/@types/node/globals.d.ts:30 - -## Methods - -### captureStackTrace - -▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` - -Create .stack property on a target object - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `targetObject` | `object` | -| `constructorOpt?` | `Function` | - -#### Returns - -`void` - -#### Inherited from - -Error.captureStackTrace - -#### Defined in - -node_modules/@types/node/globals.d.ts:21 diff --git a/docs/js-sdk-docs/classes/api.BaseHttpRequest.md b/docs/js-sdk-docs/classes/api.BaseHttpRequest.md deleted file mode 100644 index c2531523d..000000000 --- a/docs/js-sdk-docs/classes/api.BaseHttpRequest.md +++ /dev/null @@ -1,75 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [api](../modules/api.md) / BaseHttpRequest - -# Class: BaseHttpRequest - -[api](../modules/api.md).BaseHttpRequest - -## Table of contents - -### Constructors - -- [constructor](api.BaseHttpRequest.md#constructor) - -### Properties - -- [config](api.BaseHttpRequest.md#config) - -### Methods - -- [request](api.BaseHttpRequest.md#request) - -## Constructors - -### constructor - -• **new BaseHttpRequest**(`config`): [`BaseHttpRequest`](api.BaseHttpRequest.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `config` | [`OpenAPIConfig`](../modules/api.md#openapiconfig) | - -#### Returns - -[`BaseHttpRequest`](api.BaseHttpRequest.md) - -#### Defined in - -[src/api/core/BaseHttpRequest.ts:10](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/BaseHttpRequest.ts#L10) - -## Properties - -### config - -• `Readonly` **config**: [`OpenAPIConfig`](../modules/api.md#openapiconfig) - -#### Defined in - -[src/api/core/BaseHttpRequest.ts:10](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/BaseHttpRequest.ts#L10) - -## Methods - -### request - -▸ **request**\<`T`\>(`options`): [`CancelablePromise`](api.CancelablePromise.md)\<`T`\> - -#### Type parameters - -| Name | -| :------ | -| `T` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `ApiRequestOptions` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<`T`\> - -#### Defined in - -[src/api/core/BaseHttpRequest.ts:12](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/BaseHttpRequest.ts#L12) diff --git a/docs/js-sdk-docs/classes/api.CancelError.md b/docs/js-sdk-docs/classes/api.CancelError.md deleted file mode 100644 index b3bd3b05c..000000000 --- a/docs/js-sdk-docs/classes/api.CancelError.md +++ /dev/null @@ -1,189 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [api](../modules/api.md) / CancelError - -# Class: CancelError - -[api](../modules/api.md).CancelError - -## Hierarchy - -- `Error` - - ↳ **`CancelError`** - -## Table of contents - -### Constructors - -- [constructor](api.CancelError.md#constructor) - -### Properties - -- [message](api.CancelError.md#message) -- [name](api.CancelError.md#name) -- [stack](api.CancelError.md#stack) -- [prepareStackTrace](api.CancelError.md#preparestacktrace) -- [stackTraceLimit](api.CancelError.md#stacktracelimit) - -### Accessors - -- [isCancelled](api.CancelError.md#iscancelled) - -### Methods - -- [captureStackTrace](api.CancelError.md#capturestacktrace) - -## Constructors - -### constructor - -• **new CancelError**(`message`): [`CancelError`](api.CancelError.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `message` | `string` | - -#### Returns - -[`CancelError`](api.CancelError.md) - -#### Overrides - -Error.constructor - -#### Defined in - -[src/api/core/CancelablePromise.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L6) - -## Properties - -### message - -• **message**: `string` - -#### Inherited from - -Error.message - -#### Defined in - -node_modules/typescript/lib/lib.es5.d.ts:1077 - -___ - -### name - -• **name**: `string` - -#### Inherited from - -Error.name - -#### Defined in - -node_modules/typescript/lib/lib.es5.d.ts:1076 - -___ - -### stack - -• `Optional` **stack**: `string` - -#### Inherited from - -Error.stack - -#### Defined in - -node_modules/typescript/lib/lib.es5.d.ts:1078 - -___ - -### prepareStackTrace - -▪ `Static` `Optional` **prepareStackTrace**: (`err`: `Error`, `stackTraces`: `CallSite`[]) => `any` - -Optional override for formatting stack traces - -**`See`** - -https://v8.dev/docs/stack-trace-api#customizing-stack-traces - -#### Type declaration - -▸ (`err`, `stackTraces`): `any` - -##### Parameters - -| Name | Type | -| :------ | :------ | -| `err` | `Error` | -| `stackTraces` | `CallSite`[] | - -##### Returns - -`any` - -#### Inherited from - -Error.prepareStackTrace - -#### Defined in - -node_modules/@types/node/globals.d.ts:28 - -___ - -### stackTraceLimit - -▪ `Static` **stackTraceLimit**: `number` - -#### Inherited from - -Error.stackTraceLimit - -#### Defined in - -node_modules/@types/node/globals.d.ts:30 - -## Accessors - -### isCancelled - -• `get` **isCancelled**(): `boolean` - -#### Returns - -`boolean` - -#### Defined in - -[src/api/core/CancelablePromise.ts:11](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L11) - -## Methods - -### captureStackTrace - -▸ **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` - -Create .stack property on a target object - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `targetObject` | `object` | -| `constructorOpt?` | `Function` | - -#### Returns - -`void` - -#### Inherited from - -Error.captureStackTrace - -#### Defined in - -node_modules/@types/node/globals.d.ts:21 diff --git a/docs/js-sdk-docs/classes/api.CancelablePromise.md b/docs/js-sdk-docs/classes/api.CancelablePromise.md deleted file mode 100644 index b9e1c1ffc..000000000 --- a/docs/js-sdk-docs/classes/api.CancelablePromise.md +++ /dev/null @@ -1,299 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [api](../modules/api.md) / CancelablePromise - -# Class: CancelablePromise\ - -[api](../modules/api.md).CancelablePromise - -## Type parameters - -| Name | -| :------ | -| `T` | - -## Implements - -- `Promise`\<`T`\> - -## Table of contents - -### Constructors - -- [constructor](api.CancelablePromise.md#constructor) - -### Properties - -- [#cancelHandlers](api.CancelablePromise.md##cancelhandlers) -- [#isCancelled](api.CancelablePromise.md##iscancelled) -- [#isRejected](api.CancelablePromise.md##isrejected) -- [#isResolved](api.CancelablePromise.md##isresolved) -- [#promise](api.CancelablePromise.md##promise) -- [#reject](api.CancelablePromise.md##reject) -- [#resolve](api.CancelablePromise.md##resolve) - -### Accessors - -- [[toStringTag]](api.CancelablePromise.md#[tostringtag]) -- [isCancelled](api.CancelablePromise.md#iscancelled) - -### Methods - -- [cancel](api.CancelablePromise.md#cancel) -- [catch](api.CancelablePromise.md#catch) -- [finally](api.CancelablePromise.md#finally) -- [then](api.CancelablePromise.md#then) - -## Constructors - -### constructor - -• **new CancelablePromise**\<`T`\>(`executor`): [`CancelablePromise`](api.CancelablePromise.md)\<`T`\> - -#### Type parameters - -| Name | -| :------ | -| `T` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `executor` | (`resolve`: (`value`: `T` \| `PromiseLike`\<`T`\>) => `void`, `reject`: (`reason?`: `any`) => `void`, `onCancel`: `OnCancel`) => `void` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<`T`\> - -#### Defined in - -[src/api/core/CancelablePromise.ts:33](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L33) - -## Properties - -### #cancelHandlers - -• `Private` `Readonly` **#cancelHandlers**: () => `void`[] - -#### Defined in - -[src/api/core/CancelablePromise.ts:28](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L28) - -___ - -### #isCancelled - -• `Private` **#isCancelled**: `boolean` - -#### Defined in - -[src/api/core/CancelablePromise.ts:27](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L27) - -___ - -### #isRejected - -• `Private` **#isRejected**: `boolean` - -#### Defined in - -[src/api/core/CancelablePromise.ts:26](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L26) - -___ - -### #isResolved - -• `Private` **#isResolved**: `boolean` - -#### Defined in - -[src/api/core/CancelablePromise.ts:25](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L25) - -___ - -### #promise - -• `Private` `Readonly` **#promise**: `Promise`\<`T`\> - -#### Defined in - -[src/api/core/CancelablePromise.ts:29](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L29) - -___ - -### #reject - -• `Private` `Optional` **#reject**: (`reason?`: `any`) => `void` - -#### Type declaration - -▸ (`reason?`): `void` - -##### Parameters - -| Name | Type | -| :------ | :------ | -| `reason?` | `any` | - -##### Returns - -`void` - -#### Defined in - -[src/api/core/CancelablePromise.ts:31](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L31) - -___ - -### #resolve - -• `Private` `Optional` **#resolve**: (`value`: `T` \| `PromiseLike`\<`T`\>) => `void` - -#### Type declaration - -▸ (`value`): `void` - -##### Parameters - -| Name | Type | -| :------ | :------ | -| `value` | `T` \| `PromiseLike`\<`T`\> | - -##### Returns - -`void` - -#### Defined in - -[src/api/core/CancelablePromise.ts:30](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L30) - -## Accessors - -### [toStringTag] - -• `get` **[toStringTag]**(): `string` - -#### Returns - -`string` - -#### Implementation of - -Promise.[toStringTag] - -#### Defined in - -[src/api/core/CancelablePromise.ts:87](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L87) - -___ - -### isCancelled - -• `get` **isCancelled**(): `boolean` - -#### Returns - -`boolean` - -#### Defined in - -[src/api/core/CancelablePromise.ts:127](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L127) - -## Methods - -### cancel - -▸ **cancel**(): `void` - -#### Returns - -`void` - -#### Defined in - -[src/api/core/CancelablePromise.ts:108](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L108) - -___ - -### catch - -▸ **catch**\<`TResult`\>(`onRejected?`): `Promise`\<`T` \| `TResult`\> - -#### Type parameters - -| Name | Type | -| :------ | :------ | -| `TResult` | `never` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `onRejected?` | ``null`` \| (`reason`: `any`) => `TResult` \| `PromiseLike`\<`TResult`\> | - -#### Returns - -`Promise`\<`T` \| `TResult`\> - -#### Implementation of - -Promise.catch - -#### Defined in - -[src/api/core/CancelablePromise.ts:98](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L98) - -___ - -### finally - -▸ **finally**(`onFinally?`): `Promise`\<`T`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `onFinally?` | ``null`` \| () => `void` | - -#### Returns - -`Promise`\<`T`\> - -#### Implementation of - -Promise.finally - -#### Defined in - -[src/api/core/CancelablePromise.ts:104](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L104) - -___ - -### then - -▸ **then**\<`TResult1`, `TResult2`\>(`onFulfilled?`, `onRejected?`): `Promise`\<`TResult1` \| `TResult2`\> - -#### Type parameters - -| Name | Type | -| :------ | :------ | -| `TResult1` | `T` | -| `TResult2` | `never` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `onFulfilled?` | ``null`` \| (`value`: `T`) => `TResult1` \| `PromiseLike`\<`TResult1`\> | -| `onRejected?` | ``null`` \| (`reason`: `any`) => `TResult2` \| `PromiseLike`\<`TResult2`\> | - -#### Returns - -`Promise`\<`TResult1` \| `TResult2`\> - -#### Implementation of - -Promise.then - -#### Defined in - -[src/api/core/CancelablePromise.ts:91](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/CancelablePromise.ts#L91) diff --git a/docs/js-sdk-docs/classes/api.DefaultService.md b/docs/js-sdk-docs/classes/api.DefaultService.md deleted file mode 100644 index b692d0bb6..000000000 --- a/docs/js-sdk-docs/classes/api.DefaultService.md +++ /dev/null @@ -1,1194 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [api](../modules/api.md) / DefaultService - -# Class: DefaultService - -[api](../modules/api.md).DefaultService - -## Table of contents - -### Constructors - -- [constructor](api.DefaultService.md#constructor) - -### Properties - -- [httpRequest](api.DefaultService.md#httprequest) - -### Methods - -- [chat](api.DefaultService.md#chat) -- [createAgent](api.DefaultService.md#createagent) -- [createAgentDoc](api.DefaultService.md#createagentdoc) -- [createAgentTool](api.DefaultService.md#createagenttool) -- [createSession](api.DefaultService.md#createsession) -- [createUser](api.DefaultService.md#createuser) -- [createUserDoc](api.DefaultService.md#createuserdoc) -- [deleteAgent](api.DefaultService.md#deleteagent) -- [deleteAgentDoc](api.DefaultService.md#deleteagentdoc) -- [deleteAgentMemory](api.DefaultService.md#deleteagentmemory) -- [deleteAgentTool](api.DefaultService.md#deleteagenttool) -- [deleteSession](api.DefaultService.md#deletesession) -- [deleteSessionHistory](api.DefaultService.md#deletesessionhistory) -- [deleteUser](api.DefaultService.md#deleteuser) -- [deleteUserDoc](api.DefaultService.md#deleteuserdoc) -- [getAgent](api.DefaultService.md#getagent) -- [getAgentDocs](api.DefaultService.md#getagentdocs) -- [getAgentMemories](api.DefaultService.md#getagentmemories) -- [getAgentTools](api.DefaultService.md#getagenttools) -- [getHistory](api.DefaultService.md#gethistory) -- [getJobStatus](api.DefaultService.md#getjobstatus) -- [getSession](api.DefaultService.md#getsession) -- [getSuggestions](api.DefaultService.md#getsuggestions) -- [getUser](api.DefaultService.md#getuser) -- [getUserDocs](api.DefaultService.md#getuserdocs) -- [listAgents](api.DefaultService.md#listagents) -- [listSessions](api.DefaultService.md#listsessions) -- [listUsers](api.DefaultService.md#listusers) -- [patchAgent](api.DefaultService.md#patchagent) -- [patchAgentTool](api.DefaultService.md#patchagenttool) -- [patchSession](api.DefaultService.md#patchsession) -- [patchUser](api.DefaultService.md#patchuser) -- [updateAgent](api.DefaultService.md#updateagent) -- [updateAgentTool](api.DefaultService.md#updateagenttool) -- [updateSession](api.DefaultService.md#updatesession) -- [updateUser](api.DefaultService.md#updateuser) - -## Constructors - -### constructor - -• **new DefaultService**(`httpRequest`): [`DefaultService`](api.DefaultService.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `httpRequest` | [`BaseHttpRequest`](api.BaseHttpRequest.md) | - -#### Returns - -[`DefaultService`](api.DefaultService.md) - -#### Defined in - -[src/api/services/DefaultService.ts:35](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L35) - -## Properties - -### httpRequest - -• `Readonly` **httpRequest**: [`BaseHttpRequest`](api.BaseHttpRequest.md) - -#### Defined in - -[src/api/services/DefaultService.ts:35](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L35) - -## Methods - -### chat - -▸ **chat**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ChatResponse`](../modules/api.md#chatresponse)\> - -Interact with the session - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | -| › `accept?` | ``"application/json"`` \| ``"text/event-stream"`` | `"application/json"` | -| › `requestBody?` | [`ChatInput`](../modules/api.md#chatinput) | `undefined` | -| › `sessionId` | `string` | `undefined` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ChatResponse`](../modules/api.md#chatresponse)\> - -ChatResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:404](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L404) - -___ - -### createAgent - -▸ **createAgent**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -Create a new agent -Create a new agent - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `«destructured»` | `Object` | - | -| › `requestBody?` | [`CreateAgentRequest`](../modules/api.md#createagentrequest) | Agent create options | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -ResourceCreatedResponse Agent successfully created - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:180](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L180) - -___ - -### createAgentDoc - -▸ **createAgentDoc**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -Create doc of the agent - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `requestBody?` | [`CreateDoc`](../modules/api.md#createdoc) | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -ResourceCreatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:668](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L668) - -___ - -### createAgentTool - -▸ **createAgentTool**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -Create tool for the agent - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `requestBody?` | [`CreateToolRequest`](../modules/api.md#createtoolrequest) | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -ResourceCreatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:857](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L857) - -___ - -### createSession - -▸ **createSession**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -Create a new session -Create a session between an agent and a user - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `«destructured»` | `Object` | - | -| › `requestBody?` | [`CreateSessionRequest`](../modules/api.md#createsessionrequest) | Session initialization options | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -ResourceCreatedResponse Session successfully created - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:42](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L42) - -___ - -### createUser - -▸ **createUser**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -Create a new user -Create a new user - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `«destructured»` | `Object` | - | -| › `requestBody?` | [`CreateUserRequest`](../modules/api.md#createuserrequest) | User create options | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -ResourceCreatedResponse User successfully created - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:111](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L111) - -___ - -### createUserDoc - -▸ **createUserDoc**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -Create doc of the user - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `requestBody?` | [`CreateDoc`](../modules/api.md#createdoc) | -| › `userId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -ResourceCreatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:740](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L740) - -___ - -### deleteAgent - -▸ **deleteAgent**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete agent - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:556](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L556) - -___ - -### deleteAgentDoc - -▸ **deleteAgentDoc**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete doc by id - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `docId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:783](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L783) - -___ - -### deleteAgentMemory - -▸ **deleteAgentMemory**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete memory of the agent by id - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `memoryId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:804](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L804) - -___ - -### deleteAgentTool - -▸ **deleteAgentTool**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete tool by id - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `toolId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:879](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L879) - -___ - -### deleteSession - -▸ **deleteSession**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete session - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `sessionId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:266](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L266) - -___ - -### deleteSessionHistory - -▸ **deleteSessionHistory**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete session history (does NOT delete related memories) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `sessionId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:386](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L386) - -___ - -### deleteUser - -▸ **deleteUser**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete user - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `userId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:480](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L480) - -___ - -### deleteUserDoc - -▸ **deleteUserDoc**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -Delete doc by id - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `docId` | `string` | -| › `userId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceDeletedResponse`](../modules/api.md#resourcedeletedresponse)\> - -ResourceDeletedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:762](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L762) - -___ - -### getAgent - -▸ **getAgent**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`Agent`](../modules/api.md#agent)\> - -Get details of the agent - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`Agent`](../modules/api.md#agent)\> - -Agent - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:542](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L542) - -___ - -### getAgentDocs - -▸ **getAgentDocs**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\> - -Get docs of the agent -Sorted (created_at descending) - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | - | -| › `agentId` | `string` | `undefined` | - | -| › `limit?` | `number` | `undefined` | - | -| › `metadataFilter?` | `string` | `"{}"` | JSON object that should be used to filter objects by metadata | -| › `offset?` | `number` | `undefined` | - | -| › `order?` | ``"desc"`` \| ``"asc"`` | `"desc"` | Which order should the sort be: `asc` (ascending) or `desc` (descending) | -| › `requestBody?` | `any` | `undefined` | - | -| › `sortBy?` | ``"created_at"`` \| ``"updated_at"`` | `"created_at"` | Which field to sort by: `created_at` or `updated_at` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\> - -any - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:619](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L619) - -___ - -### getAgentMemories - -▸ **getAgentMemories**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Memory`](../modules/api.md#memory)[] }\> - -Get memories of the agent -Sorted (created_at descending) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `limit?` | `number` | -| › `offset?` | `number` | -| › `query` | `string` | -| › `userId?` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Memory`](../modules/api.md#memory)[] }\> - -any - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:432](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L432) - -___ - -### getAgentTools - -▸ **getAgentTools**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Tool`](../modules/api.md#tool)[] }\> - -Get tools of the agent -Sorted (created_at descending) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `limit?` | `number` | -| › `offset?` | `number` | -| › `requestBody?` | `any` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Tool`](../modules/api.md#tool)[] }\> - -any - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:826](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L826) - -___ - -### getHistory - -▸ **getHistory**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`ChatMLMessage`](../modules/api.md#chatmlmessage)[] }\> - -Get all messages in a session -Sorted (created_at ascending) - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | -| › `limit?` | `number` | `100` | -| › `offset?` | `number` | `undefined` | -| › `sessionId` | `string` | `undefined` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`ChatMLMessage`](../modules/api.md#chatmlmessage)[] }\> - -any - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:358](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L358) - -___ - -### getJobStatus - -▸ **getJobStatus**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`JobStatus`](../modules/api.md#jobstatus)\> - -Get status of the job - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `jobId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`JobStatus`](../modules/api.md#jobstatus)\> - -JobStatus - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:950](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L950) - -___ - -### getSession - -▸ **getSession**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`Session`](../modules/api.md#session)\> - -Get details of the session - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `sessionId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`Session`](../modules/api.md#session)\> - -Session - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:248](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L248) - -___ - -### getSuggestions - -▸ **getSuggestions**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Suggestion`](../modules/api.md#suggestion)[] }\> - -Get autogenerated suggestions for session user and agent -Sorted (created_at descending) - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | -| › `limit?` | `number` | `100` | -| › `offset?` | `number` | `undefined` | -| › `sessionId` | `string` | `undefined` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Suggestion`](../modules/api.md#suggestion)[] }\> - -any - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:329](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L329) - -___ - -### getUser - -▸ **getUser**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`User`](../modules/api.md#user)\> - -Get details of the user - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `userId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`User`](../modules/api.md#user)\> - -User - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:466](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L466) - -___ - -### getUserDocs - -▸ **getUserDocs**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\> - -Get docs of the user -Sorted (created_at descending) - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | - | -| › `limit?` | `number` | `undefined` | - | -| › `metadataFilter?` | `string` | `"{}"` | JSON object that should be used to filter objects by metadata | -| › `offset?` | `number` | `undefined` | - | -| › `order?` | ``"desc"`` \| ``"asc"`` | `"desc"` | Which order should the sort be: `asc` (ascending) or `desc` (descending) | -| › `requestBody?` | `any` | `undefined` | - | -| › `sortBy?` | ``"created_at"`` \| ``"updated_at"`` | `"created_at"` | Which field to sort by: `created_at` or `updated_at` | -| › `userId` | `string` | `undefined` | - | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\> - -any - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:691](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L691) - -___ - -### listAgents - -▸ **listAgents**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items`: [`Agent`](../modules/api.md#agent)[] }\> - -List agents -List agents created (use limit/offset pagination to get large number of sessions; sorted by descending order of `created_at` by default) - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | - | -| › `limit?` | `number` | `100` | Number of items to return | -| › `metadataFilter?` | `string` | `"{}"` | JSON object that should be used to filter objects by metadata | -| › `offset?` | `number` | `undefined` | Number of items to skip (sorted created_at descending order) | -| › `order?` | ``"desc"`` \| ``"asc"`` | `"desc"` | Which order should the sort be: `asc` (ascending) or `desc` (descending) | -| › `sortBy?` | ``"created_at"`` \| ``"updated_at"`` | `"created_at"` | Which field to sort by: `created_at` or `updated_at` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items`: [`Agent`](../modules/api.md#agent)[] }\> - -any List of agents (sorted created_at descending order) with limit+offset pagination - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:201](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L201) - -___ - -### listSessions - -▸ **listSessions**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items`: [`Session`](../modules/api.md#session)[] }\> - -List sessions -List sessions created (use limit/offset pagination to get large number of sessions; sorted by descending order of `created_at` by default) - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | - | -| › `limit?` | `number` | `100` | Number of sessions to return | -| › `metadataFilter?` | `string` | `"{}"` | JSON object that should be used to filter objects by metadata | -| › `offset?` | `number` | `undefined` | Number of sessions to skip (sorted created_at descending order) | -| › `order?` | ``"desc"`` \| ``"asc"`` | `"desc"` | Which order should the sort be: `asc` (ascending) or `desc` (descending) | -| › `sortBy?` | ``"created_at"`` \| ``"updated_at"`` | `"created_at"` | Which field to sort by: `created_at` or `updated_at` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items`: [`Session`](../modules/api.md#session)[] }\> - -any List of sessions (sorted created_at descending order) with limit+offset pagination - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:63](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L63) - -___ - -### listUsers - -▸ **listUsers**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items`: [`User`](../modules/api.md#user)[] }\> - -List users -List users created (use limit/offset pagination to get large number of sessions; sorted by descending order of `created_at` by default) - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `«destructured»` | `Object` | `undefined` | - | -| › `limit?` | `number` | `100` | Number of items to return | -| › `metadataFilter?` | `string` | `"{}"` | JSON object that should be used to filter objects by metadata | -| › `offset?` | `number` | `undefined` | Number of items to skip (sorted created_at descending order) | -| › `order?` | ``"desc"`` \| ``"asc"`` | `"desc"` | Which order should the sort be: `asc` (ascending) or `desc` (descending) | -| › `sortBy?` | ``"created_at"`` \| ``"updated_at"`` | `"created_at"` | Which field to sort by: `created_at` or `updated_at` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items`: [`User`](../modules/api.md#user)[] }\> - -any List of users (sorted created_at descending order) with limit+offset pagination - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:132](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L132) - -___ - -### patchAgent - -▸ **patchAgent**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Patch Agent parameters (merge instead of replace) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `requestBody?` | [`PatchAgentRequest`](../modules/api.md#patchagentrequest) | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:596](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L596) - -___ - -### patchAgentTool - -▸ **patchAgentTool**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Patch Agent tool parameters (merge instead of replace) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `requestBody?` | [`PatchToolRequest`](../modules/api.md#patchtoolrequest) | -| › `toolId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:925](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L925) - -___ - -### patchSession - -▸ **patchSession**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Patch Session parameters (merge instead of replace) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `requestBody?` | [`PatchSessionRequest`](../modules/api.md#patchsessionrequest) | -| › `sessionId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:306](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L306) - -___ - -### patchUser - -▸ **patchUser**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Patch User parameters (merge instead of replace) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `requestBody?` | [`PatchUserRequest`](../modules/api.md#patchuserrequest) | -| › `userId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:520](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L520) - -___ - -### updateAgent - -▸ **updateAgent**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Update agent parameters - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `requestBody?` | [`UpdateAgentRequest`](../modules/api.md#updateagentrequest) | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:574](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L574) - -___ - -### updateAgentTool - -▸ **updateAgentTool**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Update agent tool definition - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `agentId` | `string` | -| › `requestBody?` | [`UpdateToolRequest`](../modules/api.md#updatetoolrequest) | -| › `toolId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:900](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L900) - -___ - -### updateSession - -▸ **updateSession**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Update session parameters - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `requestBody?` | [`UpdateSessionRequest`](../modules/api.md#updatesessionrequest) | -| › `sessionId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:284](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L284) - -___ - -### updateUser - -▸ **updateUser**(`«destructured»`): [`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -Update user parameters - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `«destructured»` | `Object` | -| › `requestBody?` | [`UpdateUserRequest`](../modules/api.md#updateuserrequest) | -| › `userId` | `string` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -ResourceUpdatedResponse - -**`Throws`** - -ApiError - -#### Defined in - -[src/api/services/DefaultService.ts:498](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/services/DefaultService.ts#L498) diff --git a/docs/js-sdk-docs/classes/api_JulepApiClient.JulepApiClient.md b/docs/js-sdk-docs/classes/api_JulepApiClient.JulepApiClient.md deleted file mode 100644 index bb4c4a4a2..000000000 --- a/docs/js-sdk-docs/classes/api_JulepApiClient.JulepApiClient.md +++ /dev/null @@ -1,57 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [api/JulepApiClient](../modules/api_JulepApiClient.md) / JulepApiClient - -# Class: JulepApiClient - -[api/JulepApiClient](../modules/api_JulepApiClient.md).JulepApiClient - -## Table of contents - -### Constructors - -- [constructor](api_JulepApiClient.JulepApiClient.md#constructor) - -### Properties - -- [default](api_JulepApiClient.JulepApiClient.md#default) -- [request](api_JulepApiClient.JulepApiClient.md#request) - -## Constructors - -### constructor - -• **new JulepApiClient**(`config?`, `HttpRequest?`): [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `config?` | `Partial`\<[`OpenAPIConfig`](../modules/api.md#openapiconfig)\> | `undefined` | -| `HttpRequest` | `HttpRequestConstructor` | `AxiosHttpRequest` | - -#### Returns - -[`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -#### Defined in - -[src/api/JulepApiClient.ts:13](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/JulepApiClient.ts#L13) - -## Properties - -### default - -• `Readonly` **default**: [`DefaultService`](api.DefaultService.md) - -#### Defined in - -[src/api/JulepApiClient.ts:11](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/JulepApiClient.ts#L11) - -___ - -### request - -• `Readonly` **request**: [`BaseHttpRequest`](api.BaseHttpRequest.md) - -#### Defined in - -[src/api/JulepApiClient.ts:12](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/JulepApiClient.ts#L12) diff --git a/docs/js-sdk-docs/classes/managers_agent.AgentsManager.md b/docs/js-sdk-docs/classes/managers_agent.AgentsManager.md deleted file mode 100644 index 30235e467..000000000 --- a/docs/js-sdk-docs/classes/managers_agent.AgentsManager.md +++ /dev/null @@ -1,204 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/agent](../modules/managers_agent.md) / AgentsManager - -# Class: AgentsManager - -[managers/agent](../modules/managers_agent.md).AgentsManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- [`BaseManager`](managers_base.BaseManager.md) - - ↳ **`AgentsManager`** - -## Table of contents - -### Constructors - -- [constructor](managers_agent.AgentsManager.md#constructor) - -### Properties - -- [apiClient](managers_agent.AgentsManager.md#apiclient) - -### Methods - -- [create](managers_agent.AgentsManager.md#create) -- [delete](managers_agent.AgentsManager.md#delete) -- [get](managers_agent.AgentsManager.md#get) -- [list](managers_agent.AgentsManager.md#list) -- [update](managers_agent.AgentsManager.md#update) - -## Constructors - -### constructor - -• **new AgentsManager**(`apiClient`): [`AgentsManager`](managers_agent.AgentsManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`AgentsManager`](managers_agent.AgentsManager.md) - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[constructor](managers_base.BaseManager.md#constructor) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[apiClient](managers_base.BaseManager.md#apiclient) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Methods - -### create - -▸ **create**(`options`): `Promise`\<`Partial`\<[`Agent`](../modules/api.md#agent)\> & \{ `id`: `string` }\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.about` | `string` | -| `options.default_settings?` | [`AgentDefaultSettings`](../modules/api.md#agentdefaultsettings) | -| `options.docs?` | [`Doc`](../modules/api.md#doc)[] | -| `options.instructions` | `string` \| `string`[] | -| `options.model?` | `string` | -| `options.name` | `string` | -| `options.tools?` | [`CreateToolRequest`](../modules/api.md#createtoolrequest)[] | - -#### Returns - -`Promise`\<`Partial`\<[`Agent`](../modules/api.md#agent)\> & \{ `id`: `string` }\> - -#### Defined in - -[src/managers/agent.ts:23](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/agent.ts#L23) - -___ - -### delete - -▸ **delete**(`agentId`): `Promise`\<`void`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `agentId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<`void`\> - -#### Defined in - -[src/managers/agent.ts:108](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/agent.ts#L108) - -___ - -### get - -▸ **get**(`agentId`): `Promise`\<[`Agent`](../modules/api.md#agent)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `agentId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<[`Agent`](../modules/api.md#agent)\> - -#### Defined in - -[src/managers/agent.ts:17](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/agent.ts#L17) - -___ - -### list - -▸ **list**(`options?`): `Promise`\<[`Agent`](../modules/api.md#agent)[]\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.metadataFilter?` | `Object` | -| `options.offset?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``0``\> | - -#### Returns - -`Promise`\<[`Agent`](../modules/api.md#agent)[]\> - -#### Defined in - -[src/managers/agent.ts:74](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/agent.ts#L74) - -___ - -### update - -▸ **update**(`agentId`, `request`, `overwrite?`): `Promise`\<`Partial`\<[`Agent`](../modules/api.md#agent)\> & \{ `id`: `string` }\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `agentId` | `string` | -| `request` | [`PatchAgentRequest`](../modules/api.md#patchagentrequest) | -| `overwrite?` | ``false`` | - -#### Returns - -`Promise`\<`Partial`\<[`Agent`](../modules/api.md#agent)\> & \{ `id`: `string` }\> - -#### Defined in - -[src/managers/agent.ts:115](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/agent.ts#L115) - -▸ **update**(`agentId`, `request`, `overwrite`): `Promise`\<`Partial`\<[`Agent`](../modules/api.md#agent)\> & \{ `id`: `string` }\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `agentId` | `string` | -| `request` | [`UpdateAgentRequest`](../modules/api.md#updateagentrequest) | -| `overwrite` | ``true`` | - -#### Returns - -`Promise`\<`Partial`\<[`Agent`](../modules/api.md#agent)\> & \{ `id`: `string` }\> - -#### Defined in - -[src/managers/agent.ts:121](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/agent.ts#L121) diff --git a/docs/js-sdk-docs/classes/managers_base.BaseManager.md b/docs/js-sdk-docs/classes/managers_base.BaseManager.md deleted file mode 100644 index 04ad76162..000000000 --- a/docs/js-sdk-docs/classes/managers_base.BaseManager.md +++ /dev/null @@ -1,68 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/base](../modules/managers_base.md) / BaseManager - -# Class: BaseManager - -[managers/base](../modules/managers_base.md).BaseManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- **`BaseManager`** - - ↳ [`AgentsManager`](managers_agent.AgentsManager.md) - - ↳ [`DocsManager`](managers_doc.DocsManager.md) - - ↳ [`MemoriesManager`](managers_memory.MemoriesManager.md) - - ↳ [`SessionsManager`](managers_session.SessionsManager.md) - - ↳ [`ToolsManager`](managers_tool.ToolsManager.md) - - ↳ [`UsersManager`](managers_user.UsersManager.md) - -## Table of contents - -### Constructors - -- [constructor](managers_base.BaseManager.md#constructor) - -### Properties - -- [apiClient](managers_base.BaseManager.md#apiclient) - -## Constructors - -### constructor - -• **new BaseManager**(`apiClient`): [`BaseManager`](managers_base.BaseManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`BaseManager`](managers_base.BaseManager.md) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) diff --git a/docs/js-sdk-docs/classes/managers_doc.DocsManager.md b/docs/js-sdk-docs/classes/managers_doc.DocsManager.md deleted file mode 100644 index 02bcf2f15..000000000 --- a/docs/js-sdk-docs/classes/managers_doc.DocsManager.md +++ /dev/null @@ -1,209 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/doc](../modules/managers_doc.md) / DocsManager - -# Class: DocsManager - -[managers/doc](../modules/managers_doc.md).DocsManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- [`BaseManager`](managers_base.BaseManager.md) - - ↳ **`DocsManager`** - -## Table of contents - -### Constructors - -- [constructor](managers_doc.DocsManager.md#constructor) - -### Properties - -- [apiClient](managers_doc.DocsManager.md#apiclient) - -### Methods - -- [create](managers_doc.DocsManager.md#create) -- [delete](managers_doc.DocsManager.md#delete) -- [get](managers_doc.DocsManager.md#get) -- [list](managers_doc.DocsManager.md#list) - -## Constructors - -### constructor - -• **new DocsManager**(`apiClient`): [`DocsManager`](managers_doc.DocsManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`DocsManager`](managers_doc.DocsManager.md) - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[constructor](managers_base.BaseManager.md#constructor) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[apiClient](managers_base.BaseManager.md#apiclient) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Methods - -### create - -▸ **create**(`options`): `Promise`\<[`Doc`](../modules/api.md#doc)\> - -Creates a document based on the provided agentId or userId. -Ensures that only one of agentId or userId is provided using xor function. -Validates the provided agentId or userId using isValidUuid4. - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId?` | `string` & `Format`\<``"uuid"``\> | -| `options.doc` | [`CreateDoc`](../modules/api.md#createdoc) | -| `options.userId?` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<[`Doc`](../modules/api.md#doc)\> - -The created document. - -**`Throws`** - -If neither agentId nor userId is provided. - -#### Defined in - -[src/managers/doc.ts:162](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/doc.ts#L162) - -___ - -### delete - -▸ **delete**(`options`): `Promise`\<`void`\> - -Deletes a document based on the provided agentId or userId and the specific docId. -Ensures that only one of agentId or userId is provided using xor function. -Validates the provided agentId or userId using isValidUuid4. - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId?` | `string` & `Format`\<``"uuid"``\> | -| `options.docId` | `string` | -| `options.userId?` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<`void`\> - -A promise that resolves when the document is successfully deleted. - -**`Throws`** - -If neither agentId nor userId is provided. - -#### Defined in - -[src/managers/doc.ts:214](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/doc.ts#L214) - -___ - -### get - -▸ **get**(`options?`): `Promise`\<[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\> \| [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\>\> - -Retrieves documents based on the provided agentId or userId. -Ensures that only one of agentId or userId is provided using xor function. -Validates the provided agentId or userId using isValidUuid4. - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId?` | `string` & `Format`\<``"uuid"``\> | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.offset?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``0``\> | -| `options.userId?` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<[`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\> \| [`CancelablePromise`](api.CancelablePromise.md)\<\{ `items?`: [`Doc`](../modules/api.md#doc)[] }\>\> - -The retrieved documents. - -**`Throws`** - -If neither agentId nor userId is provided. - -#### Defined in - -[src/managers/doc.ts:23](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/doc.ts#L23) - -___ - -### list - -▸ **list**(`options?`): `Promise`\<[`Doc`](../modules/api.md#doc)[]\> - -Lists documents based on the provided agentId or userId, with optional metadata filtering. -Ensures that only one of agentId or userId is provided using xor function. -Validates the provided agentId or userId using isValidUuid4. -Allows for filtering based on metadata. - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId?` | `string` & `Format`\<``"uuid"``\> | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.metadataFilter?` | `Object` | -| `options.offset?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``0``\> | -| `options.userId?` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<[`Doc`](../modules/api.md#doc)[]\> - -The list of filtered documents. - -**`Throws`** - -If neither agentId nor userId is provided. - -#### Defined in - -[src/managers/doc.ts:90](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/doc.ts#L90) diff --git a/docs/js-sdk-docs/classes/managers_memory.MemoriesManager.md b/docs/js-sdk-docs/classes/managers_memory.MemoriesManager.md deleted file mode 100644 index 791c80f80..000000000 --- a/docs/js-sdk-docs/classes/managers_memory.MemoriesManager.md +++ /dev/null @@ -1,99 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/memory](../modules/managers_memory.md) / MemoriesManager - -# Class: MemoriesManager - -[managers/memory](../modules/managers_memory.md).MemoriesManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- [`BaseManager`](managers_base.BaseManager.md) - - ↳ **`MemoriesManager`** - -## Table of contents - -### Constructors - -- [constructor](managers_memory.MemoriesManager.md#constructor) - -### Properties - -- [apiClient](managers_memory.MemoriesManager.md#apiclient) - -### Methods - -- [list](managers_memory.MemoriesManager.md#list) - -## Constructors - -### constructor - -• **new MemoriesManager**(`apiClient`): [`MemoriesManager`](managers_memory.MemoriesManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`MemoriesManager`](managers_memory.MemoriesManager.md) - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[constructor](managers_base.BaseManager.md#constructor) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[apiClient](managers_base.BaseManager.md#apiclient) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Methods - -### list - -▸ **list**(`options`): `Promise`\<[`Memory`](../modules/api.md#memory)[]\> - -Lists memories based on the provided parameters. - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId` | `string` & `Format`\<``"uuid"``\> | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.offset?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``0``\> | -| `options.query` | `string` | -| `options.userId?` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<[`Memory`](../modules/api.md#memory)[]\> - -A promise that resolves to an array of Memory objects. - -#### Defined in - -[src/managers/memory.ts:21](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/memory.ts#L21) diff --git a/docs/js-sdk-docs/classes/managers_session.SessionsManager.md b/docs/js-sdk-docs/classes/managers_session.SessionsManager.md deleted file mode 100644 index 7bcfdddae..000000000 --- a/docs/js-sdk-docs/classes/managers_session.SessionsManager.md +++ /dev/null @@ -1,278 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/session](../modules/managers_session.md) / SessionsManager - -# Class: SessionsManager - -[managers/session](../modules/managers_session.md).SessionsManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- [`BaseManager`](managers_base.BaseManager.md) - - ↳ **`SessionsManager`** - -## Table of contents - -### Constructors - -- [constructor](managers_session.SessionsManager.md#constructor) - -### Properties - -- [apiClient](managers_session.SessionsManager.md#apiclient) - -### Methods - -- [chat](managers_session.SessionsManager.md#chat) -- [create](managers_session.SessionsManager.md#create) -- [delete](managers_session.SessionsManager.md#delete) -- [deleteHistory](managers_session.SessionsManager.md#deletehistory) -- [get](managers_session.SessionsManager.md#get) -- [history](managers_session.SessionsManager.md#history) -- [list](managers_session.SessionsManager.md#list) -- [suggestions](managers_session.SessionsManager.md#suggestions) -- [update](managers_session.SessionsManager.md#update) - -## Constructors - -### constructor - -• **new SessionsManager**(`apiClient`): [`SessionsManager`](managers_session.SessionsManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`SessionsManager`](managers_session.SessionsManager.md) - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[constructor](managers_base.BaseManager.md#constructor) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[apiClient](managers_base.BaseManager.md#apiclient) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Methods - -### chat - -▸ **chat**(`sessionId`, `input`): `Promise`\<[`ChatResponse`](../modules/api.md#chatresponse)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | -| `input` | [`ChatInput`](../modules/api.md#chatinput) | - -#### Returns - -`Promise`\<[`ChatResponse`](../modules/api.md#chatresponse)\> - -#### Defined in - -[src/managers/session.ts:161](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L161) - -___ - -### create - -▸ **create**(`payload`): `Promise`\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `payload` | [`CreateSessionPayload`](../interfaces/managers_session.CreateSessionPayload.md) | - -#### Returns - -`Promise`\<[`ResourceCreatedResponse`](../modules/api.md#resourcecreatedresponse)\> - -#### Defined in - -[src/managers/session.ts:39](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L39) - -___ - -### delete - -▸ **delete**(`sessionId`): `Promise`\<`void`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<`void`\> - -#### Defined in - -[src/managers/session.ts:109](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L109) - -___ - -### deleteHistory - -▸ **deleteHistory**(`sessionId`): `Promise`\<`void`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<`void`\> - -#### Defined in - -[src/managers/session.ts:263](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L263) - -___ - -### get - -▸ **get**(`sessionId`): `Promise`\<[`Session`](../modules/api.md#session)\> - -Retrieves a session by its ID. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | The unique identifier of the session. | - -#### Returns - -`Promise`\<[`Session`](../modules/api.md#session)\> - -A promise that resolves with the session object. - -#### Defined in - -[src/managers/session.ts:33](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L33) - -___ - -### history - -▸ **history**(`sessionId`, `options?`): `Promise`\<[`ChatMLMessage`](../modules/api.md#chatmlmessage)[]\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | -| `options` | `Object` | -| `options.limit?` | `number` & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.offset?` | `number` & `Minimum`\<``0``\> | - -#### Returns - -`Promise`\<[`ChatMLMessage`](../modules/api.md#chatmlmessage)[]\> - -#### Defined in - -[src/managers/session.ts:240](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L240) - -___ - -### list - -▸ **list**(`options?`): `Promise`\<[`Session`](../modules/api.md#session)[]\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.metadataFilter?` | `Object` | -| `options.offset?` | `number` & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | - -#### Returns - -`Promise`\<[`Session`](../modules/api.md#session)[]\> - -#### Defined in - -[src/managers/session.ts:75](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L75) - -___ - -### suggestions - -▸ **suggestions**(`sessionId`, `options?`): `Promise`\<[`Suggestion`](../modules/api.md#suggestion)[]\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | -| `options` | `Object` | -| `options.limit?` | `number` & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.offset?` | `number` & `Minimum`\<``0``\> | - -#### Returns - -`Promise`\<[`Suggestion`](../modules/api.md#suggestion)[]\> - -#### Defined in - -[src/managers/session.ts:217](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L217) - -___ - -### update - -▸ **update**(`sessionId`, `options`, `overwrite?`): `Promise`\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `sessionId` | `string` & `Format`\<``"uuid"``\> | `undefined` | -| `options` | `Object` | `undefined` | -| `options.contextOverflow?` | ``"truncate"`` \| ``"adaptive"`` | `undefined` | -| `options.metadata?` | `Record`\<`string`, `any`\> | `undefined` | -| `options.situation` | `string` | `undefined` | -| `options.tokenBudget?` | `number` & `Minimum`\<``1``\> | `undefined` | -| `overwrite` | `boolean` | `false` | - -#### Returns - -`Promise`\<[`ResourceUpdatedResponse`](../modules/api.md#resourceupdatedresponse)\> - -#### Defined in - -[src/managers/session.ts:115](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L115) diff --git a/docs/js-sdk-docs/classes/managers_tool.ToolsManager.md b/docs/js-sdk-docs/classes/managers_tool.ToolsManager.md deleted file mode 100644 index ad37b7eed..000000000 --- a/docs/js-sdk-docs/classes/managers_tool.ToolsManager.md +++ /dev/null @@ -1,166 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/tool](../modules/managers_tool.md) / ToolsManager - -# Class: ToolsManager - -[managers/tool](../modules/managers_tool.md).ToolsManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- [`BaseManager`](managers_base.BaseManager.md) - - ↳ **`ToolsManager`** - -## Table of contents - -### Constructors - -- [constructor](managers_tool.ToolsManager.md#constructor) - -### Properties - -- [apiClient](managers_tool.ToolsManager.md#apiclient) - -### Methods - -- [create](managers_tool.ToolsManager.md#create) -- [delete](managers_tool.ToolsManager.md#delete) -- [list](managers_tool.ToolsManager.md#list) -- [update](managers_tool.ToolsManager.md#update) - -## Constructors - -### constructor - -• **new ToolsManager**(`apiClient`): [`ToolsManager`](managers_tool.ToolsManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`ToolsManager`](managers_tool.ToolsManager.md) - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[constructor](managers_base.BaseManager.md#constructor) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[apiClient](managers_base.BaseManager.md#apiclient) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Methods - -### create - -▸ **create**(`options`): `Promise`\<[`Tool`](../modules/api.md#tool)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId` | `string` & `Format`\<``"uuid"``\> | -| `options.tool` | `Object` | -| `options.tool.function` | [`FunctionDef`](../modules/api.md#functiondef) | -| `options.tool.type` | ``"function"`` \| ``"webhook"`` | - -#### Returns - -`Promise`\<[`Tool`](../modules/api.md#tool)\> - -#### Defined in - -[src/managers/tool.ts:44](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/tool.ts#L44) - -___ - -### delete - -▸ **delete**(`options`): `Promise`\<`void`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.agentId` | `string` & `Format`\<``"uuid"``\> | -| `options.toolId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<`void`\> - -#### Defined in - -[src/managers/tool.ts:105](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/tool.ts#L105) - -___ - -### list - -▸ **list**(`agentId`, `options?`): `Promise`\<[`Tool`](../modules/api.md#tool)[]\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `agentId` | `string` & `Format`\<``"uuid"``\> | -| `options` | `Object` | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.offset?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``0``\> | - -#### Returns - -`Promise`\<[`Tool`](../modules/api.md#tool)[]\> - -#### Defined in - -[src/managers/tool.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/tool.ts#L14) - -___ - -### update - -▸ **update**(`options`, `overwrite?`): `Promise`\<[`Tool`](../modules/api.md#tool)\> - -#### Parameters - -| Name | Type | Default value | -| :------ | :------ | :------ | -| `options` | `Object` | `undefined` | -| `options.agentId` | `string` & `Format`\<``"uuid"``\> | `undefined` | -| `options.tool` | [`UpdateToolRequest`](../modules/api.md#updatetoolrequest) | `undefined` | -| `options.toolId` | `string` & `Format`\<``"uuid"``\> | `undefined` | -| `overwrite` | `boolean` | `false` | - -#### Returns - -`Promise`\<[`Tool`](../modules/api.md#tool)\> - -#### Defined in - -[src/managers/tool.ts:71](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/tool.ts#L71) diff --git a/docs/js-sdk-docs/classes/managers_user.UsersManager.md b/docs/js-sdk-docs/classes/managers_user.UsersManager.md deleted file mode 100644 index e88f66893..000000000 --- a/docs/js-sdk-docs/classes/managers_user.UsersManager.md +++ /dev/null @@ -1,197 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/user](../modules/managers_user.md) / UsersManager - -# Class: UsersManager - -[managers/user](../modules/managers_user.md).UsersManager - -BaseManager serves as the base class for all manager classes that interact with the Julep API. -It provides common functionality needed for API interactions. - -## Hierarchy - -- [`BaseManager`](managers_base.BaseManager.md) - - ↳ **`UsersManager`** - -## Table of contents - -### Constructors - -- [constructor](managers_user.UsersManager.md#constructor) - -### Properties - -- [apiClient](managers_user.UsersManager.md#apiclient) - -### Methods - -- [create](managers_user.UsersManager.md#create) -- [delete](managers_user.UsersManager.md#delete) -- [get](managers_user.UsersManager.md#get) -- [list](managers_user.UsersManager.md#list) -- [update](managers_user.UsersManager.md#update) - -## Constructors - -### constructor - -• **new UsersManager**(`apiClient`): [`UsersManager`](managers_user.UsersManager.md) - -Constructs a new instance of BaseManager. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `apiClient` | [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) | The JulepApiClient instance used for API interactions. | - -#### Returns - -[`UsersManager`](managers_user.UsersManager.md) - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[constructor](managers_base.BaseManager.md#constructor) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Properties - -### apiClient - -• **apiClient**: [`JulepApiClient`](api_JulepApiClient.JulepApiClient.md) - -The JulepApiClient instance used for API interactions. - -#### Inherited from - -[BaseManager](managers_base.BaseManager.md).[apiClient](managers_base.BaseManager.md#apiclient) - -#### Defined in - -[src/managers/base.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/base.ts#L14) - -## Methods - -### create - -▸ **create**(`options?`): `Promise`\<[`User`](../modules/api.md#user)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | [`CreateUserRequest`](../modules/api.md#createuserrequest) | - -#### Returns - -`Promise`\<[`User`](../modules/api.md#user)\> - -#### Defined in - -[src/managers/user.ts:22](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/user.ts#L22) - -___ - -### delete - -▸ **delete**(`userId`): `Promise`\<`void`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `userId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<`void`\> - -#### Defined in - -[src/managers/user.ts:70](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/user.ts#L70) - -___ - -### get - -▸ **get**(`userId`): `Promise`\<[`User`](../modules/api.md#user)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `userId` | `string` & `Format`\<``"uuid"``\> | - -#### Returns - -`Promise`\<[`User`](../modules/api.md#user)\> - -#### Defined in - -[src/managers/user.ts:14](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/user.ts#L14) - -___ - -### list - -▸ **list**(`options?`): `Promise`\<[`User`](../modules/api.md#user)[]\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `Object` | -| `options.limit?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``1``\> & `Maximum`\<``1000``\> | -| `options.metadataFilter?` | `Object` | -| `options.offset?` | `number` & `Type`\<``"uint32"``\> & `Minimum`\<``0``\> | - -#### Returns - -`Promise`\<[`User`](../modules/api.md#user)[]\> - -#### Defined in - -[src/managers/user.ts:37](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/user.ts#L37) - -___ - -### update - -▸ **update**(`userId`, `request`, `overwrite`): `Promise`\<[`User`](../modules/api.md#user)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `userId` | `string` | -| `request` | [`UpdateUserRequest`](../modules/api.md#updateuserrequest) | -| `overwrite` | ``true`` | - -#### Returns - -`Promise`\<[`User`](../modules/api.md#user)\> - -#### Defined in - -[src/managers/user.ts:76](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/user.ts#L76) - -▸ **update**(`userId`, `request`, `overwrite?`): `Promise`\<[`User`](../modules/api.md#user)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `userId` | `string` | -| `request` | [`PatchUserRequest`](../modules/api.md#patchuserrequest) | -| `overwrite?` | ``false`` | - -#### Returns - -`Promise`\<[`User`](../modules/api.md#user)\> - -#### Defined in - -[src/managers/user.ts:82](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/user.ts#L82) diff --git a/docs/js-sdk-docs/classes/utils_requestConstructor.CustomHttpRequest.md b/docs/js-sdk-docs/classes/utils_requestConstructor.CustomHttpRequest.md deleted file mode 100644 index 164a230bc..000000000 --- a/docs/js-sdk-docs/classes/utils_requestConstructor.CustomHttpRequest.md +++ /dev/null @@ -1,93 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [utils/requestConstructor](../modules/utils_requestConstructor.md) / CustomHttpRequest - -# Class: CustomHttpRequest - -[utils/requestConstructor](../modules/utils_requestConstructor.md).CustomHttpRequest - -## Hierarchy - -- `AxiosHttpRequest` - - ↳ **`CustomHttpRequest`** - -## Table of contents - -### Constructors - -- [constructor](utils_requestConstructor.CustomHttpRequest.md#constructor) - -### Properties - -- [config](utils_requestConstructor.CustomHttpRequest.md#config) - -### Methods - -- [request](utils_requestConstructor.CustomHttpRequest.md#request) - -## Constructors - -### constructor - -• **new CustomHttpRequest**(`config`): [`CustomHttpRequest`](utils_requestConstructor.CustomHttpRequest.md) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `config` | [`OpenAPIConfig`](../modules/api.md#openapiconfig) | - -#### Returns - -[`CustomHttpRequest`](utils_requestConstructor.CustomHttpRequest.md) - -#### Overrides - -AxiosHttpRequest.constructor - -#### Defined in - -[src/utils/requestConstructor.ts:15](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/utils/requestConstructor.ts#L15) - -## Properties - -### config - -• `Readonly` **config**: [`OpenAPIConfig`](../modules/api.md#openapiconfig) - -#### Inherited from - -AxiosHttpRequest.config - -#### Defined in - -[src/api/core/BaseHttpRequest.ts:10](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/BaseHttpRequest.ts#L10) - -## Methods - -### request - -▸ **request**\<`T`\>(`options`): [`CancelablePromise`](api.CancelablePromise.md)\<`T`\> - -#### Type parameters - -| Name | -| :------ | -| `T` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `options` | `ApiRequestOptions` | - -#### Returns - -[`CancelablePromise`](api.CancelablePromise.md)\<`T`\> - -#### Overrides - -AxiosHttpRequest.request - -#### Defined in - -[src/utils/requestConstructor.ts:21](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/utils/requestConstructor.ts#L21) diff --git a/docs/js-sdk-docs/interfaces/managers_session.CreateSessionPayload.md b/docs/js-sdk-docs/interfaces/managers_session.CreateSessionPayload.md deleted file mode 100644 index 548bb5b2e..000000000 --- a/docs/js-sdk-docs/interfaces/managers_session.CreateSessionPayload.md +++ /dev/null @@ -1,87 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / [managers/session](../modules/managers_session.md) / CreateSessionPayload - -# Interface: CreateSessionPayload - -[managers/session](../modules/managers_session.md).CreateSessionPayload - -## Table of contents - -### Properties - -- [agentId](managers_session.CreateSessionPayload.md#agentid) -- [contextOverflow](managers_session.CreateSessionPayload.md#contextoverflow) -- [metadata](managers_session.CreateSessionPayload.md#metadata) -- [renderTemplates](managers_session.CreateSessionPayload.md#rendertemplates) -- [situation](managers_session.CreateSessionPayload.md#situation) -- [tokenBudget](managers_session.CreateSessionPayload.md#tokenbudget) -- [userId](managers_session.CreateSessionPayload.md#userid) - -## Properties - -### agentId - -• **agentId**: `string` - -#### Defined in - -[src/managers/session.ts:17](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L17) - -___ - -### contextOverflow - -• `Optional` **contextOverflow**: ``"truncate"`` \| ``"adaptive"`` - -#### Defined in - -[src/managers/session.ts:24](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L24) - -___ - -### metadata - -• `Optional` **metadata**: `Record`\<`string`, `any`\> - -#### Defined in - -[src/managers/session.ts:19](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L19) - -___ - -### renderTemplates - -• `Optional` **renderTemplates**: `boolean` - -#### Defined in - -[src/managers/session.ts:20](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L20) - -___ - -### situation - -• `Optional` **situation**: `string` - -#### Defined in - -[src/managers/session.ts:18](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L18) - -___ - -### tokenBudget - -• `Optional` **tokenBudget**: `number` - -#### Defined in - -[src/managers/session.ts:21](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L21) - -___ - -### userId - -• `Optional` **userId**: `string` - -#### Defined in - -[src/managers/session.ts:16](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/managers/session.ts#L16) diff --git a/docs/js-sdk-docs/modules.md b/docs/js-sdk-docs/modules.md deleted file mode 100644 index ec445aa16..000000000 --- a/docs/js-sdk-docs/modules.md +++ /dev/null @@ -1,22 +0,0 @@ -[@julep/sdk](README.md) / Modules - -# @julep/sdk - -## Table of contents - -### Modules - -- [api](modules/api.md) -- [api/JulepApiClient](modules/api_JulepApiClient.md) -- [managers/agent](modules/managers_agent.md) -- [managers/base](modules/managers_base.md) -- [managers/doc](modules/managers_doc.md) -- [managers/memory](modules/managers_memory.md) -- [managers/session](modules/managers_session.md) -- [managers/tool](modules/managers_tool.md) -- [managers/user](modules/managers_user.md) -- [utils/invariant](modules/utils_invariant.md) -- [utils/isValidUuid4](modules/utils_isValidUuid4.md) -- [utils/openaiPatch](modules/utils_openaiPatch.md) -- [utils/requestConstructor](modules/utils_requestConstructor.md) -- [utils/xor](modules/utils_xor.md) diff --git a/docs/js-sdk-docs/modules/api.md b/docs/js-sdk-docs/modules/api.md deleted file mode 100644 index bc4a9e82b..000000000 --- a/docs/js-sdk-docs/modules/api.md +++ /dev/null @@ -1,2623 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / api - -# Module: api - -## Table of contents - -### References - -- [JulepApiClient](api.md#julepapiclient) - -### Classes - -- [ApiError](../classes/api.ApiError.md) -- [BaseHttpRequest](../classes/api.BaseHttpRequest.md) -- [CancelError](../classes/api.CancelError.md) -- [CancelablePromise](../classes/api.CancelablePromise.md) -- [DefaultService](../classes/api.DefaultService.md) - -### Type Aliases - -- [Agent](api.md#agent) -- [AgentDefaultSettings](api.md#agentdefaultsettings) -- [ChatInput](api.md#chatinput) -- [ChatInputData](api.md#chatinputdata) -- [ChatMLImageContentPart](api.md#chatmlimagecontentpart) -- [ChatMLMessage](api.md#chatmlmessage) -- [ChatMLTextContentPart](api.md#chatmltextcontentpart) -- [ChatResponse](api.md#chatresponse) -- [ChatSettings](api.md#chatsettings) -- [CompletionUsage](api.md#completionusage) -- [CreateAgentRequest](api.md#createagentrequest) -- [CreateDoc](api.md#createdoc) -- [CreateSessionRequest](api.md#createsessionrequest) -- [CreateToolRequest](api.md#createtoolrequest) -- [CreateUserRequest](api.md#createuserrequest) -- [Doc](api.md#doc) -- [DocIds](api.md#docids) -- [FunctionCallOption](api.md#functioncalloption) -- [FunctionDef](api.md#functiondef) -- [FunctionParameters](api.md#functionparameters) -- [InputChatMLMessage](api.md#inputchatmlmessage) -- [JobStatus](api.md#jobstatus) -- [Memory](api.md#memory) -- [MemoryAccessOptions](api.md#memoryaccessoptions) -- [NamedToolChoice](api.md#namedtoolchoice) -- [OpenAPIConfig](api.md#openapiconfig) -- [PartialFunctionDef](api.md#partialfunctiondef) -- [PatchAgentRequest](api.md#patchagentrequest) -- [PatchSessionRequest](api.md#patchsessionrequest) -- [PatchToolRequest](api.md#patchtoolrequest) -- [PatchUserRequest](api.md#patchuserrequest) -- [ResourceCreatedResponse](api.md#resourcecreatedresponse) -- [ResourceDeletedResponse](api.md#resourcedeletedresponse) -- [ResourceUpdatedResponse](api.md#resourceupdatedresponse) -- [Session](api.md#session) -- [Suggestion](api.md#suggestion) -- [Tool](api.md#tool) -- [ToolChoiceOption](api.md#toolchoiceoption) -- [UpdateAgentRequest](api.md#updateagentrequest) -- [UpdateSessionRequest](api.md#updatesessionrequest) -- [UpdateToolRequest](api.md#updatetoolrequest) -- [UpdateUserRequest](api.md#updateuserrequest) -- [User](api.md#user) -- [agent\_id](api.md#agent_id) -- [doc\_id](api.md#doc_id) -- [job\_id](api.md#job_id) -- [memory\_id](api.md#memory_id) -- [message\_id](api.md#message_id) -- [session\_id](api.md#session_id) -- [tool\_id](api.md#tool_id) -- [user\_id](api.md#user_id) - -### Variables - -- [$Agent](api.md#$agent) -- [$AgentDefaultSettings](api.md#$agentdefaultsettings) -- [$ChatInput](api.md#$chatinput) -- [$ChatInputData](api.md#$chatinputdata) -- [$ChatMLImageContentPart](api.md#$chatmlimagecontentpart) -- [$ChatMLMessage](api.md#$chatmlmessage) -- [$ChatMLTextContentPart](api.md#$chatmltextcontentpart) -- [$ChatResponse](api.md#$chatresponse) -- [$ChatSettings](api.md#$chatsettings) -- [$CompletionUsage](api.md#$completionusage) -- [$CreateAgentRequest](api.md#$createagentrequest) -- [$CreateDoc](api.md#$createdoc) -- [$CreateSessionRequest](api.md#$createsessionrequest) -- [$CreateToolRequest](api.md#$createtoolrequest) -- [$CreateUserRequest](api.md#$createuserrequest) -- [$Doc](api.md#$doc) -- [$DocIds](api.md#$docids) -- [$FunctionCallOption](api.md#$functioncalloption) -- [$FunctionDef](api.md#$functiondef) -- [$FunctionParameters](api.md#$functionparameters) -- [$InputChatMLMessage](api.md#$inputchatmlmessage) -- [$JobStatus](api.md#$jobstatus) -- [$Memory](api.md#$memory) -- [$MemoryAccessOptions](api.md#$memoryaccessoptions) -- [$NamedToolChoice](api.md#$namedtoolchoice) -- [$PartialFunctionDef](api.md#$partialfunctiondef) -- [$PatchAgentRequest](api.md#$patchagentrequest) -- [$PatchSessionRequest](api.md#$patchsessionrequest) -- [$PatchToolRequest](api.md#$patchtoolrequest) -- [$PatchUserRequest](api.md#$patchuserrequest) -- [$ResourceCreatedResponse](api.md#$resourcecreatedresponse) -- [$ResourceDeletedResponse](api.md#$resourcedeletedresponse) -- [$ResourceUpdatedResponse](api.md#$resourceupdatedresponse) -- [$Session](api.md#$session) -- [$Suggestion](api.md#$suggestion) -- [$Tool](api.md#$tool) -- [$ToolChoiceOption](api.md#$toolchoiceoption) -- [$UpdateAgentRequest](api.md#$updateagentrequest) -- [$UpdateSessionRequest](api.md#$updatesessionrequest) -- [$UpdateToolRequest](api.md#$updatetoolrequest) -- [$UpdateUserRequest](api.md#$updateuserrequest) -- [$User](api.md#$user) -- [$agent\_id](api.md#$agent_id) -- [$doc\_id](api.md#$doc_id) -- [$job\_id](api.md#$job_id) -- [$memory\_id](api.md#$memory_id) -- [$message\_id](api.md#$message_id) -- [$session\_id](api.md#$session_id) -- [$tool\_id](api.md#$tool_id) -- [$user\_id](api.md#$user_id) -- [OpenAPI](api.md#openapi) - -## References - -### JulepApiClient - -Re-exports [JulepApiClient](../classes/api_JulepApiClient.JulepApiClient.md) - -## Type Aliases - -### Agent - -Ƭ **Agent**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about?` | `string` | About the agent | -| `created_at?` | `string` | Agent created at (RFC-3339 format) | -| `default_settings?` | [`AgentDefaultSettings`](api.md#agentdefaultsettings) | Default settings for all sessions created by this agent | -| `id` | `string` | Agent id (UUID) | -| `instructions?` | `string` \| `string`[] | Instructions for the agent | -| `metadata?` | `any` | Optional metadata | -| `model` | `string` | The model to use with this agent | -| `name` | `string` | Name of the agent | -| `updated_at?` | `string` | Agent updated at (RFC-3339 format) | - -#### Defined in - -[src/api/models/Agent.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/Agent.ts#L6) - -___ - -### AgentDefaultSettings - -Ƭ **AgentDefaultSettings**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `frequency_penalty?` | `number` \| ``null`` | (OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | -| `length_penalty?` | `number` \| ``null`` | (Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. | -| `min_p?` | `number` | Minimum probability compared to leading token to be considered | -| `presence_penalty?` | `number` \| ``null`` | (OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | -| `preset?` | ``"problem_solving"`` \| ``"conversational"`` \| ``"fun"`` \| ``"prose"`` \| ``"creative"`` \| ``"business"`` \| ``"deterministic"`` \| ``"code"`` \| ``"multilingual"`` | Generation preset name (one of: problem_solving, conversational, fun, prose, creative, business, deterministic, code, multilingual) | -| `repetition_penalty?` | `number` \| ``null`` | (Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | -| `temperature?` | `number` \| ``null`` | What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. | -| `top_p?` | `number` \| ``null`` | Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. | - -#### Defined in - -[src/api/models/AgentDefaultSettings.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/AgentDefaultSettings.ts#L5) - -___ - -### ChatInput - -Ƭ **ChatInput**: [`ChatInputData`](api.md#chatinputdata) & [`ChatSettings`](api.md#chatsettings) & [`MemoryAccessOptions`](api.md#memoryaccessoptions) - -#### Defined in - -[src/api/models/ChatInput.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatInput.ts#L8) - -___ - -### ChatInputData - -Ƭ **ChatInputData**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `messages` | [`InputChatMLMessage`](api.md#inputchatmlmessage)[] | A list of new input messages comprising the conversation so far. | -| `tool_choice?` | [`ToolChoiceOption`](api.md#toolchoiceoption) \| [`NamedToolChoice`](api.md#namedtoolchoice) \| ``null`` | Can be one of existing tools given to the agent earlier or the ones included in the request | -| `tools?` | [`Tool`](api.md#tool)[] \| ``null`` | (Advanced) List of tools that are provided in addition to agent's default set of tools. Functions of same name in agent set are overridden | - -#### Defined in - -[src/api/models/ChatInputData.ts:9](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatInputData.ts#L9) - -___ - -### ChatMLImageContentPart - -Ƭ **ChatMLImageContentPart**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `image_url` | \{ `detail?`: ``"low"`` \| ``"high"`` \| ``"auto"`` ; `url`: `string` } | Image content part, can be a URL or a base64-encoded image | -| `image_url.detail?` | ``"low"`` \| ``"high"`` \| ``"auto"`` | image detail to feed into the model can be low \| high \| auto | -| `image_url.url` | `string` | URL or base64 data url (e.g. `data:image/jpeg;base64,`) | -| `type` | ``"image_url"`` | Fixed to 'image_url' | - -#### Defined in - -[src/api/models/ChatMLImageContentPart.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatMLImageContentPart.ts#L5) - -___ - -### ChatMLMessage - -Ƭ **ChatMLMessage**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `content` | `string` | ChatML content | -| `created_at` | `string` | Message created at (RFC-3339 format) | -| `id` | `string` | Message ID | -| `name?` | `string` | ChatML name | -| `role` | ``"user"`` \| ``"assistant"`` \| ``"system"`` \| ``"function_call"`` \| ``"function"`` | ChatML role (system\|assistant\|user\|function_call\|function) | - -#### Defined in - -[src/api/models/ChatMLMessage.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatMLMessage.ts#L5) - -___ - -### ChatMLTextContentPart - -Ƭ **ChatMLTextContentPart**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `text` | `string` | Text content part | -| `type` | ``"text"`` | Fixed to 'text' | - -#### Defined in - -[src/api/models/ChatMLTextContentPart.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatMLTextContentPart.ts#L5) - -___ - -### ChatResponse - -Ƭ **ChatResponse**: `Object` - -Represents a chat completion response returned by model, based on the provided input. - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `doc_ids` | [`DocIds`](api.md#docids) | - | -| `finish_reason` | ``"stop"`` \| ``"length"`` \| ``"tool_calls"`` \| ``"content_filter"`` \| ``"function_call"`` | The reason the model stopped generating tokens. This will be `stop` if the model hit a natural stop point or a provided stop sequence, `length` if the maximum number of tokens specified in the request was reached, `content_filter` if content was omitted due to a flag from our content filters, `tool_calls` if the model called a tool, or `function_call` (deprecated) if the model called a function. | -| `id` | `string` | A unique identifier for the chat completion. | -| `jobs?` | `string`[] | IDs (if any) of jobs created as part of this request | -| `response` | [`ChatMLMessage`](api.md#chatmlmessage)[][] | A list of chat completion messages produced as a response. | -| `usage` | [`CompletionUsage`](api.md#completionusage) | - | - -#### Defined in - -[src/api/models/ChatResponse.ts:11](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatResponse.ts#L11) - -___ - -### ChatSettings - -Ƭ **ChatSettings**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `frequency_penalty?` | `number` \| ``null`` | (OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | -| `length_penalty?` | `number` \| ``null`` | (Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. | -| `logit_bias?` | `Record`\<`string`, `number`\> \| ``null`` | Modify the likelihood of specified tokens appearing in the completion. Accepts a JSON object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token. | -| `max_tokens?` | `number` \| ``null`` | The maximum number of tokens to generate in the chat completion. The total length of input tokens and generated tokens is limited by the model's context length. | -| `min_p?` | `number` | Minimum probability compared to leading token to be considered | -| `presence_penalty?` | `number` \| ``null`` | (OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | -| `preset?` | ``"problem_solving"`` \| ``"conversational"`` \| ``"fun"`` \| ``"prose"`` \| ``"creative"`` \| ``"business"`` \| ``"deterministic"`` \| ``"code"`` \| ``"multilingual"`` | Generation preset name (problem_solving\|conversational\|fun\|prose\|creative\|business\|deterministic\|code\|multilingual) | -| `repetition_penalty?` | `number` \| ``null`` | (Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. | -| `response_format?` | \{ `pattern?`: `string` ; `schema?`: `any` ; `type?`: ``"text"`` \| ``"json_object"`` \| ``"regex"`` } | An object specifying the format that the model must output. Setting to `{ "type": "json_object" }` enables JSON mode, which guarantees the message the model generates is valid JSON. **Important:** when using JSON mode, you **must** also instruct the model to produce JSON yourself via a system or user message. Without this, the model may generate an unending stream of whitespace until the generation reaches the token limit, resulting in a long-running and seemingly "stuck" request. Also note that the message content may be partially cut off if `finish_reason="length"`, which indicates the generation exceeded `max_tokens` or the conversation exceeded the max context length. | -| `response_format.pattern?` | `string` | Regular expression pattern to use if `type` is `"regex"` | -| `response_format.schema?` | `any` | JSON Schema to use if `type` is `"json_object"` | -| `response_format.type?` | ``"text"`` \| ``"json_object"`` \| ``"regex"`` | Must be one of `"text"`, `"regex"` or `"json_object"`. | -| `seed?` | `number` \| ``null`` | This feature is in Beta. If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result. Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend. | -| `stop?` | `string` \| ``null`` \| `string`[] | Up to 4 sequences where the API will stop generating further tokens. | -| `stream?` | `boolean` \| ``null`` | If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) as they become available, with the stream terminated by a `data: [DONE]` message. [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions). | -| `temperature?` | `number` \| ``null`` | What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. | -| `top_p?` | `number` \| ``null`` | Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. | - -#### Defined in - -[src/api/models/ChatSettings.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ChatSettings.ts#L5) - -___ - -### CompletionUsage - -Ƭ **CompletionUsage**: `Object` - -Usage statistics for the completion request. - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `completion_tokens` | `number` | Number of tokens in the generated completion. | -| `prompt_tokens` | `number` | Number of tokens in the prompt. | -| `total_tokens` | `number` | Total number of tokens used in the request (prompt + completion). | - -#### Defined in - -[src/api/models/CompletionUsage.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/CompletionUsage.ts#L8) - -___ - -### CreateAgentRequest - -Ƭ **CreateAgentRequest**: `Object` - -A valid request payload for creating an agent - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about?` | `string` | About the agent | -| `default_settings?` | [`AgentDefaultSettings`](api.md#agentdefaultsettings) | Default model settings to start every session with | -| `docs?` | [`CreateDoc`](api.md#createdoc)[] | List of docs about agent | -| `instructions?` | `string` \| `string`[] | Instructions for the agent | -| `metadata?` | `any` | (Optional) metadata | -| `model?` | `string` | Name of the model that the agent is supposed to use | -| `name` | `string` | Name of the agent | -| `tools?` | [`CreateToolRequest`](api.md#createtoolrequest)[] | A list of tools the model may call. Currently, only `function`s are supported as a tool. Use this to provide a list of functions the model may generate JSON inputs for. | - -#### Defined in - -[src/api/models/CreateAgentRequest.ts:11](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/CreateAgentRequest.ts#L11) - -___ - -### CreateDoc - -Ƭ **CreateDoc**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `content` | `string`[] \| `string` | Information content | -| `metadata?` | `any` | Optional metadata | -| `title` | `string` | Title describing what this bit of information contains | - -#### Defined in - -[src/api/models/CreateDoc.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/CreateDoc.ts#L5) - -___ - -### CreateSessionRequest - -Ƭ **CreateSessionRequest**: `Object` - -A valid request payload for creating a session - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `agent_id` | `string` | Agent ID of agent to associate with this session | -| `context_overflow?` | `string` | Action to start on context window overflow | -| `metadata?` | `any` | Optional metadata | -| `render_templates?` | `boolean` | Render system and assistant message content as jinja templates | -| `situation?` | `string` | A specific situation that sets the background for this session | -| `token_budget?` | `number` | Threshold value for the adaptive context functionality | -| `user_id?` | `string` | (Optional) User ID of user to associate with this session | - -#### Defined in - -[src/api/models/CreateSessionRequest.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/CreateSessionRequest.ts#L8) - -___ - -### CreateToolRequest - -Ƭ **CreateToolRequest**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `function` | [`FunctionDef`](api.md#functiondef) | Function definition and parameters | -| `type` | ``"function"`` \| ``"webhook"`` | Whether this tool is a `function` or a `webhook` (Only `function` tool supported right now) | - -#### Defined in - -[src/api/models/CreateToolRequest.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/CreateToolRequest.ts#L6) - -___ - -### CreateUserRequest - -Ƭ **CreateUserRequest**: `Object` - -A valid request payload for creating a user - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about?` | `string` | About the user | -| `docs?` | [`CreateDoc`](api.md#createdoc)[] | List of docs about user | -| `metadata?` | `any` | (Optional) metadata | -| `name?` | `string` | Name of the user | - -#### Defined in - -[src/api/models/CreateUserRequest.ts:9](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/CreateUserRequest.ts#L9) - -___ - -### Doc - -Ƭ **Doc**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `content` | `string`[] \| `string` | Information content | -| `created_at` | `string` | Doc created at | -| `id` | `string` | ID of doc | -| `metadata?` | `any` | optional metadata | -| `title` | `string` | Title describing what this bit of information contains | - -#### Defined in - -[src/api/models/Doc.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/Doc.ts#L5) - -___ - -### DocIds - -Ƭ **DocIds**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `agent_doc_ids` | `string`[] | -| `user_doc_ids` | `string`[] | - -#### Defined in - -[src/api/models/DocIds.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/DocIds.ts#L5) - -___ - -### FunctionCallOption - -Ƭ **FunctionCallOption**: `Object` - -Specifying a particular function via `{"name": "my_function"}` forces the model to call that function. - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `name` | `string` | The name of the function to call. | - -#### Defined in - -[src/api/models/FunctionCallOption.ts:9](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/FunctionCallOption.ts#L9) - -___ - -### FunctionDef - -Ƭ **FunctionDef**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `description?` | `string` | A description of what the function does, used by the model to choose when and how to call the function. | -| `name` | `string` | The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64. | -| `parameters` | [`FunctionParameters`](api.md#functionparameters) | Parameters accepeted by this function | - -#### Defined in - -[src/api/models/FunctionDef.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/FunctionDef.ts#L6) - -___ - -### FunctionParameters - -Ƭ **FunctionParameters**: `Record`\<`string`, `any`\> - -The parameters the functions accepts, described as a JSON Schema object. - -#### Defined in - -[src/api/models/FunctionParameters.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/FunctionParameters.ts#L8) - -___ - -### InputChatMLMessage - -Ƭ **InputChatMLMessage**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `content` | `string` | ChatML content | -| `continue?` | `boolean` | Whether to continue this message or return a new one | -| `name?` | `string` | ChatML name | -| `role` | ``"user"`` \| ``"assistant"`` \| ``"system"`` \| ``"function_call"`` \| ``"function"`` \| ``"auto"`` | ChatML role (system\|assistant\|user\|function_call\|function\|auto) | - -#### Defined in - -[src/api/models/InputChatMLMessage.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/InputChatMLMessage.ts#L5) - -___ - -### JobStatus - -Ƭ **JobStatus**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `created_at` | `string` | Job created at (RFC-3339 format) | -| `has_progress?` | `boolean` | Whether this Job supports progress updates | -| `id` | `string` | Job id (UUID) | -| `name` | `string` | Name of the job | -| `progress?` | `number` | Progress percentage | -| `reason?` | `string` | Reason for current state | -| `state` | ``"pending"`` \| ``"in_progress"`` \| ``"retrying"`` \| ``"succeeded"`` \| ``"aborted"`` \| ``"failed"`` \| ``"unknown"`` | Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed) | -| `updated_at?` | `string` | Job updated at (RFC-3339 format) | - -#### Defined in - -[src/api/models/JobStatus.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/JobStatus.ts#L5) - -___ - -### Memory - -Ƭ **Memory**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `agent_id` | `string` | ID of the agent | -| `content` | `string` | Content of the memory | -| `created_at` | `string` | Memory created at (RFC-3339 format) | -| `entities` | `any`[] | List of entities mentioned in the memory | -| `id` | `string` | Memory id (UUID) | -| `last_accessed_at?` | `string` | Memory last accessed at (RFC-3339 format) | -| `sentiment?` | `number` | Sentiment (valence) of the memory on a scale of -1 to 1 | -| `timestamp?` | `string` | Memory happened at (RFC-3339 format) | -| `user_id` | `string` | ID of the user | - -#### Defined in - -[src/api/models/Memory.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/Memory.ts#L5) - -___ - -### MemoryAccessOptions - -Ƭ **MemoryAccessOptions**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `recall?` | `boolean` | Whether previous memories should be recalled or not | -| `record?` | `boolean` | Whether this interaction should be recorded in history or not | -| `remember?` | `boolean` | Whether this interaction should form memories or not | - -#### Defined in - -[src/api/models/MemoryAccessOptions.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/MemoryAccessOptions.ts#L5) - -___ - -### NamedToolChoice - -Ƭ **NamedToolChoice**: `Object` - -Specifies a tool the model should use. Use to force the model to call a specific function. - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `function` | \{ `name`: `string` } | - | -| `function.name` | `string` | The name of the function to call. | -| `type` | ``"function"`` | The type of the tool. Currently, only `function` is supported. | - -#### Defined in - -[src/api/models/NamedToolChoice.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/NamedToolChoice.ts#L8) - -___ - -### OpenAPIConfig - -Ƭ **OpenAPIConfig**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `BASE` | `string` | -| `CREDENTIALS` | ``"include"`` \| ``"omit"`` \| ``"same-origin"`` | -| `ENCODE_PATH?` | (`path`: `string`) => `string` | -| `HEADERS?` | `Headers` \| `Resolver`\<`Headers`\> | -| `PASSWORD?` | `string` \| `Resolver`\<`string`\> | -| `TOKEN?` | `string` \| `Resolver`\<`string`\> | -| `USERNAME?` | `string` \| `Resolver`\<`string`\> | -| `VERSION` | `string` | -| `WITH_CREDENTIALS` | `boolean` | - -#### Defined in - -[src/api/core/OpenAPI.ts:10](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/OpenAPI.ts#L10) - -___ - -### PartialFunctionDef - -Ƭ **PartialFunctionDef**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `description?` | `string` | A description of what the function does, used by the model to choose when and how to call the function. | -| `name?` | `string` | The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64. | -| `parameters?` | [`FunctionParameters`](api.md#functionparameters) | Parameters accepeted by this function | - -#### Defined in - -[src/api/models/PartialFunctionDef.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/PartialFunctionDef.ts#L6) - -___ - -### PatchAgentRequest - -Ƭ **PatchAgentRequest**: `Object` - -A request for patching an agent - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about?` | `string` | About the agent | -| `default_settings?` | [`AgentDefaultSettings`](api.md#agentdefaultsettings) | Default model settings to start every session with | -| `instructions?` | `string` \| `string`[] | Instructions for the agent | -| `metadata?` | `any` | Optional metadata | -| `model?` | `string` | Name of the model that the agent is supposed to use | -| `name?` | `string` | Name of the agent | - -#### Defined in - -[src/api/models/PatchAgentRequest.ts:9](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/PatchAgentRequest.ts#L9) - -___ - -### PatchSessionRequest - -Ƭ **PatchSessionRequest**: `Object` - -A request for patching a session - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `context_overflow?` | `string` | Action to start on context window overflow | -| `metadata?` | `any` | Optional metadata | -| `situation?` | `string` | Updated situation for this session | -| `token_budget?` | `number` | Threshold value for the adaptive context functionality | - -#### Defined in - -[src/api/models/PatchSessionRequest.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/PatchSessionRequest.ts#L8) - -___ - -### PatchToolRequest - -Ƭ **PatchToolRequest**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `function` | [`PartialFunctionDef`](api.md#partialfunctiondef) | Function definition and parameters | - -#### Defined in - -[src/api/models/PatchToolRequest.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/PatchToolRequest.ts#L6) - -___ - -### PatchUserRequest - -Ƭ **PatchUserRequest**: `Object` - -A request for patching a user - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about?` | `string` | About the user | -| `metadata?` | `any` | Optional metadata | -| `name?` | `string` | Name of the user | - -#### Defined in - -[src/api/models/PatchUserRequest.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/PatchUserRequest.ts#L8) - -___ - -### ResourceCreatedResponse - -Ƭ **ResourceCreatedResponse**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `created_at` | `string` | - | -| `id` | `string` | - | -| `jobs?` | `string`[] | IDs (if any) of jobs created as part of this request | - -#### Defined in - -[src/api/models/ResourceCreatedResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ResourceCreatedResponse.ts#L5) - -___ - -### ResourceDeletedResponse - -Ƭ **ResourceDeletedResponse**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `deleted_at` | `string` | - | -| `id` | `string` | - | -| `jobs?` | `string`[] | IDs (if any) of jobs created as part of this request | - -#### Defined in - -[src/api/models/ResourceDeletedResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ResourceDeletedResponse.ts#L5) - -___ - -### ResourceUpdatedResponse - -Ƭ **ResourceUpdatedResponse**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `id` | `string` | - | -| `jobs?` | `string`[] | IDs (if any) of jobs created as part of this request | -| `updated_at` | `string` | - | - -#### Defined in - -[src/api/models/ResourceUpdatedResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ResourceUpdatedResponse.ts#L5) - -___ - -### Session - -Ƭ **Session**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `agent_id` | `string` | Agent ID of agent associated with this session | -| `context_overflow?` | `string` | Action to start on context window overflow | -| `created_at?` | `string` | Session created at (RFC-3339 format) | -| `id` | `string` | Session id (UUID) | -| `metadata?` | `any` | Optional metadata | -| `render_templates?` | `boolean` | Render system and assistant message content as jinja templates | -| `situation?` | `string` | A specific situation that sets the background for this session | -| `summary?` | `string` | (null at the beginning) - generated automatically after every interaction | -| `token_budget?` | `number` | Threshold value for the adaptive context functionality | -| `updated_at?` | `string` | Session updated at (RFC-3339 format) | -| `user_id?` | `string` | User ID of user associated with this session | - -#### Defined in - -[src/api/models/Session.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/Session.ts#L5) - -___ - -### Suggestion - -Ƭ **Suggestion**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `content` | `string` | The content of the suggestion | -| `created_at?` | `string` | Suggestion created at (RFC-3339 format) | -| `message_id` | `string` | The message that produced it | -| `session_id` | `string` | Session this suggestion belongs to | -| `target` | ``"user"`` \| ``"agent"`` | Whether the suggestion is for the `agent` or a `user` | - -#### Defined in - -[src/api/models/Suggestion.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/Suggestion.ts#L5) - -___ - -### Tool - -Ƭ **Tool**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `function` | [`FunctionDef`](api.md#functiondef) | Function definition and parameters | -| `id` | `string` | Tool ID | -| `type` | ``"function"`` \| ``"webhook"`` | Whether this tool is a `function` or a `webhook` (Only `function` tool supported right now) | - -#### Defined in - -[src/api/models/Tool.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/Tool.ts#L6) - -___ - -### ToolChoiceOption - -Ƭ **ToolChoiceOption**: ``"none"`` \| ``"auto"`` \| [`NamedToolChoice`](api.md#namedtoolchoice) - -Controls which (if any) function is called by the model. -`none` means the model will not call a function and instead generates a message. -`auto` means the model can pick between generating a message or calling a function. -Specifying a particular function via `{"type: "function", "function": {"name": "my_function"}}` forces the model to call that function. - -`none` is the default when no functions are present. `auto` is the default if functions are present. - -#### Defined in - -[src/api/models/ToolChoiceOption.ts:15](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/ToolChoiceOption.ts#L15) - -___ - -### UpdateAgentRequest - -Ƭ **UpdateAgentRequest**: `Object` - -A valid request payload for updating an agent - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about` | `string` | About the agent | -| `default_settings?` | [`AgentDefaultSettings`](api.md#agentdefaultsettings) | Default model settings to start every session with | -| `instructions?` | `string` \| `string`[] | Instructions for the agent | -| `metadata?` | `any` | Optional metadata | -| `model?` | `string` | Name of the model that the agent is supposed to use | -| `name` | `string` | Name of the agent | - -#### Defined in - -[src/api/models/UpdateAgentRequest.ts:9](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/UpdateAgentRequest.ts#L9) - -___ - -### UpdateSessionRequest - -Ƭ **UpdateSessionRequest**: `Object` - -A valid request payload for updating a session - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `context_overflow?` | `string` | Action to start on context window overflow | -| `metadata?` | `any` | Optional metadata | -| `situation` | `string` | Updated situation for this session | -| `token_budget?` | `number` | Threshold value for the adaptive context functionality | - -#### Defined in - -[src/api/models/UpdateSessionRequest.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/UpdateSessionRequest.ts#L8) - -___ - -### UpdateToolRequest - -Ƭ **UpdateToolRequest**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `function` | [`FunctionDef`](api.md#functiondef) | Function definition and parameters | - -#### Defined in - -[src/api/models/UpdateToolRequest.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/UpdateToolRequest.ts#L6) - -___ - -### UpdateUserRequest - -Ƭ **UpdateUserRequest**: `Object` - -A valid request payload for updating a user - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about` | `string` | About the user | -| `metadata?` | `any` | Optional metadata | -| `name` | `string` | Name of the user | - -#### Defined in - -[src/api/models/UpdateUserRequest.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/UpdateUserRequest.ts#L8) - -___ - -### User - -Ƭ **User**: `Object` - -#### Type declaration - -| Name | Type | Description | -| :------ | :------ | :------ | -| `about?` | `string` | About the user | -| `created_at?` | `string` | User created at (RFC-3339 format) | -| `id` | `string` | User id (UUID) | -| `metadata?` | `any` | (Optional) metadata | -| `name?` | `string` | Name of the user | -| `updated_at?` | `string` | User updated at (RFC-3339 format) | - -#### Defined in - -[src/api/models/User.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/User.ts#L5) - -___ - -### agent\_id - -Ƭ **agent\_id**: `string` - -#### Defined in - -[src/api/models/agent_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/agent_id.ts#L5) - -___ - -### doc\_id - -Ƭ **doc\_id**: `string` - -#### Defined in - -[src/api/models/doc_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/doc_id.ts#L5) - -___ - -### job\_id - -Ƭ **job\_id**: `string` - -#### Defined in - -[src/api/models/job_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/job_id.ts#L5) - -___ - -### memory\_id - -Ƭ **memory\_id**: `string` - -#### Defined in - -[src/api/models/memory_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/memory_id.ts#L5) - -___ - -### message\_id - -Ƭ **message\_id**: `string` - -#### Defined in - -[src/api/models/message_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/message_id.ts#L5) - -___ - -### session\_id - -Ƭ **session\_id**: `string` - -#### Defined in - -[src/api/models/session_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/session_id.ts#L5) - -___ - -### tool\_id - -Ƭ **tool\_id**: `string` - -#### Defined in - -[src/api/models/tool_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/tool_id.ts#L5) - -___ - -### user\_id - -Ƭ **user\_id**: `string` - -#### Defined in - -[src/api/models/user_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/models/user_id.ts#L5) - -## Variables - -### $Agent - -• `Const` **$Agent**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `about`: \{ `description`: ``"About the agent"`` ; `type`: ``"string"`` = "string" } ; `created_at`: \{ `description`: ``"Agent created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `default_settings`: \{ `description`: ``"Default settings for all sessions created by this agent"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } ; `id`: \{ `description`: ``"Agent id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `instructions`: \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `model`: \{ `description`: ``"The model to use with this agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"Name of the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `updated_at`: \{ `description`: ``"Agent updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the agent"`` ; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the agent"`` | -| `properties.about.type` | ``"string"`` | -| `properties.created_at` | \{ `description`: ``"Agent created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Agent created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.default_settings` | \{ `description`: ``"Default settings for all sessions created by this agent"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } | -| `properties.default_settings.description` | ``"Default settings for all sessions created by this agent"`` | -| `properties.default_settings.type` | ``"AgentDefaultSettings"`` | -| `properties.id` | \{ `description`: ``"Agent id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"Agent id (UUID)"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.instructions` | \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } | -| `properties.instructions.contains` | readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] | -| `properties.instructions.description` | ``"Instructions for the agent"`` | -| `properties.instructions.type` | ``"one-of"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.model` | \{ `description`: ``"The model to use with this agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.model.description` | ``"The model to use with this agent"`` | -| `properties.model.isRequired` | ``true`` | -| `properties.model.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"Name of the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the agent"`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | -| `properties.updated_at` | \{ `description`: ``"Agent updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.updated_at.description` | ``"Agent updated at (RFC-3339 format)"`` | -| `properties.updated_at.format` | ``"date-time"`` | -| `properties.updated_at.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$Agent.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$Agent.ts#L5) - -___ - -### $AgentDefaultSettings - -• `Const` **$AgentDefaultSettings**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `frequency_penalty`: \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `minimum`: ``-2`` = -2; `type`: ``"number"`` = "number" } ; `length_penalty`: \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. "`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } ; `min_p`: \{ `description`: ``"Minimum probability compared to leading token to be considered"`` ; `exclusiveMaximum`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } ; `presence_penalty`: \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } ; `preset`: \{ `type`: ``"Enum"`` = "Enum" } ; `repetition_penalty`: \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } ; `temperature`: \{ `description`: ``"What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic."`` ; `isNullable`: ``true`` = true; `maximum`: ``3`` = 3; `type`: ``"number"`` = "number" } ; `top_p`: \{ `description`: ``"Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } } | -| `properties.frequency_penalty` | \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `minimum`: ``-2`` = -2; `type`: ``"number"`` = "number" } | -| `properties.frequency_penalty.description` | ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` | -| `properties.frequency_penalty.isNullable` | ``true`` | -| `properties.frequency_penalty.maximum` | ``2`` | -| `properties.frequency_penalty.minimum` | ``-2`` | -| `properties.frequency_penalty.type` | ``"number"`` | -| `properties.length_penalty` | \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. "`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } | -| `properties.length_penalty.description` | ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. "`` | -| `properties.length_penalty.isNullable` | ``true`` | -| `properties.length_penalty.maximum` | ``2`` | -| `properties.length_penalty.type` | ``"number"`` | -| `properties.min_p` | \{ `description`: ``"Minimum probability compared to leading token to be considered"`` ; `exclusiveMaximum`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } | -| `properties.min_p.description` | ``"Minimum probability compared to leading token to be considered"`` | -| `properties.min_p.exclusiveMaximum` | ``true`` | -| `properties.min_p.maximum` | ``1`` | -| `properties.min_p.type` | ``"number"`` | -| `properties.presence_penalty` | \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } | -| `properties.presence_penalty.description` | ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` | -| `properties.presence_penalty.isNullable` | ``true`` | -| `properties.presence_penalty.maximum` | ``1`` | -| `properties.presence_penalty.minimum` | ``-1`` | -| `properties.presence_penalty.type` | ``"number"`` | -| `properties.preset` | \{ `type`: ``"Enum"`` = "Enum" } | -| `properties.preset.type` | ``"Enum"`` | -| `properties.repetition_penalty` | \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } | -| `properties.repetition_penalty.description` | ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` | -| `properties.repetition_penalty.isNullable` | ``true`` | -| `properties.repetition_penalty.maximum` | ``2`` | -| `properties.repetition_penalty.type` | ``"number"`` | -| `properties.temperature` | \{ `description`: ``"What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic."`` ; `isNullable`: ``true`` = true; `maximum`: ``3`` = 3; `type`: ``"number"`` = "number" } | -| `properties.temperature.description` | ``"What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic."`` | -| `properties.temperature.isNullable` | ``true`` | -| `properties.temperature.maximum` | ``3`` | -| `properties.temperature.type` | ``"number"`` | -| `properties.top_p` | \{ `description`: ``"Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } | -| `properties.top_p.description` | ``"Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both."`` | -| `properties.top_p.isNullable` | ``true`` | -| `properties.top_p.maximum` | ``1`` | -| `properties.top_p.type` | ``"number"`` | - -#### Defined in - -[src/api/schemas/$AgentDefaultSettings.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$AgentDefaultSettings.ts#L5) - -___ - -### $ChatInput - -• `Const` **$ChatInput**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `contains` | readonly [\{ `type`: ``"ChatInputData"`` = "ChatInputData" }, \{ `type`: ``"ChatSettings"`` = "ChatSettings" }, \{ `type`: ``"MemoryAccessOptions"`` = "MemoryAccessOptions" }] | -| `type` | ``"all-of"`` | - -#### Defined in - -[src/api/schemas/$ChatInput.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatInput.ts#L5) - -___ - -### $ChatInputData - -• `Const` **$ChatInputData**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `messages`: \{ `contains`: \{ `type`: ``"InputChatMLMessage"`` = "InputChatMLMessage" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } ; `tool_choice`: \{ `contains`: readonly [\{ `type`: ``"ToolChoiceOption"`` = "ToolChoiceOption" }, \{ `type`: ``"NamedToolChoice"`` = "NamedToolChoice" }] ; `description`: ``"Can be one of existing tools given to the agent earlier or the ones included in the request"`` ; `isNullable`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `tools`: \{ `contains`: \{ `type`: ``"Tool"`` = "Tool" } ; `isNullable`: ``true`` = true; `type`: ``"array"`` = "array" } } | -| `properties.messages` | \{ `contains`: \{ `type`: ``"InputChatMLMessage"`` = "InputChatMLMessage" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } | -| `properties.messages.contains` | \{ `type`: ``"InputChatMLMessage"`` = "InputChatMLMessage" } | -| `properties.messages.contains.type` | ``"InputChatMLMessage"`` | -| `properties.messages.isRequired` | ``true`` | -| `properties.messages.type` | ``"array"`` | -| `properties.tool_choice` | \{ `contains`: readonly [\{ `type`: ``"ToolChoiceOption"`` = "ToolChoiceOption" }, \{ `type`: ``"NamedToolChoice"`` = "NamedToolChoice" }] ; `description`: ``"Can be one of existing tools given to the agent earlier or the ones included in the request"`` ; `isNullable`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.tool_choice.contains` | readonly [\{ `type`: ``"ToolChoiceOption"`` = "ToolChoiceOption" }, \{ `type`: ``"NamedToolChoice"`` = "NamedToolChoice" }] | -| `properties.tool_choice.description` | ``"Can be one of existing tools given to the agent earlier or the ones included in the request"`` | -| `properties.tool_choice.isNullable` | ``true`` | -| `properties.tool_choice.type` | ``"one-of"`` | -| `properties.tools` | \{ `contains`: \{ `type`: ``"Tool"`` = "Tool" } ; `isNullable`: ``true`` = true; `type`: ``"array"`` = "array" } | -| `properties.tools.contains` | \{ `type`: ``"Tool"`` = "Tool" } | -| `properties.tools.contains.type` | ``"Tool"`` | -| `properties.tools.isNullable` | ``true`` | -| `properties.tools.type` | ``"array"`` | - -#### Defined in - -[src/api/schemas/$ChatInputData.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatInputData.ts#L5) - -___ - -### $ChatMLImageContentPart - -• `Const` **$ChatMLImageContentPart**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `image_url`: \{ `description`: ``"Image content part, can be a URL or a base64-encoded image"`` ; `isRequired`: ``true`` = true; `properties`: \{ `detail`: \{ `type`: ``"Enum"`` = "Enum" } ; `url`: \{ `description`: ``"URL or base64 data url (e.g. `data:image/jpeg;base64,`)"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } } ; `type`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.image_url` | \{ `description`: ``"Image content part, can be a URL or a base64-encoded image"`` ; `isRequired`: ``true`` = true; `properties`: \{ `detail`: \{ `type`: ``"Enum"`` = "Enum" } ; `url`: \{ `description`: ``"URL or base64 data url (e.g. `data:image/jpeg;base64,`)"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } } | -| `properties.image_url.description` | ``"Image content part, can be a URL or a base64-encoded image"`` | -| `properties.image_url.isRequired` | ``true`` | -| `properties.image_url.properties` | \{ `detail`: \{ `type`: ``"Enum"`` = "Enum" } ; `url`: \{ `description`: ``"URL or base64 data url (e.g. `data:image/jpeg;base64,`)"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.image_url.properties.detail` | \{ `type`: ``"Enum"`` = "Enum" } | -| `properties.image_url.properties.detail.type` | ``"Enum"`` | -| `properties.image_url.properties.url` | \{ `description`: ``"URL or base64 data url (e.g. `data:image/jpeg;base64,`)"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.image_url.properties.url.description` | ``"URL or base64 data url (e.g. `data:image/jpeg;base64,`)"`` | -| `properties.image_url.properties.url.isRequired` | ``true`` | -| `properties.image_url.properties.url.type` | ``"string"`` | -| `properties.type` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.type.isRequired` | ``true`` | -| `properties.type.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$ChatMLImageContentPart.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatMLImageContentPart.ts#L5) - -___ - -### $ChatMLMessage - -• `Const` **$ChatMLMessage**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `content`: \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }] ; `description`: ``"ChatML content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `created_at`: \{ `description`: ``"Message created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `id`: \{ `description`: ``"Message ID"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"ChatML name"`` ; `type`: ``"string"`` = "string" } ; `role`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.content` | \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }] ; `description`: ``"ChatML content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.content.contains` | readonly [\{ `type`: ``"string"`` = "string" }] | -| `properties.content.description` | ``"ChatML content"`` | -| `properties.content.isRequired` | ``true`` | -| `properties.content.type` | ``"one-of"`` | -| `properties.created_at` | \{ `description`: ``"Message created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Message created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.isRequired` | ``true`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.id` | \{ `description`: ``"Message ID"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"Message ID"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"ChatML name"`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"ChatML name"`` | -| `properties.name.type` | ``"string"`` | -| `properties.role` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.role.isRequired` | ``true`` | -| `properties.role.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$ChatMLMessage.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatMLMessage.ts#L5) - -___ - -### $ChatMLTextContentPart - -• `Const` **$ChatMLTextContentPart**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `text`: \{ `description`: ``"Text content part"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `type`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.text` | \{ `description`: ``"Text content part"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.text.description` | ``"Text content part"`` | -| `properties.text.isRequired` | ``true`` | -| `properties.text.type` | ``"string"`` | -| `properties.type` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.type.isRequired` | ``true`` | -| `properties.type.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$ChatMLTextContentPart.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatMLTextContentPart.ts#L5) - -___ - -### $ChatResponse - -• `Const` **$ChatResponse**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"Represents a chat completion response returned by model, based on the provided input."`` | -| `properties` | \{ `doc_ids`: \{ `isRequired`: ``true`` = true; `type`: ``"DocIds"`` = "DocIds" } ; `finish_reason`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } ; `id`: \{ `description`: ``"A unique identifier for the chat completion."`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `jobs`: \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } ; `response`: \{ `contains`: \{ `contains`: \{ `type`: ``"ChatMLMessage"`` = "ChatMLMessage" } ; `type`: ``"array"`` = "array" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } ; `usage`: \{ `isRequired`: ``true`` = true; `type`: ``"CompletionUsage"`` = "CompletionUsage" } } | -| `properties.doc_ids` | \{ `isRequired`: ``true`` = true; `type`: ``"DocIds"`` = "DocIds" } | -| `properties.doc_ids.isRequired` | ``true`` | -| `properties.doc_ids.type` | ``"DocIds"`` | -| `properties.finish_reason` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.finish_reason.isRequired` | ``true`` | -| `properties.finish_reason.type` | ``"Enum"`` | -| `properties.id` | \{ `description`: ``"A unique identifier for the chat completion."`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"A unique identifier for the chat completion."`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.jobs` | \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } | -| `properties.jobs.contains` | \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } | -| `properties.jobs.contains.format` | ``"uuid"`` | -| `properties.jobs.contains.type` | ``"string"`` | -| `properties.jobs.type` | ``"array"`` | -| `properties.response` | \{ `contains`: \{ `contains`: \{ `type`: ``"ChatMLMessage"`` = "ChatMLMessage" } ; `type`: ``"array"`` = "array" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } | -| `properties.response.contains` | \{ `contains`: \{ `type`: ``"ChatMLMessage"`` = "ChatMLMessage" } ; `type`: ``"array"`` = "array" } | -| `properties.response.contains.contains` | \{ `type`: ``"ChatMLMessage"`` = "ChatMLMessage" } | -| `properties.response.contains.contains.type` | ``"ChatMLMessage"`` | -| `properties.response.contains.type` | ``"array"`` | -| `properties.response.isRequired` | ``true`` | -| `properties.response.type` | ``"array"`` | -| `properties.usage` | \{ `isRequired`: ``true`` = true; `type`: ``"CompletionUsage"`` = "CompletionUsage" } | -| `properties.usage.isRequired` | ``true`` | -| `properties.usage.type` | ``"CompletionUsage"`` | - -#### Defined in - -[src/api/schemas/$ChatResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatResponse.ts#L5) - -___ - -### $ChatSettings - -• `Const` **$ChatSettings**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `frequency_penalty`: \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } ; `length_penalty`: \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. "`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } ; `logit_bias`: \{ `contains`: \{ `type`: ``"number"`` = "number" } ; `isNullable`: ``true`` = true; `type`: ``"dictionary"`` = "dictionary" } ; `max_tokens`: \{ `description`: ``"The maximum number of tokens to generate in the chat completion.\n The total length of input tokens and generated tokens is limited by the model's context length.\n "`` ; `isNullable`: ``true`` = true; `maximum`: ``16384`` = 16384; `minimum`: ``1`` = 1; `type`: ``"number"`` = "number" } ; `min_p`: \{ `description`: ``"Minimum probability compared to leading token to be considered"`` ; `exclusiveMaximum`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } ; `presence_penalty`: \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } ; `preset`: \{ `type`: ``"Enum"`` = "Enum" } ; `repetition_penalty`: \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } ; `response_format`: \{ `description`: ``"An object specifying the format that the model must output.\n Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which guarantees the message the model generates is valid JSON.\n **Important:** when using JSON mode, you **must** also instruct the model to produce JSON yourself via a system or user message. Without this, the model may generate an unending stream of whitespace until the generation reaches the token limit, resulting in a long-running and seemingly \"stuck\" request. Also note that the message content may be partially cut off if `finish_reason=\"length\"`, which indicates the generation exceeded `max_tokens` or the conversation exceeded the max context length.\n "`` ; `properties`: \{ `pattern`: \{ `description`: ``"Regular expression pattern to use if `type` is `\"regex\"`"`` ; `type`: ``"string"`` = "string" } ; `schema`: \{ `description`: ``"JSON Schema to use if `type` is `\"json_object\"`"`` ; `properties`: {} = \{} } ; `type`: \{ `type`: ``"Enum"`` = "Enum" } } } ; `seed`: \{ `description`: ``"This feature is in Beta.\n If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result.\n Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend.\n "`` ; `isNullable`: ``true`` = true; `maximum`: ``9999`` = 9999; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } ; `stop`: \{ `contains`: readonly [\{ `isNullable`: ``true`` = true; `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Up to 4 sequences where the API will stop generating further tokens.\n "`` ; `type`: ``"one-of"`` = "one-of" } ; `stream`: \{ `description`: ``"If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) as they become available, with the stream terminated by a `data: [DONE]` message. [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).\n "`` ; `isNullable`: ``true`` = true; `type`: ``"boolean"`` = "boolean" } ; `temperature`: \{ `description`: ``"What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } ; `top_p`: \{ `description`: ``"Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both."`` ; `exclusiveMinimum`: ``true`` = true; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } } | -| `properties.frequency_penalty` | \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } | -| `properties.frequency_penalty.description` | ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` | -| `properties.frequency_penalty.isNullable` | ``true`` | -| `properties.frequency_penalty.maximum` | ``1`` | -| `properties.frequency_penalty.minimum` | ``-1`` | -| `properties.frequency_penalty.type` | ``"number"`` | -| `properties.length_penalty` | \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. "`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } | -| `properties.length_penalty.description` | ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. "`` | -| `properties.length_penalty.isNullable` | ``true`` | -| `properties.length_penalty.maximum` | ``2`` | -| `properties.length_penalty.type` | ``"number"`` | -| `properties.logit_bias` | \{ `contains`: \{ `type`: ``"number"`` = "number" } ; `isNullable`: ``true`` = true; `type`: ``"dictionary"`` = "dictionary" } | -| `properties.logit_bias.contains` | \{ `type`: ``"number"`` = "number" } | -| `properties.logit_bias.contains.type` | ``"number"`` | -| `properties.logit_bias.isNullable` | ``true`` | -| `properties.logit_bias.type` | ``"dictionary"`` | -| `properties.max_tokens` | \{ `description`: ``"The maximum number of tokens to generate in the chat completion.\n The total length of input tokens and generated tokens is limited by the model's context length.\n "`` ; `isNullable`: ``true`` = true; `maximum`: ``16384`` = 16384; `minimum`: ``1`` = 1; `type`: ``"number"`` = "number" } | -| `properties.max_tokens.description` | ``"The maximum number of tokens to generate in the chat completion.\n The total length of input tokens and generated tokens is limited by the model's context length.\n "`` | -| `properties.max_tokens.isNullable` | ``true`` | -| `properties.max_tokens.maximum` | ``16384`` | -| `properties.max_tokens.minimum` | ``1`` | -| `properties.max_tokens.type` | ``"number"`` | -| `properties.min_p` | \{ `description`: ``"Minimum probability compared to leading token to be considered"`` ; `exclusiveMaximum`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } | -| `properties.min_p.description` | ``"Minimum probability compared to leading token to be considered"`` | -| `properties.min_p.exclusiveMaximum` | ``true`` | -| `properties.min_p.maximum` | ``1`` | -| `properties.min_p.type` | ``"number"`` | -| `properties.presence_penalty` | \{ `description`: ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } | -| `properties.presence_penalty.description` | ``"(OpenAI-like) Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` | -| `properties.presence_penalty.isNullable` | ``true`` | -| `properties.presence_penalty.maximum` | ``1`` | -| `properties.presence_penalty.minimum` | ``-1`` | -| `properties.presence_penalty.type` | ``"number"`` | -| `properties.preset` | \{ `type`: ``"Enum"`` = "Enum" } | -| `properties.preset.type` | ``"Enum"`` | -| `properties.repetition_penalty` | \{ `description`: ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } | -| `properties.repetition_penalty.description` | ``"(Huggingface-like) Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim."`` | -| `properties.repetition_penalty.isNullable` | ``true`` | -| `properties.repetition_penalty.maximum` | ``2`` | -| `properties.repetition_penalty.type` | ``"number"`` | -| `properties.response_format` | \{ `description`: ``"An object specifying the format that the model must output.\n Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which guarantees the message the model generates is valid JSON.\n **Important:** when using JSON mode, you **must** also instruct the model to produce JSON yourself via a system or user message. Without this, the model may generate an unending stream of whitespace until the generation reaches the token limit, resulting in a long-running and seemingly \"stuck\" request. Also note that the message content may be partially cut off if `finish_reason=\"length\"`, which indicates the generation exceeded `max_tokens` or the conversation exceeded the max context length.\n "`` ; `properties`: \{ `pattern`: \{ `description`: ``"Regular expression pattern to use if `type` is `\"regex\"`"`` ; `type`: ``"string"`` = "string" } ; `schema`: \{ `description`: ``"JSON Schema to use if `type` is `\"json_object\"`"`` ; `properties`: {} = \{} } ; `type`: \{ `type`: ``"Enum"`` = "Enum" } } } | -| `properties.response_format.description` | ``"An object specifying the format that the model must output.\n Setting to `{ \"type\": \"json_object\" }` enables JSON mode, which guarantees the message the model generates is valid JSON.\n **Important:** when using JSON mode, you **must** also instruct the model to produce JSON yourself via a system or user message. Without this, the model may generate an unending stream of whitespace until the generation reaches the token limit, resulting in a long-running and seemingly \"stuck\" request. Also note that the message content may be partially cut off if `finish_reason=\"length\"`, which indicates the generation exceeded `max_tokens` or the conversation exceeded the max context length.\n "`` | -| `properties.response_format.properties` | \{ `pattern`: \{ `description`: ``"Regular expression pattern to use if `type` is `\"regex\"`"`` ; `type`: ``"string"`` = "string" } ; `schema`: \{ `description`: ``"JSON Schema to use if `type` is `\"json_object\"`"`` ; `properties`: {} = \{} } ; `type`: \{ `type`: ``"Enum"`` = "Enum" } } | -| `properties.response_format.properties.pattern` | \{ `description`: ``"Regular expression pattern to use if `type` is `\"regex\"`"`` ; `type`: ``"string"`` = "string" } | -| `properties.response_format.properties.pattern.description` | ``"Regular expression pattern to use if `type` is `\"regex\"`"`` | -| `properties.response_format.properties.pattern.type` | ``"string"`` | -| `properties.response_format.properties.schema` | \{ `description`: ``"JSON Schema to use if `type` is `\"json_object\"`"`` ; `properties`: {} = \{} } | -| `properties.response_format.properties.schema.description` | ``"JSON Schema to use if `type` is `\"json_object\"`"`` | -| `properties.response_format.properties.schema.properties` | {} | -| `properties.response_format.properties.type` | \{ `type`: ``"Enum"`` = "Enum" } | -| `properties.response_format.properties.type.type` | ``"Enum"`` | -| `properties.seed` | \{ `description`: ``"This feature is in Beta.\n If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result.\n Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend.\n "`` ; `isNullable`: ``true`` = true; `maximum`: ``9999`` = 9999; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } | -| `properties.seed.description` | ``"This feature is in Beta.\n If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result.\n Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend.\n "`` | -| `properties.seed.isNullable` | ``true`` | -| `properties.seed.maximum` | ``9999`` | -| `properties.seed.minimum` | ``-1`` | -| `properties.seed.type` | ``"number"`` | -| `properties.stop` | \{ `contains`: readonly [\{ `isNullable`: ``true`` = true; `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Up to 4 sequences where the API will stop generating further tokens.\n "`` ; `type`: ``"one-of"`` = "one-of" } | -| `properties.stop.contains` | readonly [\{ `isNullable`: ``true`` = true; `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] | -| `properties.stop.description` | ``"Up to 4 sequences where the API will stop generating further tokens.\n "`` | -| `properties.stop.type` | ``"one-of"`` | -| `properties.stream` | \{ `description`: ``"If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) as they become available, with the stream terminated by a `data: [DONE]` message. [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).\n "`` ; `isNullable`: ``true`` = true; `type`: ``"boolean"`` = "boolean" } | -| `properties.stream.description` | ``"If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) as they become available, with the stream terminated by a `data: [DONE]` message. [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).\n "`` | -| `properties.stream.isNullable` | ``true`` | -| `properties.stream.type` | ``"boolean"`` | -| `properties.temperature` | \{ `description`: ``"What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic."`` ; `isNullable`: ``true`` = true; `maximum`: ``2`` = 2; `type`: ``"number"`` = "number" } | -| `properties.temperature.description` | ``"What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic."`` | -| `properties.temperature.isNullable` | ``true`` | -| `properties.temperature.maximum` | ``2`` | -| `properties.temperature.type` | ``"number"`` | -| `properties.top_p` | \{ `description`: ``"Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both."`` ; `exclusiveMinimum`: ``true`` = true; `isNullable`: ``true`` = true; `maximum`: ``1`` = 1; `type`: ``"number"`` = "number" } | -| `properties.top_p.description` | ``"Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both."`` | -| `properties.top_p.exclusiveMinimum` | ``true`` | -| `properties.top_p.isNullable` | ``true`` | -| `properties.top_p.maximum` | ``1`` | -| `properties.top_p.type` | ``"number"`` | - -#### Defined in - -[src/api/schemas/$ChatSettings.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ChatSettings.ts#L5) - -___ - -### $CompletionUsage - -• `Const` **$CompletionUsage**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"Usage statistics for the completion request."`` | -| `properties` | \{ `completion_tokens`: \{ `description`: ``"Number of tokens in the generated completion."`` ; `isRequired`: ``true`` = true; `type`: ``"number"`` = "number" } ; `prompt_tokens`: \{ `description`: ``"Number of tokens in the prompt."`` ; `isRequired`: ``true`` = true; `type`: ``"number"`` = "number" } ; `total_tokens`: \{ `description`: ``"Total number of tokens used in the request (prompt + completion)."`` ; `isRequired`: ``true`` = true; `type`: ``"number"`` = "number" } } | -| `properties.completion_tokens` | \{ `description`: ``"Number of tokens in the generated completion."`` ; `isRequired`: ``true`` = true; `type`: ``"number"`` = "number" } | -| `properties.completion_tokens.description` | ``"Number of tokens in the generated completion."`` | -| `properties.completion_tokens.isRequired` | ``true`` | -| `properties.completion_tokens.type` | ``"number"`` | -| `properties.prompt_tokens` | \{ `description`: ``"Number of tokens in the prompt."`` ; `isRequired`: ``true`` = true; `type`: ``"number"`` = "number" } | -| `properties.prompt_tokens.description` | ``"Number of tokens in the prompt."`` | -| `properties.prompt_tokens.isRequired` | ``true`` | -| `properties.prompt_tokens.type` | ``"number"`` | -| `properties.total_tokens` | \{ `description`: ``"Total number of tokens used in the request (prompt + completion)."`` ; `isRequired`: ``true`` = true; `type`: ``"number"`` = "number" } | -| `properties.total_tokens.description` | ``"Total number of tokens used in the request (prompt + completion)."`` | -| `properties.total_tokens.isRequired` | ``true`` | -| `properties.total_tokens.type` | ``"number"`` | - -#### Defined in - -[src/api/schemas/$CompletionUsage.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$CompletionUsage.ts#L5) - -___ - -### $CreateAgentRequest - -• `Const` **$CreateAgentRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A valid request payload for creating an agent"`` | -| `properties` | \{ `about`: \{ `description`: ``"About the agent"`` ; `type`: ``"string"`` = "string" } ; `default_settings`: \{ `description`: ``"Default model settings to start every session with"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } ; `docs`: \{ `contains`: \{ `type`: ``"CreateDoc"`` = "CreateDoc" } ; `type`: ``"array"`` = "array" } ; `instructions`: \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } ; `metadata`: \{ `description`: ``"(Optional) metadata"`` ; `properties`: {} = \{} } ; `model`: \{ `description`: ``"Name of the model that the agent is supposed to use"`` ; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"Name of the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `tools`: \{ `contains`: \{ `type`: ``"CreateToolRequest"`` = "CreateToolRequest" } ; `type`: ``"array"`` = "array" } } | -| `properties.about` | \{ `description`: ``"About the agent"`` ; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the agent"`` | -| `properties.about.type` | ``"string"`` | -| `properties.default_settings` | \{ `description`: ``"Default model settings to start every session with"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } | -| `properties.default_settings.description` | ``"Default model settings to start every session with"`` | -| `properties.default_settings.type` | ``"AgentDefaultSettings"`` | -| `properties.docs` | \{ `contains`: \{ `type`: ``"CreateDoc"`` = "CreateDoc" } ; `type`: ``"array"`` = "array" } | -| `properties.docs.contains` | \{ `type`: ``"CreateDoc"`` = "CreateDoc" } | -| `properties.docs.contains.type` | ``"CreateDoc"`` | -| `properties.docs.type` | ``"array"`` | -| `properties.instructions` | \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } | -| `properties.instructions.contains` | readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] | -| `properties.instructions.description` | ``"Instructions for the agent"`` | -| `properties.instructions.type` | ``"one-of"`` | -| `properties.metadata` | \{ `description`: ``"(Optional) metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"(Optional) metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.model` | \{ `description`: ``"Name of the model that the agent is supposed to use"`` ; `type`: ``"string"`` = "string" } | -| `properties.model.description` | ``"Name of the model that the agent is supposed to use"`` | -| `properties.model.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"Name of the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the agent"`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | -| `properties.tools` | \{ `contains`: \{ `type`: ``"CreateToolRequest"`` = "CreateToolRequest" } ; `type`: ``"array"`` = "array" } | -| `properties.tools.contains` | \{ `type`: ``"CreateToolRequest"`` = "CreateToolRequest" } | -| `properties.tools.contains.type` | ``"CreateToolRequest"`` | -| `properties.tools.type` | ``"array"`` | - -#### Defined in - -[src/api/schemas/$CreateAgentRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$CreateAgentRequest.ts#L5) - -___ - -### $CreateDoc - -• `Const` **$CreateDoc**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `content`: \{ `contains`: readonly [\{ `contains`: \{ `minItems`: ``1`` = 1; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }, \{ `description`: ``"A single document chunk"`` ; `type`: ``"string"`` = "string" }] ; `description`: ``"Information content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `title`: \{ `description`: ``"Title describing what this bit of information contains"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.content` | \{ `contains`: readonly [\{ `contains`: \{ `minItems`: ``1`` = 1; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }, \{ `description`: ``"A single document chunk"`` ; `type`: ``"string"`` = "string" }] ; `description`: ``"Information content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.content.contains` | readonly [\{ `contains`: \{ `minItems`: ``1`` = 1; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }, \{ `description`: ``"A single document chunk"`` ; `type`: ``"string"`` = "string" }] | -| `properties.content.description` | ``"Information content"`` | -| `properties.content.isRequired` | ``true`` | -| `properties.content.type` | ``"one-of"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.title` | \{ `description`: ``"Title describing what this bit of information contains"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.title.description` | ``"Title describing what this bit of information contains"`` | -| `properties.title.isRequired` | ``true`` | -| `properties.title.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$CreateDoc.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$CreateDoc.ts#L5) - -___ - -### $CreateSessionRequest - -• `Const` **$CreateSessionRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A valid request payload for creating a session"`` | -| `properties` | \{ `agent_id`: \{ `description`: ``"Agent ID of agent to associate with this session"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `context_overflow`: \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `render_templates`: \{ `description`: ``"Render system and assistant message content as jinja templates"`` ; `type`: ``"boolean"`` = "boolean" } ; `situation`: \{ `description`: ``"A specific situation that sets the background for this session"`` ; `type`: ``"string"`` = "string" } ; `token_budget`: \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } ; `user_id`: \{ `description`: ``"(Optional) User ID of user to associate with this session"`` ; `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } } | -| `properties.agent_id` | \{ `description`: ``"Agent ID of agent to associate with this session"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.agent_id.description` | ``"Agent ID of agent to associate with this session"`` | -| `properties.agent_id.format` | ``"uuid"`` | -| `properties.agent_id.isRequired` | ``true`` | -| `properties.agent_id.type` | ``"string"`` | -| `properties.context_overflow` | \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } | -| `properties.context_overflow.description` | ``"Action to start on context window overflow"`` | -| `properties.context_overflow.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.render_templates` | \{ `description`: ``"Render system and assistant message content as jinja templates"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.render_templates.description` | ``"Render system and assistant message content as jinja templates"`` | -| `properties.render_templates.type` | ``"boolean"`` | -| `properties.situation` | \{ `description`: ``"A specific situation that sets the background for this session"`` ; `type`: ``"string"`` = "string" } | -| `properties.situation.description` | ``"A specific situation that sets the background for this session"`` | -| `properties.situation.type` | ``"string"`` | -| `properties.token_budget` | \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } | -| `properties.token_budget.description` | ``"Threshold value for the adaptive context functionality"`` | -| `properties.token_budget.type` | ``"number"`` | -| `properties.user_id` | \{ `description`: ``"(Optional) User ID of user to associate with this session"`` ; `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } | -| `properties.user_id.description` | ``"(Optional) User ID of user to associate with this session"`` | -| `properties.user_id.format` | ``"uuid"`` | -| `properties.user_id.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$CreateSessionRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$CreateSessionRequest.ts#L5) - -___ - -### $CreateToolRequest - -• `Const` **$CreateToolRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `function`: \{ `contains`: readonly [\{ `type`: ``"FunctionDef"`` = "FunctionDef" }] ; `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `type`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.function` | \{ `contains`: readonly [\{ `type`: ``"FunctionDef"`` = "FunctionDef" }] ; `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.function.contains` | readonly [\{ `type`: ``"FunctionDef"`` = "FunctionDef" }] | -| `properties.function.description` | ``"Function definition and parameters"`` | -| `properties.function.isRequired` | ``true`` | -| `properties.function.type` | ``"one-of"`` | -| `properties.type` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.type.isRequired` | ``true`` | -| `properties.type.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$CreateToolRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$CreateToolRequest.ts#L5) - -___ - -### $CreateUserRequest - -• `Const` **$CreateUserRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A valid request payload for creating a user"`` | -| `properties` | \{ `about`: \{ `description`: ``"About the user"`` ; `type`: ``"string"`` = "string" } ; `docs`: \{ `contains`: \{ `type`: ``"CreateDoc"`` = "CreateDoc" } ; `type`: ``"array"`` = "array" } ; `metadata`: \{ `description`: ``"(Optional) metadata"`` ; `properties`: {} = \{} } ; `name`: \{ `description`: ``"Name of the user"`` ; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the user"`` ; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the user"`` | -| `properties.about.type` | ``"string"`` | -| `properties.docs` | \{ `contains`: \{ `type`: ``"CreateDoc"`` = "CreateDoc" } ; `type`: ``"array"`` = "array" } | -| `properties.docs.contains` | \{ `type`: ``"CreateDoc"`` = "CreateDoc" } | -| `properties.docs.contains.type` | ``"CreateDoc"`` | -| `properties.docs.type` | ``"array"`` | -| `properties.metadata` | \{ `description`: ``"(Optional) metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"(Optional) metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.name` | \{ `description`: ``"Name of the user"`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the user"`` | -| `properties.name.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$CreateUserRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$CreateUserRequest.ts#L5) - -___ - -### $Doc - -• `Const` **$Doc**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `content`: \{ `contains`: readonly [\{ `contains`: \{ `minItems`: ``1`` = 1; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }, \{ `description`: ``"A single document chunk"`` ; `type`: ``"string"`` = "string" }] ; `description`: ``"Information content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `created_at`: \{ `description`: ``"Doc created at"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `id`: \{ `description`: ``"ID of doc"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"optional metadata"`` ; `properties`: {} = \{} } ; `title`: \{ `description`: ``"Title describing what this bit of information contains"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.content` | \{ `contains`: readonly [\{ `contains`: \{ `minItems`: ``1`` = 1; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }, \{ `description`: ``"A single document chunk"`` ; `type`: ``"string"`` = "string" }] ; `description`: ``"Information content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.content.contains` | readonly [\{ `contains`: \{ `minItems`: ``1`` = 1; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }, \{ `description`: ``"A single document chunk"`` ; `type`: ``"string"`` = "string" }] | -| `properties.content.description` | ``"Information content"`` | -| `properties.content.isRequired` | ``true`` | -| `properties.content.type` | ``"one-of"`` | -| `properties.created_at` | \{ `description`: ``"Doc created at"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Doc created at"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.isRequired` | ``true`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.id` | \{ `description`: ``"ID of doc"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"ID of doc"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.title` | \{ `description`: ``"Title describing what this bit of information contains"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.title.description` | ``"Title describing what this bit of information contains"`` | -| `properties.title.isRequired` | ``true`` | -| `properties.title.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$Doc.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$Doc.ts#L5) - -___ - -### $DocIds - -• `Const` **$DocIds**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `agent_doc_ids`: \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } ; `user_doc_ids`: \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } } | -| `properties.agent_doc_ids` | \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } | -| `properties.agent_doc_ids.contains` | \{ `type`: ``"string"`` = "string" } | -| `properties.agent_doc_ids.contains.type` | ``"string"`` | -| `properties.agent_doc_ids.isRequired` | ``true`` | -| `properties.agent_doc_ids.type` | ``"array"`` | -| `properties.user_doc_ids` | \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } | -| `properties.user_doc_ids.contains` | \{ `type`: ``"string"`` = "string" } | -| `properties.user_doc_ids.contains.type` | ``"string"`` | -| `properties.user_doc_ids.isRequired` | ``true`` | -| `properties.user_doc_ids.type` | ``"array"`` | - -#### Defined in - -[src/api/schemas/$DocIds.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$DocIds.ts#L5) - -___ - -### $FunctionCallOption - -• `Const` **$FunctionCallOption**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"Specifying a particular function via `{\"name\": \"my_function\"}` forces the model to call that function.\n "`` | -| `properties` | \{ `name`: \{ `description`: ``"The name of the function to call."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.name` | \{ `description`: ``"The name of the function to call."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"The name of the function to call."`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$FunctionCallOption.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$FunctionCallOption.ts#L5) - -___ - -### $FunctionDef - -• `Const` **$FunctionDef**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `description`: \{ `description`: ``"A description of what the function does, used by the model to choose when and how to call the function."`` ; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `parameters`: \{ `description`: ``"Parameters accepeted by this function"`` ; `isRequired`: ``true`` = true; `type`: ``"FunctionParameters"`` = "FunctionParameters" } } | -| `properties.description` | \{ `description`: ``"A description of what the function does, used by the model to choose when and how to call the function."`` ; `type`: ``"string"`` = "string" } | -| `properties.description.description` | ``"A description of what the function does, used by the model to choose when and how to call the function."`` | -| `properties.description.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | -| `properties.parameters` | \{ `description`: ``"Parameters accepeted by this function"`` ; `isRequired`: ``true`` = true; `type`: ``"FunctionParameters"`` = "FunctionParameters" } | -| `properties.parameters.description` | ``"Parameters accepeted by this function"`` | -| `properties.parameters.isRequired` | ``true`` | -| `properties.parameters.type` | ``"FunctionParameters"`` | - -#### Defined in - -[src/api/schemas/$FunctionDef.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$FunctionDef.ts#L5) - -___ - -### $FunctionParameters - -• `Const` **$FunctionParameters**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `contains` | \{ `properties`: {} = \{} } | -| `contains.properties` | {} | -| `type` | ``"dictionary"`` | - -#### Defined in - -[src/api/schemas/$FunctionParameters.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$FunctionParameters.ts#L5) - -___ - -### $InputChatMLMessage - -• `Const` **$InputChatMLMessage**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `content`: \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }] ; `description`: ``"ChatML content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `continue`: \{ `description`: ``"Whether to continue this message or return a new one"`` ; `type`: ``"boolean"`` = "boolean" } ; `name`: \{ `description`: ``"ChatML name"`` ; `type`: ``"string"`` = "string" } ; `role`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.content` | \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }] ; `description`: ``"ChatML content"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.content.contains` | readonly [\{ `type`: ``"string"`` = "string" }] | -| `properties.content.description` | ``"ChatML content"`` | -| `properties.content.isRequired` | ``true`` | -| `properties.content.type` | ``"one-of"`` | -| `properties.continue` | \{ `description`: ``"Whether to continue this message or return a new one"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.continue.description` | ``"Whether to continue this message or return a new one"`` | -| `properties.continue.type` | ``"boolean"`` | -| `properties.name` | \{ `description`: ``"ChatML name"`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"ChatML name"`` | -| `properties.name.type` | ``"string"`` | -| `properties.role` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.role.isRequired` | ``true`` | -| `properties.role.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$InputChatMLMessage.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$InputChatMLMessage.ts#L5) - -___ - -### $JobStatus - -• `Const` **$JobStatus**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `created_at`: \{ `description`: ``"Job created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `has_progress`: \{ `description`: ``"Whether this Job supports progress updates"`` ; `type`: ``"boolean"`` = "boolean" } ; `id`: \{ `description`: ``"Job id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"Name of the job"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `progress`: \{ `description`: ``"Progress percentage"`` ; `maximum`: ``100`` = 100; `type`: ``"number"`` = "number" } ; `reason`: \{ `description`: ``"Reason for current state"`` ; `type`: ``"string"`` = "string" } ; `state`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } ; `updated_at`: \{ `description`: ``"Job updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } } | -| `properties.created_at` | \{ `description`: ``"Job created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Job created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.isRequired` | ``true`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.has_progress` | \{ `description`: ``"Whether this Job supports progress updates"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.has_progress.description` | ``"Whether this Job supports progress updates"`` | -| `properties.has_progress.type` | ``"boolean"`` | -| `properties.id` | \{ `description`: ``"Job id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"Job id (UUID)"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"Name of the job"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the job"`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | -| `properties.progress` | \{ `description`: ``"Progress percentage"`` ; `maximum`: ``100`` = 100; `type`: ``"number"`` = "number" } | -| `properties.progress.description` | ``"Progress percentage"`` | -| `properties.progress.maximum` | ``100`` | -| `properties.progress.type` | ``"number"`` | -| `properties.reason` | \{ `description`: ``"Reason for current state"`` ; `type`: ``"string"`` = "string" } | -| `properties.reason.description` | ``"Reason for current state"`` | -| `properties.reason.type` | ``"string"`` | -| `properties.state` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.state.isRequired` | ``true`` | -| `properties.state.type` | ``"Enum"`` | -| `properties.updated_at` | \{ `description`: ``"Job updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.updated_at.description` | ``"Job updated at (RFC-3339 format)"`` | -| `properties.updated_at.format` | ``"date-time"`` | -| `properties.updated_at.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$JobStatus.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$JobStatus.ts#L5) - -___ - -### $Memory - -• `Const` **$Memory**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `agent_id`: \{ `description`: ``"ID of the agent"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `content`: \{ `description`: ``"Content of the memory"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `created_at`: \{ `description`: ``"Memory created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `entities`: \{ `contains`: \{ `properties`: {} = \{} } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } ; `id`: \{ `description`: ``"Memory id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `last_accessed_at`: \{ `description`: ``"Memory last accessed at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `sentiment`: \{ `description`: ``"Sentiment (valence) of the memory on a scale of -1 to 1"`` ; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } ; `timestamp`: \{ `description`: ``"Memory happened at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `user_id`: \{ `description`: ``"ID of the user"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.agent_id` | \{ `description`: ``"ID of the agent"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.agent_id.description` | ``"ID of the agent"`` | -| `properties.agent_id.format` | ``"uuid"`` | -| `properties.agent_id.isRequired` | ``true`` | -| `properties.agent_id.type` | ``"string"`` | -| `properties.content` | \{ `description`: ``"Content of the memory"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.content.description` | ``"Content of the memory"`` | -| `properties.content.isRequired` | ``true`` | -| `properties.content.type` | ``"string"`` | -| `properties.created_at` | \{ `description`: ``"Memory created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Memory created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.isRequired` | ``true`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.entities` | \{ `contains`: \{ `properties`: {} = \{} } ; `isRequired`: ``true`` = true; `type`: ``"array"`` = "array" } | -| `properties.entities.contains` | \{ `properties`: {} = \{} } | -| `properties.entities.contains.properties` | {} | -| `properties.entities.isRequired` | ``true`` | -| `properties.entities.type` | ``"array"`` | -| `properties.id` | \{ `description`: ``"Memory id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"Memory id (UUID)"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.last_accessed_at` | \{ `description`: ``"Memory last accessed at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.last_accessed_at.description` | ``"Memory last accessed at (RFC-3339 format)"`` | -| `properties.last_accessed_at.format` | ``"date-time"`` | -| `properties.last_accessed_at.type` | ``"string"`` | -| `properties.sentiment` | \{ `description`: ``"Sentiment (valence) of the memory on a scale of -1 to 1"`` ; `maximum`: ``1`` = 1; `minimum`: ``-1`` = -1; `type`: ``"number"`` = "number" } | -| `properties.sentiment.description` | ``"Sentiment (valence) of the memory on a scale of -1 to 1"`` | -| `properties.sentiment.maximum` | ``1`` | -| `properties.sentiment.minimum` | ``-1`` | -| `properties.sentiment.type` | ``"number"`` | -| `properties.timestamp` | \{ `description`: ``"Memory happened at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.timestamp.description` | ``"Memory happened at (RFC-3339 format)"`` | -| `properties.timestamp.format` | ``"date-time"`` | -| `properties.timestamp.type` | ``"string"`` | -| `properties.user_id` | \{ `description`: ``"ID of the user"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.user_id.description` | ``"ID of the user"`` | -| `properties.user_id.format` | ``"uuid"`` | -| `properties.user_id.isRequired` | ``true`` | -| `properties.user_id.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$Memory.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$Memory.ts#L5) - -___ - -### $MemoryAccessOptions - -• `Const` **$MemoryAccessOptions**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `recall`: \{ `description`: ``"Whether previous memories should be recalled or not"`` ; `type`: ``"boolean"`` = "boolean" } ; `record`: \{ `description`: ``"Whether this interaction should be recorded in history or not"`` ; `type`: ``"boolean"`` = "boolean" } ; `remember`: \{ `description`: ``"Whether this interaction should form memories or not"`` ; `type`: ``"boolean"`` = "boolean" } } | -| `properties.recall` | \{ `description`: ``"Whether previous memories should be recalled or not"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.recall.description` | ``"Whether previous memories should be recalled or not"`` | -| `properties.recall.type` | ``"boolean"`` | -| `properties.record` | \{ `description`: ``"Whether this interaction should be recorded in history or not"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.record.description` | ``"Whether this interaction should be recorded in history or not"`` | -| `properties.record.type` | ``"boolean"`` | -| `properties.remember` | \{ `description`: ``"Whether this interaction should form memories or not"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.remember.description` | ``"Whether this interaction should form memories or not"`` | -| `properties.remember.type` | ``"boolean"`` | - -#### Defined in - -[src/api/schemas/$MemoryAccessOptions.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$MemoryAccessOptions.ts#L5) - -___ - -### $NamedToolChoice - -• `Const` **$NamedToolChoice**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"Specifies a tool the model should use. Use to force the model to call a specific function."`` | -| `properties` | \{ `function`: \{ `isRequired`: ``true`` = true; `properties`: \{ `name`: \{ `description`: ``"The name of the function to call."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } } ; `type`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.function` | \{ `isRequired`: ``true`` = true; `properties`: \{ `name`: \{ `description`: ``"The name of the function to call."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } } | -| `properties.function.isRequired` | ``true`` | -| `properties.function.properties` | \{ `name`: \{ `description`: ``"The name of the function to call."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.function.properties.name` | \{ `description`: ``"The name of the function to call."`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.function.properties.name.description` | ``"The name of the function to call."`` | -| `properties.function.properties.name.isRequired` | ``true`` | -| `properties.function.properties.name.type` | ``"string"`` | -| `properties.type` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.type.isRequired` | ``true`` | -| `properties.type.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$NamedToolChoice.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$NamedToolChoice.ts#L5) - -___ - -### $PartialFunctionDef - -• `Const` **$PartialFunctionDef**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `description`: \{ `description`: ``"A description of what the function does, used by the model to choose when and how to call the function."`` ; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."`` ; `type`: ``"string"`` = "string" } ; `parameters`: \{ `description`: ``"Parameters accepeted by this function"`` ; `type`: ``"FunctionParameters"`` = "FunctionParameters" } } | -| `properties.description` | \{ `description`: ``"A description of what the function does, used by the model to choose when and how to call the function."`` ; `type`: ``"string"`` = "string" } | -| `properties.description.description` | ``"A description of what the function does, used by the model to choose when and how to call the function."`` | -| `properties.description.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."`` | -| `properties.name.type` | ``"string"`` | -| `properties.parameters` | \{ `description`: ``"Parameters accepeted by this function"`` ; `type`: ``"FunctionParameters"`` = "FunctionParameters" } | -| `properties.parameters.description` | ``"Parameters accepeted by this function"`` | -| `properties.parameters.type` | ``"FunctionParameters"`` | - -#### Defined in - -[src/api/schemas/$PartialFunctionDef.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$PartialFunctionDef.ts#L5) - -___ - -### $PatchAgentRequest - -• `Const` **$PatchAgentRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A request for patching an agent"`` | -| `properties` | \{ `about`: \{ `description`: ``"About the agent"`` ; `type`: ``"string"`` = "string" } ; `default_settings`: \{ `description`: ``"Default model settings to start every session with"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } ; `instructions`: \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `model`: \{ `description`: ``"Name of the model that the agent is supposed to use"`` ; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"Name of the agent"`` ; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the agent"`` ; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the agent"`` | -| `properties.about.type` | ``"string"`` | -| `properties.default_settings` | \{ `description`: ``"Default model settings to start every session with"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } | -| `properties.default_settings.description` | ``"Default model settings to start every session with"`` | -| `properties.default_settings.type` | ``"AgentDefaultSettings"`` | -| `properties.instructions` | \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } | -| `properties.instructions.contains` | readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] | -| `properties.instructions.description` | ``"Instructions for the agent"`` | -| `properties.instructions.type` | ``"one-of"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.model` | \{ `description`: ``"Name of the model that the agent is supposed to use"`` ; `type`: ``"string"`` = "string" } | -| `properties.model.description` | ``"Name of the model that the agent is supposed to use"`` | -| `properties.model.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"Name of the agent"`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the agent"`` | -| `properties.name.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$PatchAgentRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$PatchAgentRequest.ts#L5) - -___ - -### $PatchSessionRequest - -• `Const` **$PatchSessionRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A request for patching a session"`` | -| `properties` | \{ `context_overflow`: \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `situation`: \{ `description`: ``"Updated situation for this session"`` ; `type`: ``"string"`` = "string" } ; `token_budget`: \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } } | -| `properties.context_overflow` | \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } | -| `properties.context_overflow.description` | ``"Action to start on context window overflow"`` | -| `properties.context_overflow.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.situation` | \{ `description`: ``"Updated situation for this session"`` ; `type`: ``"string"`` = "string" } | -| `properties.situation.description` | ``"Updated situation for this session"`` | -| `properties.situation.type` | ``"string"`` | -| `properties.token_budget` | \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } | -| `properties.token_budget.description` | ``"Threshold value for the adaptive context functionality"`` | -| `properties.token_budget.type` | ``"number"`` | - -#### Defined in - -[src/api/schemas/$PatchSessionRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$PatchSessionRequest.ts#L5) - -___ - -### $PatchToolRequest - -• `Const` **$PatchToolRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `function`: \{ `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"PartialFunctionDef"`` = "PartialFunctionDef" } } | -| `properties.function` | \{ `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"PartialFunctionDef"`` = "PartialFunctionDef" } | -| `properties.function.description` | ``"Function definition and parameters"`` | -| `properties.function.isRequired` | ``true`` | -| `properties.function.type` | ``"PartialFunctionDef"`` | - -#### Defined in - -[src/api/schemas/$PatchToolRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$PatchToolRequest.ts#L5) - -___ - -### $PatchUserRequest - -• `Const` **$PatchUserRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A request for patching a user"`` | -| `properties` | \{ `about`: \{ `description`: ``"About the user"`` ; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `name`: \{ `description`: ``"Name of the user"`` ; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the user"`` ; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the user"`` | -| `properties.about.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.name` | \{ `description`: ``"Name of the user"`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the user"`` | -| `properties.name.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$PatchUserRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$PatchUserRequest.ts#L5) - -___ - -### $ResourceCreatedResponse - -• `Const` **$ResourceCreatedResponse**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `created_at`: \{ `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `id`: \{ `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `jobs`: \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } } | -| `properties.created_at` | \{ `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.isRequired` | ``true`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.id` | \{ `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.jobs` | \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } | -| `properties.jobs.contains` | \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } | -| `properties.jobs.contains.format` | ``"uuid"`` | -| `properties.jobs.contains.type` | ``"string"`` | -| `properties.jobs.type` | ``"array"`` | - -#### Defined in - -[src/api/schemas/$ResourceCreatedResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ResourceCreatedResponse.ts#L5) - -___ - -### $ResourceDeletedResponse - -• `Const` **$ResourceDeletedResponse**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `deleted_at`: \{ `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `id`: \{ `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `jobs`: \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } } | -| `properties.deleted_at` | \{ `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.deleted_at.format` | ``"date-time"`` | -| `properties.deleted_at.isRequired` | ``true`` | -| `properties.deleted_at.type` | ``"string"`` | -| `properties.id` | \{ `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.jobs` | \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } | -| `properties.jobs.contains` | \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } | -| `properties.jobs.contains.format` | ``"uuid"`` | -| `properties.jobs.contains.type` | ``"string"`` | -| `properties.jobs.type` | ``"array"`` | - -#### Defined in - -[src/api/schemas/$ResourceDeletedResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ResourceDeletedResponse.ts#L5) - -___ - -### $ResourceUpdatedResponse - -• `Const` **$ResourceUpdatedResponse**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `id`: \{ `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `jobs`: \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } ; `updated_at`: \{ `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.id` | \{ `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.jobs` | \{ `contains`: \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" } | -| `properties.jobs.contains` | \{ `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } | -| `properties.jobs.contains.format` | ``"uuid"`` | -| `properties.jobs.contains.type` | ``"string"`` | -| `properties.jobs.type` | ``"array"`` | -| `properties.updated_at` | \{ `format`: ``"date-time"`` = "date-time"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.updated_at.format` | ``"date-time"`` | -| `properties.updated_at.isRequired` | ``true`` | -| `properties.updated_at.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$ResourceUpdatedResponse.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ResourceUpdatedResponse.ts#L5) - -___ - -### $Session - -• `Const` **$Session**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `agent_id`: \{ `description`: ``"Agent ID of agent associated with this session"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `context_overflow`: \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } ; `created_at`: \{ `description`: ``"Session created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `id`: \{ `description`: ``"Session id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `render_templates`: \{ `description`: ``"Render system and assistant message content as jinja templates"`` ; `type`: ``"boolean"`` = "boolean" } ; `situation`: \{ `description`: ``"A specific situation that sets the background for this session"`` ; `type`: ``"string"`` = "string" } ; `summary`: \{ `description`: ``"(null at the beginning) - generated automatically after every interaction"`` ; `type`: ``"string"`` = "string" } ; `token_budget`: \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } ; `updated_at`: \{ `description`: ``"Session updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `user_id`: \{ `description`: ``"User ID of user associated with this session"`` ; `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } } | -| `properties.agent_id` | \{ `description`: ``"Agent ID of agent associated with this session"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.agent_id.description` | ``"Agent ID of agent associated with this session"`` | -| `properties.agent_id.format` | ``"uuid"`` | -| `properties.agent_id.isRequired` | ``true`` | -| `properties.agent_id.type` | ``"string"`` | -| `properties.context_overflow` | \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } | -| `properties.context_overflow.description` | ``"Action to start on context window overflow"`` | -| `properties.context_overflow.type` | ``"string"`` | -| `properties.created_at` | \{ `description`: ``"Session created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Session created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.id` | \{ `description`: ``"Session id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"Session id (UUID)"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.render_templates` | \{ `description`: ``"Render system and assistant message content as jinja templates"`` ; `type`: ``"boolean"`` = "boolean" } | -| `properties.render_templates.description` | ``"Render system and assistant message content as jinja templates"`` | -| `properties.render_templates.type` | ``"boolean"`` | -| `properties.situation` | \{ `description`: ``"A specific situation that sets the background for this session"`` ; `type`: ``"string"`` = "string" } | -| `properties.situation.description` | ``"A specific situation that sets the background for this session"`` | -| `properties.situation.type` | ``"string"`` | -| `properties.summary` | \{ `description`: ``"(null at the beginning) - generated automatically after every interaction"`` ; `type`: ``"string"`` = "string" } | -| `properties.summary.description` | ``"(null at the beginning) - generated automatically after every interaction"`` | -| `properties.summary.type` | ``"string"`` | -| `properties.token_budget` | \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } | -| `properties.token_budget.description` | ``"Threshold value for the adaptive context functionality"`` | -| `properties.token_budget.type` | ``"number"`` | -| `properties.updated_at` | \{ `description`: ``"Session updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.updated_at.description` | ``"Session updated at (RFC-3339 format)"`` | -| `properties.updated_at.format` | ``"date-time"`` | -| `properties.updated_at.type` | ``"string"`` | -| `properties.user_id` | \{ `description`: ``"User ID of user associated with this session"`` ; `format`: ``"uuid"`` = "uuid"; `type`: ``"string"`` = "string" } | -| `properties.user_id.description` | ``"User ID of user associated with this session"`` | -| `properties.user_id.format` | ``"uuid"`` | -| `properties.user_id.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$Session.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$Session.ts#L5) - -___ - -### $Suggestion - -• `Const` **$Suggestion**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `content`: \{ `description`: ``"The content of the suggestion"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `created_at`: \{ `description`: ``"Suggestion created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `message_id`: \{ `description`: ``"The message that produced it"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `session_id`: \{ `description`: ``"Session this suggestion belongs to"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `target`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.content` | \{ `description`: ``"The content of the suggestion"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.content.description` | ``"The content of the suggestion"`` | -| `properties.content.isRequired` | ``true`` | -| `properties.content.type` | ``"string"`` | -| `properties.created_at` | \{ `description`: ``"Suggestion created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"Suggestion created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.message_id` | \{ `description`: ``"The message that produced it"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.message_id.description` | ``"The message that produced it"`` | -| `properties.message_id.format` | ``"uuid"`` | -| `properties.message_id.isRequired` | ``true`` | -| `properties.message_id.type` | ``"string"`` | -| `properties.session_id` | \{ `description`: ``"Session this suggestion belongs to"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.session_id.description` | ``"Session this suggestion belongs to"`` | -| `properties.session_id.format` | ``"uuid"`` | -| `properties.session_id.isRequired` | ``true`` | -| `properties.session_id.type` | ``"string"`` | -| `properties.target` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.target.isRequired` | ``true`` | -| `properties.target.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$Suggestion.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$Suggestion.ts#L5) - -___ - -### $Tool - -• `Const` **$Tool**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `function`: \{ `contains`: readonly [\{ `type`: ``"FunctionDef"`` = "FunctionDef" }] ; `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } ; `id`: \{ `description`: ``"Tool ID"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `type`: \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } } | -| `properties.function` | \{ `contains`: readonly [\{ `type`: ``"FunctionDef"`` = "FunctionDef" }] ; `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"one-of"`` = "one-of" } | -| `properties.function.contains` | readonly [\{ `type`: ``"FunctionDef"`` = "FunctionDef" }] | -| `properties.function.description` | ``"Function definition and parameters"`` | -| `properties.function.isRequired` | ``true`` | -| `properties.function.type` | ``"one-of"`` | -| `properties.id` | \{ `description`: ``"Tool ID"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"Tool ID"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.type` | \{ `isRequired`: ``true`` = true; `type`: ``"Enum"`` = "Enum" } | -| `properties.type.isRequired` | ``true`` | -| `properties.type.type` | ``"Enum"`` | - -#### Defined in - -[src/api/schemas/$Tool.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$Tool.ts#L5) - -___ - -### $ToolChoiceOption - -• `Const` **$ToolChoiceOption**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `contains` | readonly [\{ `type`: ``"Enum"`` = "Enum" }, \{ `type`: ``"NamedToolChoice"`` = "NamedToolChoice" }] | -| `description` | ``"Controls which (if any) function is called by the model.\n `none` means the model will not call a function and instead generates a message.\n `auto` means the model can pick between generating a message or calling a function.\n Specifying a particular function via `{\"type: \"function\", \"function\": {\"name\": \"my_function\"}}` forces the model to call that function.\n `none` is the default when no functions are present. `auto` is the default if functions are present.\n "`` | -| `type` | ``"one-of"`` | - -#### Defined in - -[src/api/schemas/$ToolChoiceOption.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$ToolChoiceOption.ts#L5) - -___ - -### $UpdateAgentRequest - -• `Const` **$UpdateAgentRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A valid request payload for updating an agent"`` | -| `properties` | \{ `about`: \{ `description`: ``"About the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `default_settings`: \{ `description`: ``"Default model settings to start every session with"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } ; `instructions`: \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `model`: \{ `description`: ``"Name of the model that the agent is supposed to use"`` ; `type`: ``"string"`` = "string" } ; `name`: \{ `description`: ``"Name of the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the agent"`` | -| `properties.about.isRequired` | ``true`` | -| `properties.about.type` | ``"string"`` | -| `properties.default_settings` | \{ `description`: ``"Default model settings to start every session with"`` ; `type`: ``"AgentDefaultSettings"`` = "AgentDefaultSettings" } | -| `properties.default_settings.description` | ``"Default model settings to start every session with"`` | -| `properties.default_settings.type` | ``"AgentDefaultSettings"`` | -| `properties.instructions` | \{ `contains`: readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] ; `description`: ``"Instructions for the agent"`` ; `type`: ``"one-of"`` = "one-of" } | -| `properties.instructions.contains` | readonly [\{ `type`: ``"string"`` = "string" }, \{ `contains`: \{ `type`: ``"string"`` = "string" } ; `type`: ``"array"`` = "array" }] | -| `properties.instructions.description` | ``"Instructions for the agent"`` | -| `properties.instructions.type` | ``"one-of"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.model` | \{ `description`: ``"Name of the model that the agent is supposed to use"`` ; `type`: ``"string"`` = "string" } | -| `properties.model.description` | ``"Name of the model that the agent is supposed to use"`` | -| `properties.model.type` | ``"string"`` | -| `properties.name` | \{ `description`: ``"Name of the agent"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the agent"`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$UpdateAgentRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$UpdateAgentRequest.ts#L5) - -___ - -### $UpdateSessionRequest - -• `Const` **$UpdateSessionRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A valid request payload for updating a session"`` | -| `properties` | \{ `context_overflow`: \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `situation`: \{ `description`: ``"Updated situation for this session"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `token_budget`: \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } } | -| `properties.context_overflow` | \{ `description`: ``"Action to start on context window overflow"`` ; `type`: ``"string"`` = "string" } | -| `properties.context_overflow.description` | ``"Action to start on context window overflow"`` | -| `properties.context_overflow.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.situation` | \{ `description`: ``"Updated situation for this session"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.situation.description` | ``"Updated situation for this session"`` | -| `properties.situation.isRequired` | ``true`` | -| `properties.situation.type` | ``"string"`` | -| `properties.token_budget` | \{ `description`: ``"Threshold value for the adaptive context functionality"`` ; `type`: ``"number"`` = "number" } | -| `properties.token_budget.description` | ``"Threshold value for the adaptive context functionality"`` | -| `properties.token_budget.type` | ``"number"`` | - -#### Defined in - -[src/api/schemas/$UpdateSessionRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$UpdateSessionRequest.ts#L5) - -___ - -### $UpdateToolRequest - -• `Const` **$UpdateToolRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `function`: \{ `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"FunctionDef"`` = "FunctionDef" } } | -| `properties.function` | \{ `description`: ``"Function definition and parameters"`` ; `isRequired`: ``true`` = true; `type`: ``"FunctionDef"`` = "FunctionDef" } | -| `properties.function.description` | ``"Function definition and parameters"`` | -| `properties.function.isRequired` | ``true`` | -| `properties.function.type` | ``"FunctionDef"`` | - -#### Defined in - -[src/api/schemas/$UpdateToolRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$UpdateToolRequest.ts#L5) - -___ - -### $UpdateUserRequest - -• `Const` **$UpdateUserRequest**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `description` | ``"A valid request payload for updating a user"`` | -| `properties` | \{ `about`: \{ `description`: ``"About the user"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } ; `name`: \{ `description`: ``"Name of the user"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the user"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the user"`` | -| `properties.about.isRequired` | ``true`` | -| `properties.about.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"Optional metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"Optional metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.name` | \{ `description`: ``"Name of the user"`` ; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the user"`` | -| `properties.name.isRequired` | ``true`` | -| `properties.name.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$UpdateUserRequest.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$UpdateUserRequest.ts#L5) - -___ - -### $User - -• `Const` **$User**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `properties` | \{ `about`: \{ `description`: ``"About the user"`` ; `type`: ``"string"`` = "string" } ; `created_at`: \{ `description`: ``"User created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } ; `id`: \{ `description`: ``"User id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } ; `metadata`: \{ `description`: ``"(Optional) metadata"`` ; `properties`: {} = \{} } ; `name`: \{ `description`: ``"Name of the user"`` ; `type`: ``"string"`` = "string" } ; `updated_at`: \{ `description`: ``"User updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } } | -| `properties.about` | \{ `description`: ``"About the user"`` ; `type`: ``"string"`` = "string" } | -| `properties.about.description` | ``"About the user"`` | -| `properties.about.type` | ``"string"`` | -| `properties.created_at` | \{ `description`: ``"User created at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.created_at.description` | ``"User created at (RFC-3339 format)"`` | -| `properties.created_at.format` | ``"date-time"`` | -| `properties.created_at.type` | ``"string"`` | -| `properties.id` | \{ `description`: ``"User id (UUID)"`` ; `format`: ``"uuid"`` = "uuid"; `isRequired`: ``true`` = true; `type`: ``"string"`` = "string" } | -| `properties.id.description` | ``"User id (UUID)"`` | -| `properties.id.format` | ``"uuid"`` | -| `properties.id.isRequired` | ``true`` | -| `properties.id.type` | ``"string"`` | -| `properties.metadata` | \{ `description`: ``"(Optional) metadata"`` ; `properties`: {} = \{} } | -| `properties.metadata.description` | ``"(Optional) metadata"`` | -| `properties.metadata.properties` | {} | -| `properties.name` | \{ `description`: ``"Name of the user"`` ; `type`: ``"string"`` = "string" } | -| `properties.name.description` | ``"Name of the user"`` | -| `properties.name.type` | ``"string"`` | -| `properties.updated_at` | \{ `description`: ``"User updated at (RFC-3339 format)"`` ; `format`: ``"date-time"`` = "date-time"; `type`: ``"string"`` = "string" } | -| `properties.updated_at.description` | ``"User updated at (RFC-3339 format)"`` | -| `properties.updated_at.format` | ``"date-time"`` | -| `properties.updated_at.type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$User.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$User.ts#L5) - -___ - -### $agent\_id - -• `Const` **$agent\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$agent_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$agent_id.ts#L5) - -___ - -### $doc\_id - -• `Const` **$doc\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$doc_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$doc_id.ts#L5) - -___ - -### $job\_id - -• `Const` **$job\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$job_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$job_id.ts#L5) - -___ - -### $memory\_id - -• `Const` **$memory\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$memory_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$memory_id.ts#L5) - -___ - -### $message\_id - -• `Const` **$message\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$message_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$message_id.ts#L5) - -___ - -### $session\_id - -• `Const` **$session\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$session_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$session_id.ts#L5) - -___ - -### $tool\_id - -• `Const` **$tool\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$tool_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$tool_id.ts#L5) - -___ - -### $user\_id - -• `Const` **$user\_id**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `format` | ``"uuid"`` | -| `type` | ``"string"`` | - -#### Defined in - -[src/api/schemas/$user_id.ts:5](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/schemas/$user_id.ts#L5) - -___ - -### OpenAPI - -• `Const` **OpenAPI**: [`OpenAPIConfig`](api.md#openapiconfig) - -#### Defined in - -[src/api/core/OpenAPI.ts:22](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/api/core/OpenAPI.ts#L22) diff --git a/docs/js-sdk-docs/modules/api_JulepApiClient.md b/docs/js-sdk-docs/modules/api_JulepApiClient.md deleted file mode 100644 index 07f3cc365..000000000 --- a/docs/js-sdk-docs/modules/api_JulepApiClient.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / api/JulepApiClient - -# Module: api/JulepApiClient - -## Table of contents - -### Classes - -- [JulepApiClient](../classes/api_JulepApiClient.JulepApiClient.md) diff --git a/docs/js-sdk-docs/modules/managers_agent.md b/docs/js-sdk-docs/modules/managers_agent.md deleted file mode 100644 index 6f5ea9677..000000000 --- a/docs/js-sdk-docs/modules/managers_agent.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/agent - -# Module: managers/agent - -## Table of contents - -### Classes - -- [AgentsManager](../classes/managers_agent.AgentsManager.md) diff --git a/docs/js-sdk-docs/modules/managers_base.md b/docs/js-sdk-docs/modules/managers_base.md deleted file mode 100644 index fd0e930a7..000000000 --- a/docs/js-sdk-docs/modules/managers_base.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/base - -# Module: managers/base - -## Table of contents - -### Classes - -- [BaseManager](../classes/managers_base.BaseManager.md) diff --git a/docs/js-sdk-docs/modules/managers_doc.md b/docs/js-sdk-docs/modules/managers_doc.md deleted file mode 100644 index b7a31fa3a..000000000 --- a/docs/js-sdk-docs/modules/managers_doc.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/doc - -# Module: managers/doc - -## Table of contents - -### Classes - -- [DocsManager](../classes/managers_doc.DocsManager.md) diff --git a/docs/js-sdk-docs/modules/managers_memory.md b/docs/js-sdk-docs/modules/managers_memory.md deleted file mode 100644 index 720bd4e70..000000000 --- a/docs/js-sdk-docs/modules/managers_memory.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/memory - -# Module: managers/memory - -## Table of contents - -### Classes - -- [MemoriesManager](../classes/managers_memory.MemoriesManager.md) diff --git a/docs/js-sdk-docs/modules/managers_session.md b/docs/js-sdk-docs/modules/managers_session.md deleted file mode 100644 index 38c9d75ef..000000000 --- a/docs/js-sdk-docs/modules/managers_session.md +++ /dev/null @@ -1,13 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/session - -# Module: managers/session - -## Table of contents - -### Classes - -- [SessionsManager](../classes/managers_session.SessionsManager.md) - -### Interfaces - -- [CreateSessionPayload](../interfaces/managers_session.CreateSessionPayload.md) diff --git a/docs/js-sdk-docs/modules/managers_tool.md b/docs/js-sdk-docs/modules/managers_tool.md deleted file mode 100644 index 1c425999c..000000000 --- a/docs/js-sdk-docs/modules/managers_tool.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/tool - -# Module: managers/tool - -## Table of contents - -### Classes - -- [ToolsManager](../classes/managers_tool.ToolsManager.md) diff --git a/docs/js-sdk-docs/modules/managers_user.md b/docs/js-sdk-docs/modules/managers_user.md deleted file mode 100644 index d0d6bffbf..000000000 --- a/docs/js-sdk-docs/modules/managers_user.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / managers/user - -# Module: managers/user - -## Table of contents - -### Classes - -- [UsersManager](../classes/managers_user.UsersManager.md) diff --git a/docs/js-sdk-docs/modules/utils_invariant.md b/docs/js-sdk-docs/modules/utils_invariant.md deleted file mode 100644 index 47dc67d54..000000000 --- a/docs/js-sdk-docs/modules/utils_invariant.md +++ /dev/null @@ -1,32 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / utils/invariant - -# Module: utils/invariant - -## Table of contents - -### Functions - -- [invariant](utils_invariant.md#invariant) - -## Functions - -### invariant - -▸ **invariant**(`condition`, `message?`): `void` - -Ensures that a condition is met, throwing a custom error message if not. - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `condition` | `any` | `undefined` | The condition to test. If falsy, an error is thrown. | -| `message` | `string` | `"Invariant Violation"` | Optional. The error message to throw if the condition is not met. Defaults to "Invariant Violation". | - -#### Returns - -`void` - -#### Defined in - -[src/utils/invariant.ts:6](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/utils/invariant.ts#L6) diff --git a/docs/js-sdk-docs/modules/utils_isValidUuid4.md b/docs/js-sdk-docs/modules/utils_isValidUuid4.md deleted file mode 100644 index ea1ea5c8d..000000000 --- a/docs/js-sdk-docs/modules/utils_isValidUuid4.md +++ /dev/null @@ -1,36 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / utils/isValidUuid4 - -# Module: utils/isValidUuid4 - -## Table of contents - -### Functions - -- [isValidUuid4](utils_isValidUuid4.md#isvaliduuid4) - -## Functions - -### isValidUuid4 - -▸ **isValidUuid4**(`uuidToTest`): `boolean` - -Validates if the input string is a valid UUID v4. -This function performs a two-step validation process: -1. Validates the format of the UUID using `uuidValidate`. -2. Checks that the version of the UUID is 4 using `uuidVersion`. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `uuidToTest` | `string` | The string to test for a valid UUID v4. | - -#### Returns - -`boolean` - -True if the input is a valid UUID v4, otherwise false. - -#### Defined in - -[src/utils/isValidUuid4.ts:11](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/utils/isValidUuid4.ts#L11) diff --git a/docs/js-sdk-docs/modules/utils_openaiPatch.md b/docs/js-sdk-docs/modules/utils_openaiPatch.md deleted file mode 100644 index adddee617..000000000 --- a/docs/js-sdk-docs/modules/utils_openaiPatch.md +++ /dev/null @@ -1,33 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / utils/openaiPatch - -# Module: utils/openaiPatch - -## Table of contents - -### Functions - -- [patchCreate](utils_openaiPatch.md#patchcreate) - -## Functions - -### patchCreate - -▸ **patchCreate**(`client`, `scope?`): `any` - -Patches the 'create' method of an OpenAI client instance to ensure a default model is used if none is specified. -This is useful for enforcing a consistent model usage across different parts of the SDK. - -#### Parameters - -| Name | Type | Default value | Description | -| :------ | :------ | :------ | :------ | -| `client` | `any` | `undefined` | The OpenAI client instance to be patched. | -| `scope` | `any` | `null` | Optional. The scope in which the original 'create' method is bound. Defaults to the client itself if not provided. | - -#### Returns - -`any` - -#### Defined in - -[src/utils/openaiPatch.ts:8](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/utils/openaiPatch.ts#L8) diff --git a/docs/js-sdk-docs/modules/utils_requestConstructor.md b/docs/js-sdk-docs/modules/utils_requestConstructor.md deleted file mode 100644 index a18bf52fe..000000000 --- a/docs/js-sdk-docs/modules/utils_requestConstructor.md +++ /dev/null @@ -1,9 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / utils/requestConstructor - -# Module: utils/requestConstructor - -## Table of contents - -### Classes - -- [CustomHttpRequest](../classes/utils_requestConstructor.CustomHttpRequest.md) diff --git a/docs/js-sdk-docs/modules/utils_xor.md b/docs/js-sdk-docs/modules/utils_xor.md deleted file mode 100644 index 7df656742..000000000 --- a/docs/js-sdk-docs/modules/utils_xor.md +++ /dev/null @@ -1,30 +0,0 @@ -[@julep/sdk](../README.md) / [Modules](../modules.md) / utils/xor - -# Module: utils/xor - -## Table of contents - -### Functions - -- [xor](utils_xor.md#xor) - -## Functions - -### xor - -▸ **xor**(`a`, `b`): `any` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `a` | `any` | -| `b` | `any` | - -#### Returns - -`any` - -#### Defined in - -[src/utils/xor.ts:1](https://github.com/julep-ai/julep/blob/1aacc650d71dfc8cc6e2993599c2493784d992ef/sdks/ts/src/utils/xor.ts#L1) diff --git a/docs/julep-concepts.md b/docs/julep-concepts.md index 14177343c..b6fc945d7 100644 --- a/docs/julep-concepts.md +++ b/docs/julep-concepts.md @@ -702,7 +702,7 @@ Remember to replace `YOUR_API_KEY`, `{agent_id}`, and `{tool_id}` with your actu ### Partial application of arguments to tools -Often, it's necessary to _partial_ some arguments of a particular tool. You can do that by setting the `x-tool-parameters` field on the `metadata` of the required scope. For instance, say you have the following user-defined function tool: +Often, it's necessary to _partial_ some arguments of a particular tool. You can do that by setting the `x-integration-args` field on the `metadata` of the required scope. For instance, say you have the following user-defined function tool: ```yaml name: check_account_status description: Get the account status for a customer @@ -719,7 +719,7 @@ When chatting with a particular user, the `customer_id` field is expected to be { "metadata": { ... - "x-tool-parameters": { + "x-integration-args": { "function:check_account_status": { "customer_id": 42 } @@ -737,12 +737,12 @@ This follows the precedence order of `metadata` fields. For example, say you are user: id: 11 metadata: - x-tool-parameters: + x-integration-args: favorite: Emma Roberts agent: id: 22 metadata: - x-tool-parameters: + x-integration-args: favorite: Emma Watson tools: - type: function @@ -752,7 +752,7 @@ agent: session: id: 123 metadata: - x-tool-parameters: + x-integration-args: favorite: Emma Stone ``` diff --git a/docs/python-sdk-docs/README.md b/docs/python-sdk-docs/README.md deleted file mode 100644 index cc09eca06..000000000 --- a/docs/python-sdk-docs/README.md +++ /dev/null @@ -1,211 +0,0 @@ -# Julep Python SDK Index - -> Auto-generated documentation index. - -A full list of `Julep Python SDK` project modules. - -- [Julep](julep/index.md#julep) - - [Julep Python Library](julep/api/index.md#julep-python-library) - - [Client](julep/api/client.md#client) - - [Core](julep/api/core/index.md#core) - - [ApiError](julep/api/core/api_error.md#apierror) - - [Client Wrapper](julep/api/core/client_wrapper.md#client-wrapper) - - [Datetime Utils](julep/api/core/datetime_utils.md#datetime-utils) - - [File](julep/api/core/file.md#file) - - [HttpClient](julep/api/core/http_client.md#httpclient) - - [Jsonable Encoder](julep/api/core/jsonable_encoder.md#jsonable-encoder) - - [Pydantic Utilities](julep/api/core/pydantic_utilities.md#pydantic-utilities) - - [Query Encoder](julep/api/core/query_encoder.md#query-encoder) - - [Remove None From Dict](julep/api/core/remove_none_from_dict.md#remove-none-from-dict) - - [RequestOptions](julep/api/core/request_options.md#requestoptions) - - [Environment](julep/api/environment.md#environment) - - [Types](julep/api/types/index.md#types) - - [Agent Docs Route List Request Direction](julep/api/types/agent_docs_route_list_request_direction.md#agent-docs-route-list-request-direction) - - [Agent Docs Route List Request Sort By](julep/api/types/agent_docs_route_list_request_sort_by.md#agent-docs-route-list-request-sort-by) - - [AgentDocsRouteListResponse](julep/api/types/agent_docs_route_list_response.md#agentdocsroutelistresponse) - - [Agent Tools Route List Request Direction](julep/api/types/agent_tools_route_list_request_direction.md#agent-tools-route-list-request-direction) - - [Agent Tools Route List Request Sort By](julep/api/types/agent_tools_route_list_request_sort_by.md#agent-tools-route-list-request-sort-by) - - [AgentToolsRouteListResponse](julep/api/types/agent_tools_route_list_response.md#agenttoolsroutelistresponse) - - [AgentsAgent](julep/api/types/agents_agent.md#agentsagent) - - [Agents Agent Instructions](julep/api/types/agents_agent_instructions.md#agents-agent-instructions) - - [AgentsCreateAgentRequest](julep/api/types/agents_create_agent_request.md#agentscreateagentrequest) - - [Agents Create Agent Request Instructions](julep/api/types/agents_create_agent_request_instructions.md#agents-create-agent-request-instructions) - - [AgentsCreateOrUpdateAgentRequest](julep/api/types/agents_create_or_update_agent_request.md#agentscreateorupdateagentrequest) - - [Agents Docs Search Route Search Request Body](julep/api/types/agents_docs_search_route_search_request_body.md#agents-docs-search-route-search-request-body) - - [Agents Patch Agent Request Instructions](julep/api/types/agents_patch_agent_request_instructions.md#agents-patch-agent-request-instructions) - - [Agents Route List Request Direction](julep/api/types/agents_route_list_request_direction.md#agents-route-list-request-direction) - - [Agents Route List Request Sort By](julep/api/types/agents_route_list_request_sort_by.md#agents-route-list-request-sort-by) - - [AgentsRouteListResponse](julep/api/types/agents_route_list_response.md#agentsroutelistresponse) - - [AgentsUpdateAgentRequest](julep/api/types/agents_update_agent_request.md#agentsupdateagentrequest) - - [Agents Update Agent Request Instructions](julep/api/types/agents_update_agent_request_instructions.md#agents-update-agent-request-instructions) - - [ChatBaseChatOutput](julep/api/types/chat_base_chat_output.md#chatbasechatoutput) - - [ChatBaseChatResponse](julep/api/types/chat_base_chat_response.md#chatbasechatresponse) - - [ChatBaseTokenLogProb](julep/api/types/chat_base_token_log_prob.md#chatbasetokenlogprob) - - [ChatChatInputData](julep/api/types/chat_chat_input_data.md#chatchatinputdata) - - [Chat Chat Input Data Tool Choice](julep/api/types/chat_chat_input_data_tool_choice.md#chat-chat-input-data-tool-choice) - - [ChatChatOutputChunk](julep/api/types/chat_chat_output_chunk.md#chatchatoutputchunk) - - [ChatChatSettings](julep/api/types/chat_chat_settings.md#chatchatsettings) - - [ChatChunkChatResponse](julep/api/types/chat_chunk_chat_response.md#chatchunkchatresponse) - - [ChatCompetionUsage](julep/api/types/chat_competion_usage.md#chatcompetionusage) - - [ChatCompletionResponseFormat](julep/api/types/chat_completion_response_format.md#chatcompletionresponseformat) - - [Chat Completion Response Format Type](julep/api/types/chat_completion_response_format_type.md#chat-completion-response-format-type) - - [ChatDefaultChatSettings](julep/api/types/chat_default_chat_settings.md#chatdefaultchatsettings) - - [Chat Finish Reason](julep/api/types/chat_finish_reason.md#chat-finish-reason) - - [ChatLogProbResponse](julep/api/types/chat_log_prob_response.md#chatlogprobresponse) - - [ChatMessageChatResponse](julep/api/types/chat_message_chat_response.md#chatmessagechatresponse) - - [Chat Message Chat Response Choices Item](julep/api/types/chat_message_chat_response_choices_item.md#chat-message-chat-response-choices-item) - - [ChatMultipleChatOutput](julep/api/types/chat_multiple_chat_output.md#chatmultiplechatoutput) - - [ChatOpenAiSettings](julep/api/types/chat_open_ai_settings.md#chatopenaisettings) - - [Chat Route Generate Response](julep/api/types/chat_route_generate_response.md#chat-route-generate-response) - - [ChatSingleChatOutput](julep/api/types/chat_single_chat_output.md#chatsinglechatoutput) - - [ChatTokenLogProb](julep/api/types/chat_token_log_prob.md#chattokenlogprob) - - [Common Identifier Safe Unicode](julep/api/types/common_identifier_safe_unicode.md#common-identifier-safe-unicode) - - [Common Limit](julep/api/types/common_limit.md#common-limit) - - [Common Logit Bias](julep/api/types/common_logit_bias.md#common-logit-bias) - - [Common Offset](julep/api/types/common_offset.md#common-offset) - - [Common Py Expression](julep/api/types/common_py_expression.md#common-py-expression) - - [CommonResourceCreatedResponse](julep/api/types/common_resource_created_response.md#commonresourcecreatedresponse) - - [CommonResourceDeletedResponse](julep/api/types/common_resource_deleted_response.md#commonresourcedeletedresponse) - - [CommonResourceUpdatedResponse](julep/api/types/common_resource_updated_response.md#commonresourceupdatedresponse) - - [Common Tool Ref](julep/api/types/common_tool_ref.md#common-tool-ref) - - [Common Uuid](julep/api/types/common_uuid.md#common-uuid) - - [Common Valid Python Identifier](julep/api/types/common_valid_python_identifier.md#common-valid-python-identifier) - - [DocsBaseDocSearchRequest](julep/api/types/docs_base_doc_search_request.md#docsbasedocsearchrequest) - - [DocsCreateDocRequest](julep/api/types/docs_create_doc_request.md#docscreatedocrequest) - - [Docs Create Doc Request Content](julep/api/types/docs_create_doc_request_content.md#docs-create-doc-request-content) - - [DocsDoc](julep/api/types/docs_doc.md#docsdoc) - - [Docs Doc Content](julep/api/types/docs_doc_content.md#docs-doc-content) - - [DocsDocOwner](julep/api/types/docs_doc_owner.md#docsdocowner) - - [Docs Doc Owner Role](julep/api/types/docs_doc_owner_role.md#docs-doc-owner-role) - - [DocsDocReference](julep/api/types/docs_doc_reference.md#docsdocreference) - - [DocsDocSearchResponse](julep/api/types/docs_doc_search_response.md#docsdocsearchresponse) - - [DocsEmbedQueryRequest](julep/api/types/docs_embed_query_request.md#docsembedqueryrequest) - - [Docs Embed Query Request Text](julep/api/types/docs_embed_query_request_text.md#docs-embed-query-request-text) - - [DocsEmbedQueryResponse](julep/api/types/docs_embed_query_response.md#docsembedqueryresponse) - - [DocsHybridDocSearchRequest](julep/api/types/docs_hybrid_doc_search_request.md#docshybriddocsearchrequest) - - [DocsSnippet](julep/api/types/docs_snippet.md#docssnippet) - - [DocsTextOnlyDocSearchRequest](julep/api/types/docs_text_only_doc_search_request.md#docstextonlydocsearchrequest) - - [DocsVectorDocSearchRequest](julep/api/types/docs_vector_doc_search_request.md#docsvectordocsearchrequest) - - [EntriesBaseEntry](julep/api/types/entries_base_entry.md#entriesbaseentry) - - [Entries Base Entry Content](julep/api/types/entries_base_entry_content.md#entries-base-entry-content) - - [Entries Base Entry Content Item](julep/api/types/entries_base_entry_content_item.md#entries-base-entry-content-item) - - [Entries Base Entry Content Item Item](julep/api/types/entries_base_entry_content_item_item.md#entries-base-entry-content-item-item) - - [Entries Base Entry Source](julep/api/types/entries_base_entry_source.md#entries-base-entry-source) - - [EntriesChatMlImageContentPart](julep/api/types/entries_chat_ml_image_content_part.md#entrieschatmlimagecontentpart) - - [Entries Chat Ml Role](julep/api/types/entries_chat_ml_role.md#entries-chat-ml-role) - - [EntriesChatMlTextContentPart](julep/api/types/entries_chat_ml_text_content_part.md#entrieschatmltextcontentpart) - - [EntriesEntry](julep/api/types/entries_entry.md#entriesentry) - - [EntriesHistory](julep/api/types/entries_history.md#entrieshistory) - - [Entries Image Detail](julep/api/types/entries_image_detail.md#entries-image-detail) - - [EntriesImageUrl](julep/api/types/entries_image_url.md#entriesimageurl) - - [EntriesInputChatMlMessage](julep/api/types/entries_input_chat_ml_message.md#entriesinputchatmlmessage) - - [Entries Input Chat Ml Message Content](julep/api/types/entries_input_chat_ml_message_content.md#entries-input-chat-ml-message-content) - - [Entries Input Chat Ml Message Content Item](julep/api/types/entries_input_chat_ml_message_content_item.md#entries-input-chat-ml-message-content-item) - - [EntriesRelation](julep/api/types/entries_relation.md#entriesrelation) - - [Execution Transitions Route List Request Direction](julep/api/types/execution_transitions_route_list_request_direction.md#execution-transitions-route-list-request-direction) - - [Execution Transitions Route List Request Sort By](julep/api/types/execution_transitions_route_list_request_sort_by.md#execution-transitions-route-list-request-sort-by) - - [ExecutionTransitionsRouteListResponse](julep/api/types/execution_transitions_route_list_response.md#executiontransitionsroutelistresponse) - - [ExecutionTransitionsRouteListResponseResultsItem](julep/api/types/execution_transitions_route_list_response_results_item.md#executiontransitionsroutelistresponseresultsitem) - - [ExecutionsExecution](julep/api/types/executions_execution.md#executionsexecution) - - [Executions Execution Status](julep/api/types/executions_execution_status.md#executions-execution-status) - - [ExecutionsResumeExecutionRequest](julep/api/types/executions_resume_execution_request.md#executionsresumeexecutionrequest) - - [ExecutionsStopExecutionRequest](julep/api/types/executions_stop_execution_request.md#executionsstopexecutionrequest) - - [ExecutionsTransition](julep/api/types/executions_transition.md#executionstransition) - - [ExecutionsTransitionTarget](julep/api/types/executions_transition_target.md#executionstransitiontarget) - - [Executions Transition Type](julep/api/types/executions_transition_type.md#executions-transition-type) - - [Executions Update Execution Request](julep/api/types/executions_update_execution_request.md#executions-update-execution-request) - - [Jobs Job State](julep/api/types/jobs_job_state.md#jobs-job-state) - - [JobsJobStatus](julep/api/types/jobs_job_status.md#jobsjobstatus) - - [Sessions Context Overflow Type](julep/api/types/sessions_context_overflow_type.md#sessions-context-overflow-type) - - [SessionsCreateOrUpdateSessionRequest](julep/api/types/sessions_create_or_update_session_request.md#sessionscreateorupdatesessionrequest) - - [SessionsCreateSessionRequest](julep/api/types/sessions_create_session_request.md#sessionscreatesessionrequest) - - [SessionsMultiAgentMultiUserSession](julep/api/types/sessions_multi_agent_multi_user_session.md#sessionsmultiagentmultiusersession) - - [SessionsMultiAgentNoUserSession](julep/api/types/sessions_multi_agent_no_user_session.md#sessionsmultiagentnousersession) - - [SessionsMultiAgentSingleUserSession](julep/api/types/sessions_multi_agent_single_user_session.md#sessionsmultiagentsingleusersession) - - [Sessions Route List Request Direction](julep/api/types/sessions_route_list_request_direction.md#sessions-route-list-request-direction) - - [Sessions Route List Request Sort By](julep/api/types/sessions_route_list_request_sort_by.md#sessions-route-list-request-sort-by) - - [SessionsRouteListResponse](julep/api/types/sessions_route_list_response.md#sessionsroutelistresponse) - - [Sessions Session](julep/api/types/sessions_session.md#sessions-session) - - [SessionsSingleAgentMultiUserSession](julep/api/types/sessions_single_agent_multi_user_session.md#sessionssingleagentmultiusersession) - - [SessionsSingleAgentNoUserSession](julep/api/types/sessions_single_agent_no_user_session.md#sessionssingleagentnousersession) - - [SessionsSingleAgentSingleUserSession](julep/api/types/sessions_single_agent_single_user_session.md#sessionssingleagentsingleusersession) - - [Task Executions Route List Request Direction](julep/api/types/task_executions_route_list_request_direction.md#task-executions-route-list-request-direction) - - [Task Executions Route List Request Sort By](julep/api/types/task_executions_route_list_request_sort_by.md#task-executions-route-list-request-sort-by) - - [TaskExecutionsRouteListResponse](julep/api/types/task_executions_route_list_response.md#taskexecutionsroutelistresponse) - - [Tasks Base Workflow Step](julep/api/types/tasks_base_workflow_step.md#tasks-base-workflow-step) - - [TasksCaseThen](julep/api/types/tasks_case_then.md#taskscasethen) - - [Tasks Case Then Then](julep/api/types/tasks_case_then_then.md#tasks-case-then-then) - - [TasksCreateTaskRequest](julep/api/types/tasks_create_task_request.md#taskscreatetaskrequest) - - [Tasks Create Task Request Main Item](julep/api/types/tasks_create_task_request_main_item.md#tasks-create-task-request-main-item) - - [TasksEmbedStep](julep/api/types/tasks_embed_step.md#tasksembedstep) - - [TasksErrorWorkflowStep](julep/api/types/tasks_error_workflow_step.md#taskserrorworkflowstep) - - [TasksEvaluateStep](julep/api/types/tasks_evaluate_step.md#tasksevaluatestep) - - [TasksForeachDo](julep/api/types/tasks_foreach_do.md#tasksforeachdo) - - [Tasks Foreach Do Do](julep/api/types/tasks_foreach_do_do.md#tasks-foreach-do-do) - - [TasksForeachStep](julep/api/types/tasks_foreach_step.md#tasksforeachstep) - - [TasksGetStep](julep/api/types/tasks_get_step.md#tasksgetstep) - - [TasksIfElseWorkflowStep](julep/api/types/tasks_if_else_workflow_step.md#tasksifelseworkflowstep) - - [Tasks If Else Workflow Step Else](julep/api/types/tasks_if_else_workflow_step_else.md#tasks-if-else-workflow-step-else) - - [Tasks If Else Workflow Step Then](julep/api/types/tasks_if_else_workflow_step_then.md#tasks-if-else-workflow-step-then) - - [TasksLogStep](julep/api/types/tasks_log_step.md#taskslogstep) - - [TasksMapOver](julep/api/types/tasks_map_over.md#tasksmapover) - - [TasksMapReduceStep](julep/api/types/tasks_map_reduce_step.md#tasksmapreducestep) - - [TasksParallelStep](julep/api/types/tasks_parallel_step.md#tasksparallelstep) - - [Tasks Parallel Step Parallel Item](julep/api/types/tasks_parallel_step_parallel_item.md#tasks-parallel-step-parallel-item) - - [Tasks Patch Task Request Main Item](julep/api/types/tasks_patch_task_request_main_item.md#tasks-patch-task-request-main-item) - - [TasksPromptStep](julep/api/types/tasks_prompt_step.md#taskspromptstep) - - [Tasks Prompt Step Prompt](julep/api/types/tasks_prompt_step_prompt.md#tasks-prompt-step-prompt) - - [TasksReturnStep](julep/api/types/tasks_return_step.md#tasksreturnstep) - - [Tasks Route List Request Direction](julep/api/types/tasks_route_list_request_direction.md#tasks-route-list-request-direction) - - [Tasks Route List Request Sort By](julep/api/types/tasks_route_list_request_sort_by.md#tasks-route-list-request-sort-by) - - [TasksRouteListResponse](julep/api/types/tasks_route_list_response.md#tasksroutelistresponse) - - [TasksSearchStep](julep/api/types/tasks_search_step.md#taskssearchstep) - - [Tasks Search Step Search](julep/api/types/tasks_search_step_search.md#tasks-search-step-search) - - [TasksSetKey](julep/api/types/tasks_set_key.md#taskssetkey) - - [TasksSetStep](julep/api/types/tasks_set_step.md#taskssetstep) - - [Tasks Set Step Set](julep/api/types/tasks_set_step_set.md#tasks-set-step-set) - - [TasksSleepFor](julep/api/types/tasks_sleep_for.md#taskssleepfor) - - [TasksSleepStep](julep/api/types/tasks_sleep_step.md#taskssleepstep) - - [TasksSwitchStep](julep/api/types/tasks_switch_step.md#tasksswitchstep) - - [TasksTask](julep/api/types/tasks_task.md#taskstask) - - [Tasks Task Main Item](julep/api/types/tasks_task_main_item.md#tasks-task-main-item) - - [TasksTaskTool](julep/api/types/tasks_task_tool.md#taskstasktool) - - [TasksToolCallStep](julep/api/types/tasks_tool_call_step.md#taskstoolcallstep) - - [Tasks Update Task Request Main Item](julep/api/types/tasks_update_task_request_main_item.md#tasks-update-task-request-main-item) - - [TasksWaitForInputStep](julep/api/types/tasks_wait_for_input_step.md#taskswaitforinputstep) - - [TasksYieldStep](julep/api/types/tasks_yield_step.md#tasksyieldstep) - - [ToolsChosenFunctionCall](julep/api/types/tools_chosen_function_call.md#toolschosenfunctioncall) - - [Tools Chosen Tool Call](julep/api/types/tools_chosen_tool_call.md#tools-chosen-tool-call) - - [ToolsCreateToolRequest](julep/api/types/tools_create_tool_request.md#toolscreatetoolrequest) - - [ToolsFunctionCallOption](julep/api/types/tools_function_call_option.md#toolsfunctioncalloption) - - [ToolsFunctionDef](julep/api/types/tools_function_def.md#toolsfunctiondef) - - [ToolsFunctionTool](julep/api/types/tools_function_tool.md#toolsfunctiontool) - - [ToolsNamedFunctionChoice](julep/api/types/tools_named_function_choice.md#toolsnamedfunctionchoice) - - [Tools Named Tool Choice](julep/api/types/tools_named_tool_choice.md#tools-named-tool-choice) - - [Tools Tool](julep/api/types/tools_tool.md#tools-tool) - - [ToolsToolResponse](julep/api/types/tools_tool_response.md#toolstoolresponse) - - [Tools Tool Type](julep/api/types/tools_tool_type.md#tools-tool-type) - - [User Docs Route List Request Direction](julep/api/types/user_docs_route_list_request_direction.md#user-docs-route-list-request-direction) - - [User Docs Route List Request Sort By](julep/api/types/user_docs_route_list_request_sort_by.md#user-docs-route-list-request-sort-by) - - [UserDocsRouteListResponse](julep/api/types/user_docs_route_list_response.md#userdocsroutelistresponse) - - [User Docs Search Route Search Request Body](julep/api/types/user_docs_search_route_search_request_body.md#user-docs-search-route-search-request-body) - - [UsersCreateOrUpdateUserRequest](julep/api/types/users_create_or_update_user_request.md#userscreateorupdateuserrequest) - - [UsersCreateUserRequest](julep/api/types/users_create_user_request.md#userscreateuserrequest) - - [Users Route List Request Direction](julep/api/types/users_route_list_request_direction.md#users-route-list-request-direction) - - [Users Route List Request Sort By](julep/api/types/users_route_list_request_sort_by.md#users-route-list-request-sort-by) - - [UsersRouteListResponse](julep/api/types/users_route_list_response.md#usersroutelistresponse) - - [UsersUser](julep/api/types/users_user.md#usersuser) - - [Client](julep/client.md#client) - - [Env](julep/env.md#env) - - [Managers](julep/managers/index.md#managers) - - [Agent](julep/managers/agent.md#agent) - - [Base](julep/managers/base.md#base) - - [Doc](julep/managers/doc.md#doc) - - [Memory](julep/managers/memory.md#memory) - - [Session](julep/managers/session.md#session) - - [Task](julep/managers/task.md#task) - - [Tool](julep/managers/tool.md#tool) - - [Types](julep/managers/types.md#types) - - [User](julep/managers/user.md#user) - - [Utils](julep/utils/index.md#utils) - - [Openai Patch](julep/utils/openai_patch.md#openai-patch) diff --git a/docs/python-sdk-docs/julep/api/client.md b/docs/python-sdk-docs/julep/api/client.md deleted file mode 100644 index 34fe3b1f4..000000000 --- a/docs/python-sdk-docs/julep/api/client.md +++ /dev/null @@ -1,6554 +0,0 @@ -# Client - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Julep Python Library](./index.md#julep-python-library) / Client - -> Auto-generated documentation for [julep.api.client](../../../../../../julep/api/client.py) module. - -#### Attributes - -- `OMIT` - this is used as the default value for optional parameters: typing.cast(typing.Any, ...) - - -- [Client](#client) - - [AsyncJulepApi](#asyncjulepapi) - - [JulepApi](#julepapi) - -## AsyncJulepApi - -[Show source in client.py:3706](../../../../../../julep/api/client.py#L3706) - -Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions. - -Parameters ----------- -base_url : typing.Optional[str] - The base url to use for requests from the client. - -environment : JulepApiEnvironment - The environment to use for requests from the client. from .environment import JulepApiEnvironment - -Defaults to JulepApiEnvironment.DEFAULT - -auth_key : str -api_key : str -timeout : typing.Optional[float] - The timeout to be used, in seconds, for requests. By default the timeout is 300 seconds, unless a custom httpx client is used, in which case this default is not enforced. - -follow_redirects : typing.Optional[bool] - Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in. - -httpx_client : typing.Optional[httpx.AsyncClient] - The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration. - -Examples --------- -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -#### Signature - -```python -class AsyncJulepApi: - def __init__( - self, - base_url: typing.Optional[str] = None, - environment: JulepApiEnvironment = JulepApiEnvironment.DEFAULT, - auth_key: str, - api_key: str, - timeout: typing.Optional[float] = None, - follow_redirects: typing.Optional[bool] = True, - httpx_client: typing.Optional[httpx.AsyncClient] = None, - ): ... -``` - -### AsyncJulepApi().agent_docs_route_create - -[Show source in client.py:4404](../../../../../../julep/api/client.py#L4404) - -Create a Doc for this Agent - -Parameters ----------- -id : CommonUuid - ID of parent resource - -title : CommonIdentifierSafeUnicode - Title describing what this document contains - -content : DocsCreateDocRequestContent - Contents of the document - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_docs_route_create( - id="id", - title="title", - content="content", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_docs_route_create( - self, - id: CommonUuid, - title: CommonIdentifierSafeUnicode, - content: DocsCreateDocRequestContent, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agent_docs_route_delete - -[Show source in client.py:4474](../../../../../../julep/api/client.py#L4474) - -Delete a Doc for this Agent - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_docs_route_delete( - id="id", - child_id="child_id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_docs_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().agent_docs_route_list - -[Show source in client.py:4317](../../../../../../julep/api/client.py#L4317) - -List Docs owned by an Agent - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : AgentDocsRouteListRequestSortBy - Sort by a field - -direction : AgentDocsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentDocsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_docs_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_docs_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: AgentDocsRouteListRequestSortBy, - direction: AgentDocsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> AgentDocsRouteListResponse: ... -``` - -### AsyncJulepApi().agent_tools_route_create - -[Show source in client.py:5127](../../../../../../julep/api/client.py#L5127) - -Create a new tool for this agent - -Parameters ----------- -id : CommonUuid - ID of parent resource - -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsCreateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_tools_route_create( - id="id", - name="name", - about="about", - model="model", - instructions="instructions", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_tools_route_create( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsCreateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agent_tools_route_delete - -[Show source in client.py:5309](../../../../../../julep/api/client.py#L5309) - -Delete an existing tool by id - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_tools_route_delete( - id="id", - child_id="child_id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_tools_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().agent_tools_route_list - -[Show source in client.py:5040](../../../../../../julep/api/client.py#L5040) - -List tools of the given agent - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : AgentToolsRouteListRequestSortBy - Sort by a field - -direction : AgentToolsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentToolsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_tools_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_tools_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: AgentToolsRouteListRequestSortBy, - direction: AgentToolsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> AgentToolsRouteListResponse: ... -``` - -### AsyncJulepApi().agent_tools_route_patch - -[Show source in client.py:5369](../../../../../../julep/api/client.py#L5369) - -Update an existing tool (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be patched - -type : typing.Optional[ToolsToolType] - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - -name : typing.Optional[CommonValidPythonIdentifier] - Name of the tool (must be unique for this agent and a valid python identifier string ) - -function : typing.Optional[ToolsFunctionDef] - -integration : typing.Optional[typing.Any] - -system : typing.Optional[typing.Any] - -api_call : typing.Optional[typing.Any] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_tools_route_patch( - id="id", - child_id="child_id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_tools_route_patch( - self, - id: CommonUuid, - child_id: CommonUuid, - type: typing.Optional[ToolsToolType] = OMIT, - name: typing.Optional[CommonValidPythonIdentifier] = OMIT, - function: typing.Optional[ToolsFunctionDef] = OMIT, - integration: typing.Optional[typing.Any] = OMIT, - system: typing.Optional[typing.Any] = OMIT, - api_call: typing.Optional[typing.Any] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agent_tools_route_update - -[Show source in client.py:5218](../../../../../../julep/api/client.py#L5218) - -Update an existing tool (overwrite existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be updated - -type : ToolsToolType - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - -name : CommonValidPythonIdentifier - Name of the tool (must be unique for this agent and a valid python identifier string ) - -function : typing.Optional[ToolsFunctionDef] - -integration : typing.Optional[typing.Any] - -system : typing.Optional[typing.Any] - -api_call : typing.Optional[typing.Any] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agent_tools_route_update( - id="id", - child_id="child_id", - type="function", - name="name", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agent_tools_route_update( - self, - id: CommonUuid, - child_id: CommonUuid, - type: ToolsToolType, - name: CommonValidPythonIdentifier, - function: typing.Optional[ToolsFunctionDef] = OMIT, - integration: typing.Optional[typing.Any] = OMIT, - system: typing.Optional[typing.Any] = OMIT, - api_call: typing.Optional[typing.Any] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agents_docs_search_route_search - -[Show source in client.py:4534](../../../../../../julep/api/client.py#L4534) - -Search Docs owned by an Agent - -Parameters ----------- -id : CommonUuid - ID of the parent - -body : AgentsDocsSearchRouteSearchRequestBody - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsDocSearchResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import DocsVectorDocSearchRequest -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_docs_search_route_search( - id="id", - body=DocsVectorDocSearchRequest( - limit=1, - confidence=1.1, - vector=[1.1], - ), - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_docs_search_route_search( - self, - id: CommonUuid, - body: AgentsDocsSearchRouteSearchRequestBody, - request_options: typing.Optional[RequestOptions] = None, -) -> DocsDocSearchResponse: ... -``` - -### AsyncJulepApi().agents_route_create - -[Show source in client.py:3859](../../../../../../julep/api/client.py#L3859) - -Create a new Agent - -Parameters ----------- -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsCreateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_create( - name="name", - about="about", - model="model", - instructions="instructions", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_create( - self, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsCreateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agents_route_create_or_update - -[Show source in client.py:3997](../../../../../../julep/api/client.py#L3997) - -Create or update an Agent - -Parameters ----------- -id : CommonUuid - -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsUpdateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_create_or_update( - id="id", - name="name", - about="about", - model="model", - instructions="instructions", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_create_or_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsUpdateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agents_route_delete - -[Show source in client.py:4178](../../../../../../julep/api/client.py#L4178) - -Delete Agent by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_delete( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().agents_route_get - -[Show source in client.py:3945](../../../../../../julep/api/client.py#L3945) - -Get an Agent by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentsAgent - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_get( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> AgentsAgent: ... -``` - -### AsyncJulepApi().agents_route_list - -[Show source in client.py:3777](../../../../../../julep/api/client.py#L3777) - -List Agents (paginated) - -Parameters ----------- -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : AgentsRouteListRequestSortBy - Sort by a field - -direction : AgentsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_list( - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_list( - self, - limit: CommonLimit, - offset: CommonOffset, - sort_by: AgentsRouteListRequestSortBy, - direction: AgentsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> AgentsRouteListResponse: ... -``` - -### AsyncJulepApi().agents_route_patch - -[Show source in client.py:4230](../../../../../../julep/api/client.py#L4230) - -Update an existing Agent by id (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -name : typing.Optional[CommonIdentifierSafeUnicode] - Name of the agent - -about : typing.Optional[str] - About the agent - -model : typing.Optional[str] - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : typing.Optional[AgentsPatchAgentRequestInstructions] - Instructions for the agent - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_patch( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_patch( - self, - id: CommonUuid, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - name: typing.Optional[CommonIdentifierSafeUnicode] = OMIT, - about: typing.Optional[str] = OMIT, - model: typing.Optional[str] = OMIT, - instructions: typing.Optional[AgentsPatchAgentRequestInstructions] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().agents_route_update - -[Show source in client.py:4087](../../../../../../julep/api/client.py#L4087) - -Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) - -Parameters ----------- -id : CommonUuid - ID of the resource - -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsUpdateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.agents_route_update( - id="id", - name="name", - about="about", - model="model", - instructions="instructions", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def agents_route_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsUpdateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().chat_route_generate - -[Show source in client.py:6541](../../../../../../julep/api/client.py#L6541) - -Generate a response from the model - -Parameters ----------- -id : CommonUuid - The session ID - -remember : bool - DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release) - -recall : bool - Whether previous memories and docs should be recalled or not - -save : bool - Whether this interaction should be stored in the session history or not - -stream : bool - Indicates if the server should stream the response as it's generated - -messages : typing.Sequence[EntriesInputChatMlMessage] - A list of new input messages comprising the conversation so far. - -model : typing.Optional[CommonIdentifierSafeUnicode] - Identifier of the model to be used - -stop : typing.Optional[typing.Sequence[str]] - Up to 4 sequences where the API will stop generating further tokens. - -seed : typing.Optional[int] - If specified, the system will make a best effort to sample deterministically for that particular seed value - -max_tokens : typing.Optional[int] - The maximum number of tokens to generate in the chat completion - -logit_bias : typing.Optional[typing.Dict[str, CommonLogitBias]] - Modify the likelihood of specified tokens appearing in the completion - -response_format : typing.Optional[ChatCompletionResponseFormat] - Response format (set to `json_object` to restrict output to JSON) - -agent : typing.Optional[CommonUuid] - Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) - -repetition_penalty : typing.Optional[float] - Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - -length_penalty : typing.Optional[float] - Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. - -min_p : typing.Optional[float] - Minimum probability compared to leading token to be considered - -frequency_penalty : typing.Optional[float] - Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - -presence_penalty : typing.Optional[float] - Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - -temperature : typing.Optional[float] - What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. - -top_p : typing.Optional[float] - Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. - -tools : typing.Optional[typing.Sequence[ToolsFunctionTool]] - (Advanced) List of tools that are provided in addition to agent's default set of tools. - -tool_choice : typing.Optional[ChatChatInputDataToolChoice] - Can be one of existing tools given to the agent earlier or the ones provided in this request. - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -ChatRouteGenerateResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import EntriesInputChatMlMessage -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.chat_route_generate( - id="id", - messages=[ - EntriesInputChatMlMessage( - role="user", - content="content", - ) - ], - remember=True, - recall=True, - save=True, - stream=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def chat_route_generate( - self, - id: CommonUuid, - remember: bool, - recall: bool, - save: bool, - stream: bool, - messages: typing.Sequence[EntriesInputChatMlMessage], - model: typing.Optional[CommonIdentifierSafeUnicode] = OMIT, - stop: typing.Optional[typing.Sequence[str]] = OMIT, - seed: typing.Optional[int] = OMIT, - max_tokens: typing.Optional[int] = OMIT, - logit_bias: typing.Optional[typing.Dict[str, CommonLogitBias]] = OMIT, - response_format: typing.Optional[ChatCompletionResponseFormat] = OMIT, - agent: typing.Optional[CommonUuid] = OMIT, - repetition_penalty: typing.Optional[float] = OMIT, - length_penalty: typing.Optional[float] = OMIT, - min_p: typing.Optional[float] = OMIT, - frequency_penalty: typing.Optional[float] = OMIT, - presence_penalty: typing.Optional[float] = OMIT, - temperature: typing.Optional[float] = OMIT, - top_p: typing.Optional[float] = OMIT, - tools: typing.Optional[typing.Sequence[ToolsFunctionTool]] = OMIT, - tool_choice: typing.Optional[ChatChatInputDataToolChoice] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> ChatRouteGenerateResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().embed_route_embed - -[Show source in client.py:5615](../../../../../../julep/api/client.py#L5615) - -Embed a query for search - -Parameters ----------- -body : DocsEmbedQueryRequest - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsEmbedQueryResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import DocsEmbedQueryRequest -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.embed_route_embed( - body=DocsEmbedQueryRequest( - text="text", - ), - ) - -asyncio.run(main()) - -#### Signature - -```python -async def embed_route_embed( - self, - body: DocsEmbedQueryRequest, - request_options: typing.Optional[RequestOptions] = None, -) -> DocsEmbedQueryResponse: ... -``` - -### AsyncJulepApi().execution_transitions_route_list - -[Show source in client.py:5852](../../../../../../julep/api/client.py#L5852) - -List the Transitions of an Execution by id - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : ExecutionTransitionsRouteListRequestSortBy - Sort by a field - -direction : ExecutionTransitionsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -ExecutionTransitionsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.execution_transitions_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def execution_transitions_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: ExecutionTransitionsRouteListRequestSortBy, - direction: ExecutionTransitionsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> ExecutionTransitionsRouteListResponse: ... -``` - -### AsyncJulepApi().executions_route_get - -[Show source in client.py:5736](../../../../../../julep/api/client.py#L5736) - -Get an Execution by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -ExecutionsExecution - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.executions_route_get( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def executions_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> ExecutionsExecution: ... -``` - -### AsyncJulepApi().executions_route_resume_with_task_token - -[Show source in client.py:5674](../../../../../../julep/api/client.py#L5674) - -Resume an execution with a task token - -Parameters ----------- -task_token : str - A Task Token is a unique identifier for a specific Task Execution. - -input : typing.Optional[typing.Dict[str, typing.Any]] - The input to resume the execution with - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.executions_route_resume_with_task_token( - task_token="task_token", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def executions_route_resume_with_task_token( - self, - task_token: str, - input: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().executions_route_update - -[Show source in client.py:5788](../../../../../../julep/api/client.py#L5788) - -Update an existing Execution - -Parameters ----------- -id : CommonUuid - ID of the resource - -request : ExecutionsUpdateExecutionRequest - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import ExecutionsUpdateExecutionRequest_Cancelled -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.executions_route_update( - id="string", - request=ExecutionsUpdateExecutionRequest_Cancelled( - reason="string", - ), - ) - -asyncio.run(main()) - -#### Signature - -```python -async def executions_route_update( - self, - id: CommonUuid, - request: ExecutionsUpdateExecutionRequest, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -### AsyncJulepApi().history_route_delete - -[Show source in client.py:6767](../../../../../../julep/api/client.py#L6767) - -Clear the history of a Session (resets the Session) - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.history_route_delete( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def history_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().history_route_history - -[Show source in client.py:6715](../../../../../../julep/api/client.py#L6715) - -Get history of a Session - -Parameters ----------- -id : CommonUuid - ID of parent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -EntriesHistory - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.history_route_history( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def history_route_history( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> EntriesHistory: ... -``` - -### AsyncJulepApi().individual_docs_route_get - -[Show source in client.py:5563](../../../../../../julep/api/client.py#L5563) - -Get Doc by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsDoc - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.individual_docs_route_get( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def individual_docs_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> DocsDoc: ... -``` - -### AsyncJulepApi().job_route_get - -[Show source in client.py:5939](../../../../../../julep/api/client.py#L5939) - -Get the status of an existing Job by its id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -JobsJobStatus - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.job_route_get( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def job_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> JobsJobStatus: ... -``` - -### AsyncJulepApi().sessions_route_create - -[Show source in client.py:6073](../../../../../../julep/api/client.py#L6073) - -Create a new session - -Parameters ----------- -situation : str - A specific situation that sets the background for this session - -render_templates : bool - Render system and assistant message content as jinja templates - -user : typing.Optional[CommonUuid] - User ID of user associated with this session - -users : typing.Optional[typing.Sequence[CommonUuid]] - -agent : typing.Optional[CommonUuid] - Agent ID of agent associated with this session - -agents : typing.Optional[typing.Sequence[CommonUuid]] - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_create( - situation="situation", - render_templates=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_create( - self, - situation: str, - render_templates: bool, - user: typing.Optional[CommonUuid] = OMIT, - users: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - agent: typing.Optional[CommonUuid] = OMIT, - agents: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().sessions_route_create_or_update - -[Show source in client.py:6222](../../../../../../julep/api/client.py#L6222) - -Create or update a session - -Parameters ----------- -id : CommonUuid - -situation : str - A specific situation that sets the background for this session - -render_templates : bool - Render system and assistant message content as jinja templates - -user : typing.Optional[CommonUuid] - User ID of user associated with this session - -users : typing.Optional[typing.Sequence[CommonUuid]] - -agent : typing.Optional[CommonUuid] - Agent ID of agent associated with this session - -agents : typing.Optional[typing.Sequence[CommonUuid]] - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_create_or_update( - id="id", - situation="situation", - render_templates=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_create_or_update( - self, - id: CommonUuid, - situation: str, - render_templates: bool, - user: typing.Optional[CommonUuid] = OMIT, - users: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - agent: typing.Optional[CommonUuid] = OMIT, - agents: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().sessions_route_delete - -[Show source in client.py:6407](../../../../../../julep/api/client.py#L6407) - -Delete a session by its id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_delete( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().sessions_route_get - -[Show source in client.py:6170](../../../../../../julep/api/client.py#L6170) - -Get a session by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -SessionsSession - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_get( - id="string", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> SessionsSession: ... -``` - -### AsyncJulepApi().sessions_route_list - -[Show source in client.py:5991](../../../../../../julep/api/client.py#L5991) - -List sessions (paginated) - -Parameters ----------- -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : SessionsRouteListRequestSortBy - Sort by a field - -direction : SessionsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -SessionsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_list( - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_list( - self, - limit: CommonLimit, - offset: CommonOffset, - sort_by: SessionsRouteListRequestSortBy, - direction: SessionsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> SessionsRouteListResponse: ... -``` - -### AsyncJulepApi().sessions_route_patch - -[Show source in client.py:6459](../../../../../../julep/api/client.py#L6459) - -Update an existing session by its id (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -situation : typing.Optional[str] - A specific situation that sets the background for this session - -render_templates : typing.Optional[bool] - Render system and assistant message content as jinja templates - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_patch( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_patch( - self, - id: CommonUuid, - situation: typing.Optional[str] = OMIT, - render_templates: typing.Optional[bool] = OMIT, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().sessions_route_update - -[Show source in client.py:6323](../../../../../../julep/api/client.py#L6323) - -Update an existing session by its id (overwrites all existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -situation : str - A specific situation that sets the background for this session - -render_templates : bool - Render system and assistant message content as jinja templates - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.sessions_route_update( - id="id", - situation="situation", - render_templates=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def sessions_route_update( - self, - id: CommonUuid, - situation: str, - render_templates: bool, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().task_executions_route_create - -[Show source in client.py:6906](../../../../../../julep/api/client.py#L6906) - -Create an execution for the given task - -Parameters ----------- -id : CommonUuid - ID of parent resource - -input : typing.Dict[str, typing.Any] - The input to the execution - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.task_executions_route_create( - id="id", - input={"key": "value"}, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def task_executions_route_create( - self, - id: CommonUuid, - input: typing.Dict[str, typing.Any], - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().task_executions_route_list - -[Show source in client.py:6819](../../../../../../julep/api/client.py#L6819) - -List executions of the given task - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : TaskExecutionsRouteListRequestSortBy - Sort by a field - -direction : TaskExecutionsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -TaskExecutionsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.task_executions_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def task_executions_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: TaskExecutionsRouteListRequestSortBy, - direction: TaskExecutionsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> TaskExecutionsRouteListResponse: ... -``` - -### AsyncJulepApi().tasks_create_or_update_route_create_or_update - -[Show source in client.py:5458](../../../../../../julep/api/client.py#L5458) - -Create or update a task - -Parameters ----------- -parent_id : CommonUuid - ID of the agent - -id : CommonUuid - -name : str - -description : str - -main : typing.Sequence[TasksCreateTaskRequestMainItem] - The entrypoint of the task. - -tools : typing.Sequence[TasksTaskTool] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : bool - Whether to inherit tools from the parent agent or not. Defaults to true. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep import TasksTaskTool -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.tasks_create_or_update_route_create_or_update( - parent_id="parent_id", - id="id", - name="name", - description="description", - main=[], - tools=[ - TasksTaskTool( - type="function", - name="name", - ) - ], - inherit_tools=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def tasks_create_or_update_route_create_or_update( - self, - parent_id: CommonUuid, - id: CommonUuid, - name: str, - description: str, - main: typing.Sequence[TasksCreateTaskRequestMainItem], - tools: typing.Sequence[TasksTaskTool], - inherit_tools: bool, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().tasks_route_create - -[Show source in client.py:4687](../../../../../../julep/api/client.py#L4687) - -Create a new task - -Parameters ----------- -id : CommonUuid - ID of parent resource - -name : str - -description : str - -main : typing.Sequence[TasksCreateTaskRequestMainItem] - The entrypoint of the task. - -tools : typing.Sequence[TasksTaskTool] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : bool - Whether to inherit tools from the parent agent or not. Defaults to true. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import TasksTaskTool -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.tasks_route_create( - id="id", - name="name", - description="description", - main=[], - tools=[ - TasksTaskTool( - type="function", - name="name", - ) - ], - inherit_tools=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def tasks_route_create( - self, - id: CommonUuid, - name: str, - description: str, - main: typing.Sequence[TasksCreateTaskRequestMainItem], - tools: typing.Sequence[TasksTaskTool], - inherit_tools: bool, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().tasks_route_delete - -[Show source in client.py:4889](../../../../../../julep/api/client.py#L4889) - -Delete a task by its id - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.tasks_route_delete( - id="id", - child_id="child_id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def tasks_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().tasks_route_list - -[Show source in client.py:4600](../../../../../../julep/api/client.py#L4600) - -List tasks (paginated) - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : TasksRouteListRequestSortBy - Sort by a field - -direction : TasksRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -TasksRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.tasks_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def tasks_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: TasksRouteListRequestSortBy, - direction: TasksRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> TasksRouteListResponse: ... -``` - -### AsyncJulepApi().tasks_route_patch - -[Show source in client.py:4949](../../../../../../julep/api/client.py#L4949) - -Update an existing task (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be patched - -description : typing.Optional[str] - -main : typing.Optional[typing.Sequence[TasksPatchTaskRequestMainItem]] - The entrypoint of the task. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -tools : typing.Optional[typing.Sequence[TasksTaskTool]] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : typing.Optional[bool] - Whether to inherit tools from the parent agent or not. Defaults to true. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.tasks_route_patch( - id="id", - child_id="child_id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def tasks_route_patch( - self, - id: CommonUuid, - child_id: CommonUuid, - description: typing.Optional[str] = OMIT, - main: typing.Optional[typing.Sequence[TasksPatchTaskRequestMainItem]] = OMIT, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - tools: typing.Optional[typing.Sequence[TasksTaskTool]] = OMIT, - inherit_tools: typing.Optional[bool] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().tasks_route_update - -[Show source in client.py:4788](../../../../../../julep/api/client.py#L4788) - -Update an existing task (overwrite existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be updated - -description : str - -main : typing.Sequence[TasksUpdateTaskRequestMainItem] - The entrypoint of the task. - -tools : typing.Sequence[TasksTaskTool] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : bool - Whether to inherit tools from the parent agent or not. Defaults to true. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import TasksTaskTool -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.tasks_route_update( - id="id", - child_id="child_id", - description="description", - main=[], - tools=[ - TasksTaskTool( - type="function", - name="name", - ) - ], - inherit_tools=True, - ) - -asyncio.run(main()) - -#### Signature - -```python -async def tasks_route_update( - self, - id: CommonUuid, - child_id: CommonUuid, - description: str, - main: typing.Sequence[TasksUpdateTaskRequestMainItem], - tools: typing.Sequence[TasksTaskTool], - inherit_tools: bool, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().user_docs_route_create - -[Show source in client.py:7516](../../../../../../julep/api/client.py#L7516) - -Create a Doc for this User - -Parameters ----------- -id : CommonUuid - ID of parent resource - -title : CommonIdentifierSafeUnicode - Title describing what this document contains - -content : DocsCreateDocRequestContent - Contents of the document - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.user_docs_route_create( - id="id", - title="title", - content="content", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def user_docs_route_create( - self, - id: CommonUuid, - title: CommonIdentifierSafeUnicode, - content: DocsCreateDocRequestContent, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().user_docs_route_delete - -[Show source in client.py:7586](../../../../../../julep/api/client.py#L7586) - -Delete a Doc for this User - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.user_docs_route_delete( - id="id", - child_id="child_id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def user_docs_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().user_docs_route_list - -[Show source in client.py:7429](../../../../../../julep/api/client.py#L7429) - -List Docs owned by a User - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : UserDocsRouteListRequestSortBy - Sort by a field - -direction : UserDocsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -UserDocsRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.user_docs_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def user_docs_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: UserDocsRouteListRequestSortBy, - direction: UserDocsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> UserDocsRouteListResponse: ... -``` - -### AsyncJulepApi().user_docs_search_route_search - -[Show source in client.py:7646](../../../../../../julep/api/client.py#L7646) - -Search Docs owned by a User - -Parameters ----------- -id : CommonUuid - ID of the parent - -body : UserDocsSearchRouteSearchRequestBody - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsDocSearchResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep import DocsVectorDocSearchRequest -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.user_docs_search_route_search( - id="id", - body=DocsVectorDocSearchRequest( - limit=1, - confidence=1.1, - vector=[1.1], - ), - ) - -asyncio.run(main()) - -#### Signature - -```python -async def user_docs_search_route_search( - self, - id: CommonUuid, - body: UserDocsSearchRouteSearchRequestBody, - request_options: typing.Optional[RequestOptions] = None, -) -> DocsDocSearchResponse: ... -``` - -### AsyncJulepApi().users_route_create - -[Show source in client.py:7053](../../../../../../julep/api/client.py#L7053) - -Create a new user - -Parameters ----------- -name : CommonIdentifierSafeUnicode - Name of the user - -about : str - About the user - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_create( - name="name", - about="about", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_create( - self, - name: CommonIdentifierSafeUnicode, - about: str, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().users_route_create_or_update - -[Show source in client.py:7170](../../../../../../julep/api/client.py#L7170) - -Create or update a user - -Parameters ----------- -id : CommonUuid - -name : CommonIdentifierSafeUnicode - Name of the user - -about : str - About the user - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_create_or_update( - id="id", - name="name", - about="about", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_create_or_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().users_route_delete - -[Show source in client.py:7309](../../../../../../julep/api/client.py#L7309) - -Delete a user by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_delete( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### AsyncJulepApi().users_route_get - -[Show source in client.py:7118](../../../../../../julep/api/client.py#L7118) - -Get a user by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -UsersUser - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_get( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> UsersUser: ... -``` - -### AsyncJulepApi().users_route_list - -[Show source in client.py:6971](../../../../../../julep/api/client.py#L6971) - -List users (paginated) - -Parameters ----------- -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : UsersRouteListRequestSortBy - Sort by a field - -direction : UsersRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -UsersRouteListResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_list( - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_list( - self, - limit: CommonLimit, - offset: CommonOffset, - sort_by: UsersRouteListRequestSortBy, - direction: UsersRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> UsersRouteListResponse: ... -``` - -### AsyncJulepApi().users_route_patch - -[Show source in client.py:7361](../../../../../../julep/api/client.py#L7361) - -Update an existing user by id (merge with existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -name : typing.Optional[CommonIdentifierSafeUnicode] - Name of the user - -about : typing.Optional[str] - About the user - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_patch( - id="id", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_patch( - self, - id: CommonUuid, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - name: typing.Optional[CommonIdentifierSafeUnicode] = OMIT, - about: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### AsyncJulepApi().users_route_update - -[Show source in client.py:7239](../../../../../../julep/api/client.py#L7239) - -Update an existing user by id (overwrite existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -name : CommonIdentifierSafeUnicode - Name of the user - -about : str - About the user - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -import asyncio - -from julep.client import AsyncJulepApi - -client = AsyncJulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -async def main() -> None: - await client.users_route_update( - id="id", - name="name", - about="about", - ) - -asyncio.run(main()) - -#### Signature - -```python -async def users_route_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - - - -## JulepApi - -[Show source in client.py:115](../../../../../../julep/api/client.py#L115) - -Use this class to access the different functions within the SDK. You can instantiate any number of clients with different configuration that will propagate to these functions. - -Parameters ----------- -base_url : typing.Optional[str] - The base url to use for requests from the client. - -environment : JulepApiEnvironment - The environment to use for requests from the client. from .environment import JulepApiEnvironment - -Defaults to JulepApiEnvironment.DEFAULT - -auth_key : str -api_key : str -timeout : typing.Optional[float] - The timeout to be used, in seconds, for requests. By default the timeout is 300 seconds, unless a custom httpx client is used, in which case this default is not enforced. - -follow_redirects : typing.Optional[bool] - Whether the default httpx client follows redirects or not, this is irrelevant if a custom httpx client is passed in. - -httpx_client : typing.Optional[httpx.Client] - The httpx client to use for making requests, a preconfigured client is used by default, however this is useful should you want to pass in any custom httpx configuration. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) - -#### Signature - -```python -class JulepApi: - def __init__( - self, - base_url: typing.Optional[str] = None, - environment: JulepApiEnvironment = JulepApiEnvironment.DEFAULT, - auth_key: str, - api_key: str, - timeout: typing.Optional[float] = None, - follow_redirects: typing.Optional[bool] = True, - httpx_client: typing.Optional[httpx.Client] = None, - ): ... -``` - -### JulepApi().agent_docs_route_create - -[Show source in client.py:749](../../../../../../julep/api/client.py#L749) - -Create a Doc for this Agent - -Parameters ----------- -id : CommonUuid - ID of parent resource - -title : CommonIdentifierSafeUnicode - Title describing what this document contains - -content : DocsCreateDocRequestContent - Contents of the document - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_docs_route_create( - id="id", - title="title", - content="content", -) - -#### Signature - -```python -def agent_docs_route_create( - self, - id: CommonUuid, - title: CommonIdentifierSafeUnicode, - content: DocsCreateDocRequestContent, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agent_docs_route_delete - -[Show source in client.py:811](../../../../../../julep/api/client.py#L811) - -Delete a Doc for this Agent - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_docs_route_delete( - id="id", - child_id="child_id", -) - -#### Signature - -```python -def agent_docs_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().agent_docs_route_list - -[Show source in client.py:670](../../../../../../julep/api/client.py#L670) - -List Docs owned by an Agent - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : AgentDocsRouteListRequestSortBy - Sort by a field - -direction : AgentDocsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentDocsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_docs_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def agent_docs_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: AgentDocsRouteListRequestSortBy, - direction: AgentDocsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> AgentDocsRouteListResponse: ... -``` - -### JulepApi().agent_tools_route_create - -[Show source in client.py:1400](../../../../../../julep/api/client.py#L1400) - -Create a new tool for this agent - -Parameters ----------- -id : CommonUuid - ID of parent resource - -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsCreateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_tools_route_create( - id="id", - name="name", - about="about", - model="model", - instructions="instructions", -) - -#### Signature - -```python -def agent_tools_route_create( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsCreateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agent_tools_route_delete - -[Show source in client.py:1566](../../../../../../julep/api/client.py#L1566) - -Delete an existing tool by id - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_tools_route_delete( - id="id", - child_id="child_id", -) - -#### Signature - -```python -def agent_tools_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().agent_tools_route_list - -[Show source in client.py:1321](../../../../../../julep/api/client.py#L1321) - -List tools of the given agent - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : AgentToolsRouteListRequestSortBy - Sort by a field - -direction : AgentToolsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentToolsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_tools_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def agent_tools_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: AgentToolsRouteListRequestSortBy, - direction: AgentToolsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> AgentToolsRouteListResponse: ... -``` - -### JulepApi().agent_tools_route_patch - -[Show source in client.py:1618](../../../../../../julep/api/client.py#L1618) - -Update an existing tool (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be patched - -type : typing.Optional[ToolsToolType] - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - -name : typing.Optional[CommonValidPythonIdentifier] - Name of the tool (must be unique for this agent and a valid python identifier string ) - -function : typing.Optional[ToolsFunctionDef] - -integration : typing.Optional[typing.Any] - -system : typing.Optional[typing.Any] - -api_call : typing.Optional[typing.Any] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_tools_route_patch( - id="id", - child_id="child_id", -) - -#### Signature - -```python -def agent_tools_route_patch( - self, - id: CommonUuid, - child_id: CommonUuid, - type: typing.Optional[ToolsToolType] = OMIT, - name: typing.Optional[CommonValidPythonIdentifier] = OMIT, - function: typing.Optional[ToolsFunctionDef] = OMIT, - integration: typing.Optional[typing.Any] = OMIT, - system: typing.Optional[typing.Any] = OMIT, - api_call: typing.Optional[typing.Any] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agent_tools_route_update - -[Show source in client.py:1483](../../../../../../julep/api/client.py#L1483) - -Update an existing tool (overwrite existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be updated - -type : ToolsToolType - Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) - -name : CommonValidPythonIdentifier - Name of the tool (must be unique for this agent and a valid python identifier string ) - -function : typing.Optional[ToolsFunctionDef] - -integration : typing.Optional[typing.Any] - -system : typing.Optional[typing.Any] - -api_call : typing.Optional[typing.Any] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agent_tools_route_update( - id="id", - child_id="child_id", - type="function", - name="name", -) - -#### Signature - -```python -def agent_tools_route_update( - self, - id: CommonUuid, - child_id: CommonUuid, - type: ToolsToolType, - name: CommonValidPythonIdentifier, - function: typing.Optional[ToolsFunctionDef] = OMIT, - integration: typing.Optional[typing.Any] = OMIT, - system: typing.Optional[typing.Any] = OMIT, - api_call: typing.Optional[typing.Any] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agents_docs_search_route_search - -[Show source in client.py:863](../../../../../../julep/api/client.py#L863) - -Search Docs owned by an Agent - -Parameters ----------- -id : CommonUuid - ID of the parent - -body : AgentsDocsSearchRouteSearchRequestBody - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsDocSearchResponse - The request has succeeded. - -Examples --------- -from julep import DocsVectorDocSearchRequest -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_docs_search_route_search( - id="id", - body=DocsVectorDocSearchRequest( - limit=1, - confidence=1.1, - vector=[1.1], - ), -) - -#### Signature - -```python -def agents_docs_search_route_search( - self, - id: CommonUuid, - body: AgentsDocsSearchRouteSearchRequestBody, - request_options: typing.Optional[RequestOptions] = None, -) -> DocsDocSearchResponse: ... -``` - -### JulepApi().agents_route_create - -[Show source in client.py:260](../../../../../../julep/api/client.py#L260) - -Create a new Agent - -Parameters ----------- -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsCreateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_create( - name="name", - about="about", - model="model", - instructions="instructions", -) - -#### Signature - -```python -def agents_route_create( - self, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsCreateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agents_route_create_or_update - -[Show source in client.py:382](../../../../../../julep/api/client.py#L382) - -Create or update an Agent - -Parameters ----------- -id : CommonUuid - -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsUpdateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_create_or_update( - id="id", - name="name", - about="about", - model="model", - instructions="instructions", -) - -#### Signature - -```python -def agents_route_create_or_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsUpdateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agents_route_delete - -[Show source in client.py:547](../../../../../../julep/api/client.py#L547) - -Delete Agent by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_delete( - id="id", -) - -#### Signature - -```python -def agents_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().agents_route_get - -[Show source in client.py:338](../../../../../../julep/api/client.py#L338) - -Get an Agent by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentsAgent - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_get( - id="id", -) - -#### Signature - -```python -def agents_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> AgentsAgent: ... -``` - -### JulepApi().agents_route_list - -[Show source in client.py:186](../../../../../../julep/api/client.py#L186) - -List Agents (paginated) - -Parameters ----------- -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : AgentsRouteListRequestSortBy - Sort by a field - -direction : AgentsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -AgentsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_list( - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def agents_route_list( - self, - limit: CommonLimit, - offset: CommonOffset, - sort_by: AgentsRouteListRequestSortBy, - direction: AgentsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> AgentsRouteListResponse: ... -``` - -### JulepApi().agents_route_patch - -[Show source in client.py:591](../../../../../../julep/api/client.py#L591) - -Update an existing Agent by id (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -name : typing.Optional[CommonIdentifierSafeUnicode] - Name of the agent - -about : typing.Optional[str] - About the agent - -model : typing.Optional[str] - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : typing.Optional[AgentsPatchAgentRequestInstructions] - Instructions for the agent - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_patch( - id="id", -) - -#### Signature - -```python -def agents_route_patch( - self, - id: CommonUuid, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - name: typing.Optional[CommonIdentifierSafeUnicode] = OMIT, - about: typing.Optional[str] = OMIT, - model: typing.Optional[str] = OMIT, - instructions: typing.Optional[AgentsPatchAgentRequestInstructions] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().agents_route_update - -[Show source in client.py:464](../../../../../../julep/api/client.py#L464) - -Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) - -Parameters ----------- -id : CommonUuid - ID of the resource - -name : CommonIdentifierSafeUnicode - Name of the agent - -about : str - About the agent - -model : str - Model name to use (gpt-4-turbo, gemini-nano etc) - -instructions : AgentsUpdateAgentRequestInstructions - Instructions for the agent - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -default_settings : typing.Optional[ChatDefaultChatSettings] - Default settings for all sessions created by this agent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.agents_route_update( - id="id", - name="name", - about="about", - model="model", - instructions="instructions", -) - -#### Signature - -```python -def agents_route_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - model: str, - instructions: AgentsUpdateAgentRequestInstructions, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - default_settings: typing.Optional[ChatDefaultChatSettings] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().chat_route_generate - -[Show source in client.py:2662](../../../../../../julep/api/client.py#L2662) - -Generate a response from the model - -Parameters ----------- -id : CommonUuid - The session ID - -remember : bool - DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release) - -recall : bool - Whether previous memories and docs should be recalled or not - -save : bool - Whether this interaction should be stored in the session history or not - -stream : bool - Indicates if the server should stream the response as it's generated - -messages : typing.Sequence[EntriesInputChatMlMessage] - A list of new input messages comprising the conversation so far. - -model : typing.Optional[CommonIdentifierSafeUnicode] - Identifier of the model to be used - -stop : typing.Optional[typing.Sequence[str]] - Up to 4 sequences where the API will stop generating further tokens. - -seed : typing.Optional[int] - If specified, the system will make a best effort to sample deterministically for that particular seed value - -max_tokens : typing.Optional[int] - The maximum number of tokens to generate in the chat completion - -logit_bias : typing.Optional[typing.Dict[str, CommonLogitBias]] - Modify the likelihood of specified tokens appearing in the completion - -response_format : typing.Optional[ChatCompletionResponseFormat] - Response format (set to `json_object` to restrict output to JSON) - -agent : typing.Optional[CommonUuid] - Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) - -repetition_penalty : typing.Optional[float] - Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - -length_penalty : typing.Optional[float] - Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. - -min_p : typing.Optional[float] - Minimum probability compared to leading token to be considered - -frequency_penalty : typing.Optional[float] - Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - -presence_penalty : typing.Optional[float] - Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. - -temperature : typing.Optional[float] - What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. - -top_p : typing.Optional[float] - Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. - -tools : typing.Optional[typing.Sequence[ToolsFunctionTool]] - (Advanced) List of tools that are provided in addition to agent's default set of tools. - -tool_choice : typing.Optional[ChatChatInputDataToolChoice] - Can be one of existing tools given to the agent earlier or the ones provided in this request. - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -ChatRouteGenerateResponse - The request has succeeded. - -Examples --------- -from julep import EntriesInputChatMlMessage -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.chat_route_generate( - id="id", - messages=[ - EntriesInputChatMlMessage( - role="user", - content="content", - ) - ], - remember=True, - recall=True, - save=True, - stream=True, -) - -#### Signature - -```python -def chat_route_generate( - self, - id: CommonUuid, - remember: bool, - recall: bool, - save: bool, - stream: bool, - messages: typing.Sequence[EntriesInputChatMlMessage], - model: typing.Optional[CommonIdentifierSafeUnicode] = OMIT, - stop: typing.Optional[typing.Sequence[str]] = OMIT, - seed: typing.Optional[int] = OMIT, - max_tokens: typing.Optional[int] = OMIT, - logit_bias: typing.Optional[typing.Dict[str, CommonLogitBias]] = OMIT, - response_format: typing.Optional[ChatCompletionResponseFormat] = OMIT, - agent: typing.Optional[CommonUuid] = OMIT, - repetition_penalty: typing.Optional[float] = OMIT, - length_penalty: typing.Optional[float] = OMIT, - min_p: typing.Optional[float] = OMIT, - frequency_penalty: typing.Optional[float] = OMIT, - presence_penalty: typing.Optional[float] = OMIT, - temperature: typing.Optional[float] = OMIT, - top_p: typing.Optional[float] = OMIT, - tools: typing.Optional[typing.Sequence[ToolsFunctionTool]] = OMIT, - tool_choice: typing.Optional[ChatChatInputDataToolChoice] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> ChatRouteGenerateResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().embed_route_embed - -[Show source in client.py:1840](../../../../../../julep/api/client.py#L1840) - -Embed a query for search - -Parameters ----------- -body : DocsEmbedQueryRequest - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsEmbedQueryResponse - The request has succeeded. - -Examples --------- -from julep import DocsEmbedQueryRequest -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.embed_route_embed( - body=DocsEmbedQueryRequest( - text="text", - ), -) - -#### Signature - -```python -def embed_route_embed( - self, - body: DocsEmbedQueryRequest, - request_options: typing.Optional[RequestOptions] = None, -) -> DocsEmbedQueryResponse: ... -``` - -### JulepApi().execution_transitions_route_list - -[Show source in client.py:2045](../../../../../../julep/api/client.py#L2045) - -List the Transitions of an Execution by id - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : ExecutionTransitionsRouteListRequestSortBy - Sort by a field - -direction : ExecutionTransitionsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -ExecutionTransitionsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.execution_transitions_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def execution_transitions_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: ExecutionTransitionsRouteListRequestSortBy, - direction: ExecutionTransitionsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> ExecutionTransitionsRouteListResponse: ... -``` - -### JulepApi().executions_route_get - -[Show source in client.py:1945](../../../../../../julep/api/client.py#L1945) - -Get an Execution by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -ExecutionsExecution - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.executions_route_get( - id="id", -) - -#### Signature - -```python -def executions_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> ExecutionsExecution: ... -``` - -### JulepApi().executions_route_resume_with_task_token - -[Show source in client.py:1891](../../../../../../julep/api/client.py#L1891) - -Resume an execution with a task token - -Parameters ----------- -task_token : str - A Task Token is a unique identifier for a specific Task Execution. - -input : typing.Optional[typing.Dict[str, typing.Any]] - The input to resume the execution with - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.executions_route_resume_with_task_token( - task_token="task_token", -) - -#### Signature - -```python -def executions_route_resume_with_task_token( - self, - task_token: str, - input: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().executions_route_update - -[Show source in client.py:1989](../../../../../../julep/api/client.py#L1989) - -Update an existing Execution - -Parameters ----------- -id : CommonUuid - ID of the resource - -request : ExecutionsUpdateExecutionRequest - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep import ExecutionsUpdateExecutionRequest_Cancelled -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.executions_route_update( - id="string", - request=ExecutionsUpdateExecutionRequest_Cancelled( - reason="string", - ), -) - -#### Signature - -```python -def executions_route_update( - self, - id: CommonUuid, - request: ExecutionsUpdateExecutionRequest, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -### JulepApi().history_route_delete - -[Show source in client.py:2872](../../../../../../julep/api/client.py#L2872) - -Clear the history of a Session (resets the Session) - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.history_route_delete( - id="id", -) - -#### Signature - -```python -def history_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().history_route_history - -[Show source in client.py:2828](../../../../../../julep/api/client.py#L2828) - -Get history of a Session - -Parameters ----------- -id : CommonUuid - ID of parent - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -EntriesHistory - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.history_route_history( - id="id", -) - -#### Signature - -```python -def history_route_history( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> EntriesHistory: ... -``` - -### JulepApi().individual_docs_route_get - -[Show source in client.py:1796](../../../../../../julep/api/client.py#L1796) - -Get Doc by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsDoc - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.individual_docs_route_get( - id="id", -) - -#### Signature - -```python -def individual_docs_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> DocsDoc: ... -``` - -### JulepApi().job_route_get - -[Show source in client.py:2124](../../../../../../julep/api/client.py#L2124) - -Get the status of an existing Job by its id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -JobsJobStatus - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.job_route_get( - id="id", -) - -#### Signature - -```python -def job_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> JobsJobStatus: ... -``` - -### JulepApi().sessions_route_create - -[Show source in client.py:2242](../../../../../../julep/api/client.py#L2242) - -Create a new session - -Parameters ----------- -situation : str - A specific situation that sets the background for this session - -render_templates : bool - Render system and assistant message content as jinja templates - -user : typing.Optional[CommonUuid] - User ID of user associated with this session - -users : typing.Optional[typing.Sequence[CommonUuid]] - -agent : typing.Optional[CommonUuid] - Agent ID of agent associated with this session - -agents : typing.Optional[typing.Sequence[CommonUuid]] - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_create( - situation="situation", - render_templates=True, -) - -#### Signature - -```python -def sessions_route_create( - self, - situation: str, - render_templates: bool, - user: typing.Optional[CommonUuid] = OMIT, - users: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - agent: typing.Optional[CommonUuid] = OMIT, - agents: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().sessions_route_create_or_update - -[Show source in client.py:2375](../../../../../../julep/api/client.py#L2375) - -Create or update a session - -Parameters ----------- -id : CommonUuid - -situation : str - A specific situation that sets the background for this session - -render_templates : bool - Render system and assistant message content as jinja templates - -user : typing.Optional[CommonUuid] - User ID of user associated with this session - -users : typing.Optional[typing.Sequence[CommonUuid]] - -agent : typing.Optional[CommonUuid] - Agent ID of agent associated with this session - -agents : typing.Optional[typing.Sequence[CommonUuid]] - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_create_or_update( - id="id", - situation="situation", - render_templates=True, -) - -#### Signature - -```python -def sessions_route_create_or_update( - self, - id: CommonUuid, - situation: str, - render_templates: bool, - user: typing.Optional[CommonUuid] = OMIT, - users: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - agent: typing.Optional[CommonUuid] = OMIT, - agents: typing.Optional[typing.Sequence[CommonUuid]] = OMIT, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().sessions_route_delete - -[Show source in client.py:2544](../../../../../../julep/api/client.py#L2544) - -Delete a session by its id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_delete( - id="id", -) - -#### Signature - -```python -def sessions_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().sessions_route_get - -[Show source in client.py:2331](../../../../../../julep/api/client.py#L2331) - -Get a session by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -SessionsSession - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_get( - id="string", -) - -#### Signature - -```python -def sessions_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> SessionsSession: ... -``` - -### JulepApi().sessions_route_list - -[Show source in client.py:2168](../../../../../../julep/api/client.py#L2168) - -List sessions (paginated) - -Parameters ----------- -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : SessionsRouteListRequestSortBy - Sort by a field - -direction : SessionsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -SessionsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_list( - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def sessions_route_list( - self, - limit: CommonLimit, - offset: CommonOffset, - sort_by: SessionsRouteListRequestSortBy, - direction: SessionsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> SessionsRouteListResponse: ... -``` - -### JulepApi().sessions_route_patch - -[Show source in client.py:2588](../../../../../../julep/api/client.py#L2588) - -Update an existing session by its id (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -situation : typing.Optional[str] - A specific situation that sets the background for this session - -render_templates : typing.Optional[bool] - Render system and assistant message content as jinja templates - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_patch( - id="id", -) - -#### Signature - -```python -def sessions_route_patch( - self, - id: CommonUuid, - situation: typing.Optional[str] = OMIT, - render_templates: typing.Optional[bool] = OMIT, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().sessions_route_update - -[Show source in client.py:2468](../../../../../../julep/api/client.py#L2468) - -Update an existing session by its id (overwrites all existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -situation : str - A specific situation that sets the background for this session - -render_templates : bool - Render system and assistant message content as jinja templates - -token_budget : typing.Optional[int] - Threshold value for the adaptive context functionality - -context_overflow : typing.Optional[SessionsContextOverflowType] - Action to start on context window overflow - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.sessions_route_update( - id="id", - situation="situation", - render_templates=True, -) - -#### Signature - -```python -def sessions_route_update( - self, - id: CommonUuid, - situation: str, - render_templates: bool, - token_budget: typing.Optional[int] = OMIT, - context_overflow: typing.Optional[SessionsContextOverflowType] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().task_executions_route_create - -[Show source in client.py:2995](../../../../../../julep/api/client.py#L2995) - -Create an execution for the given task - -Parameters ----------- -id : CommonUuid - ID of parent resource - -input : typing.Dict[str, typing.Any] - The input to the execution - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.task_executions_route_create( - id="id", - input={"key": "value"}, -) - -#### Signature - -```python -def task_executions_route_create( - self, - id: CommonUuid, - input: typing.Dict[str, typing.Any], - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().task_executions_route_list - -[Show source in client.py:2916](../../../../../../julep/api/client.py#L2916) - -List executions of the given task - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : TaskExecutionsRouteListRequestSortBy - Sort by a field - -direction : TaskExecutionsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -TaskExecutionsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.task_executions_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def task_executions_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: TaskExecutionsRouteListRequestSortBy, - direction: TaskExecutionsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> TaskExecutionsRouteListResponse: ... -``` - -### JulepApi().tasks_create_or_update_route_create_or_update - -[Show source in client.py:1699](../../../../../../julep/api/client.py#L1699) - -Create or update a task - -Parameters ----------- -parent_id : CommonUuid - ID of the agent - -id : CommonUuid - -name : str - -description : str - -main : typing.Sequence[TasksCreateTaskRequestMainItem] - The entrypoint of the task. - -tools : typing.Sequence[TasksTaskTool] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : bool - Whether to inherit tools from the parent agent or not. Defaults to true. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep import TasksTaskTool -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.tasks_create_or_update_route_create_or_update( - parent_id="parent_id", - id="id", - name="name", - description="description", - main=[], - tools=[ - TasksTaskTool( - type="function", - name="name", - ) - ], - inherit_tools=True, -) - -#### Signature - -```python -def tasks_create_or_update_route_create_or_update( - self, - parent_id: CommonUuid, - id: CommonUuid, - name: str, - description: str, - main: typing.Sequence[TasksCreateTaskRequestMainItem], - tools: typing.Sequence[TasksTaskTool], - inherit_tools: bool, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().tasks_route_create - -[Show source in client.py:1000](../../../../../../julep/api/client.py#L1000) - -Create a new task - -Parameters ----------- -id : CommonUuid - ID of parent resource - -name : str - -description : str - -main : typing.Sequence[TasksCreateTaskRequestMainItem] - The entrypoint of the task. - -tools : typing.Sequence[TasksTaskTool] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : bool - Whether to inherit tools from the parent agent or not. Defaults to true. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded. - -Examples --------- -from julep import TasksTaskTool -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.tasks_route_create( - id="id", - name="name", - description="description", - main=[], - tools=[ - TasksTaskTool( - type="function", - name="name", - ) - ], - inherit_tools=True, -) - -#### Signature - -```python -def tasks_route_create( - self, - id: CommonUuid, - name: str, - description: str, - main: typing.Sequence[TasksCreateTaskRequestMainItem], - tools: typing.Sequence[TasksTaskTool], - inherit_tools: bool, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().tasks_route_delete - -[Show source in client.py:1186](../../../../../../julep/api/client.py#L1186) - -Delete a task by its id - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.tasks_route_delete( - id="id", - child_id="child_id", -) - -#### Signature - -```python -def tasks_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().tasks_route_list - -[Show source in client.py:921](../../../../../../julep/api/client.py#L921) - -List tasks (paginated) - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : TasksRouteListRequestSortBy - Sort by a field - -direction : TasksRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -TasksRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.tasks_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def tasks_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: TasksRouteListRequestSortBy, - direction: TasksRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> TasksRouteListResponse: ... -``` - -### JulepApi().tasks_route_patch - -[Show source in client.py:1238](../../../../../../julep/api/client.py#L1238) - -Update an existing task (merges with existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be patched - -description : typing.Optional[str] - -main : typing.Optional[typing.Sequence[TasksPatchTaskRequestMainItem]] - The entrypoint of the task. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -tools : typing.Optional[typing.Sequence[TasksTaskTool]] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : typing.Optional[bool] - Whether to inherit tools from the parent agent or not. Defaults to true. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.tasks_route_patch( - id="id", - child_id="child_id", -) - -#### Signature - -```python -def tasks_route_patch( - self, - id: CommonUuid, - child_id: CommonUuid, - description: typing.Optional[str] = OMIT, - main: typing.Optional[typing.Sequence[TasksPatchTaskRequestMainItem]] = OMIT, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - tools: typing.Optional[typing.Sequence[TasksTaskTool]] = OMIT, - inherit_tools: typing.Optional[bool] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().tasks_route_update - -[Show source in client.py:1093](../../../../../../julep/api/client.py#L1093) - -Update an existing task (overwrite existing values) - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be updated - -description : str - -main : typing.Sequence[TasksUpdateTaskRequestMainItem] - The entrypoint of the task. - -tools : typing.Sequence[TasksTaskTool] - Tools defined specifically for this task not included in the Agent itself. - -inherit_tools : bool - Whether to inherit tools from the parent agent or not. Defaults to true. - -input_schema : typing.Optional[typing.Dict[str, typing.Any]] - The schema for the input to the task. `null` means all inputs are valid. - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep import TasksTaskTool -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.tasks_route_update( - id="id", - child_id="child_id", - description="description", - main=[], - tools=[ - TasksTaskTool( - type="function", - name="name", - ) - ], - inherit_tools=True, -) - -#### Signature - -```python -def tasks_route_update( - self, - id: CommonUuid, - child_id: CommonUuid, - description: str, - main: typing.Sequence[TasksUpdateTaskRequestMainItem], - tools: typing.Sequence[TasksTaskTool], - inherit_tools: bool, - input_schema: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().user_docs_route_create - -[Show source in client.py:3533](../../../../../../julep/api/client.py#L3533) - -Create a Doc for this User - -Parameters ----------- -id : CommonUuid - ID of parent resource - -title : CommonIdentifierSafeUnicode - Title describing what this document contains - -content : DocsCreateDocRequestContent - Contents of the document - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.user_docs_route_create( - id="id", - title="title", - content="content", -) - -#### Signature - -```python -def user_docs_route_create( - self, - id: CommonUuid, - title: CommonIdentifierSafeUnicode, - content: DocsCreateDocRequestContent, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().user_docs_route_delete - -[Show source in client.py:3595](../../../../../../julep/api/client.py#L3595) - -Delete a Doc for this User - -Parameters ----------- -id : CommonUuid - ID of parent resource - -child_id : CommonUuid - ID of the resource to be deleted - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.user_docs_route_delete( - id="id", - child_id="child_id", -) - -#### Signature - -```python -def user_docs_route_delete( - self, - id: CommonUuid, - child_id: CommonUuid, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().user_docs_route_list - -[Show source in client.py:3454](../../../../../../julep/api/client.py#L3454) - -List Docs owned by a User - -Parameters ----------- -id : CommonUuid - ID of parent - -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : UserDocsRouteListRequestSortBy - Sort by a field - -direction : UserDocsRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -UserDocsRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.user_docs_route_list( - id="id", - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def user_docs_route_list( - self, - id: CommonUuid, - limit: CommonLimit, - offset: CommonOffset, - sort_by: UserDocsRouteListRequestSortBy, - direction: UserDocsRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> UserDocsRouteListResponse: ... -``` - -### JulepApi().user_docs_search_route_search - -[Show source in client.py:3647](../../../../../../julep/api/client.py#L3647) - -Search Docs owned by a User - -Parameters ----------- -id : CommonUuid - ID of the parent - -body : UserDocsSearchRouteSearchRequestBody - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -DocsDocSearchResponse - The request has succeeded. - -Examples --------- -from julep import DocsVectorDocSearchRequest -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.user_docs_search_route_search( - id="id", - body=DocsVectorDocSearchRequest( - limit=1, - confidence=1.1, - vector=[1.1], - ), -) - -#### Signature - -```python -def user_docs_search_route_search( - self, - id: CommonUuid, - body: UserDocsSearchRouteSearchRequestBody, - request_options: typing.Optional[RequestOptions] = None, -) -> DocsDocSearchResponse: ... -``` - -### JulepApi().users_route_create - -[Show source in client.py:3126](../../../../../../julep/api/client.py#L3126) - -Create a new user - -Parameters ----------- -name : CommonIdentifierSafeUnicode - Name of the user - -about : str - About the user - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceCreatedResponse - The request has succeeded and a new resource has been created as a result. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_create( - name="name", - about="about", -) - -#### Signature - -```python -def users_route_create( - self, - name: CommonIdentifierSafeUnicode, - about: str, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceCreatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().users_route_create_or_update - -[Show source in client.py:3227](../../../../../../julep/api/client.py#L3227) - -Create or update a user - -Parameters ----------- -id : CommonUuid - -name : CommonIdentifierSafeUnicode - Name of the user - -about : str - About the user - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_create_or_update( - id="id", - name="name", - about="about", -) - -#### Signature - -```python -def users_route_create_or_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().users_route_delete - -[Show source in client.py:3350](../../../../../../julep/api/client.py#L3350) - -Delete a user by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceDeletedResponse - The request has been accepted for processing, but processing has not yet completed. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_delete( - id="id", -) - -#### Signature - -```python -def users_route_delete( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> CommonResourceDeletedResponse: ... -``` - -### JulepApi().users_route_get - -[Show source in client.py:3183](../../../../../../julep/api/client.py#L3183) - -Get a user by id - -Parameters ----------- -id : CommonUuid - ID of the resource - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -UsersUser - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_get( - id="id", -) - -#### Signature - -```python -def users_route_get( - self, id: CommonUuid, request_options: typing.Optional[RequestOptions] = None -) -> UsersUser: ... -``` - -### JulepApi().users_route_list - -[Show source in client.py:3052](../../../../../../julep/api/client.py#L3052) - -List users (paginated) - -Parameters ----------- -limit : CommonLimit - Limit the number of items returned - -offset : CommonOffset - Offset the items returned - -sort_by : UsersRouteListRequestSortBy - Sort by a field - -direction : UsersRouteListRequestDirection - Sort direction - -metadata_filter : str - JSON string of object that should be used to filter objects by metadata - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -UsersRouteListResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_list( - limit=1, - offset=1, - sort_by="created_at", - direction="asc", - metadata_filter="metadata_filter", -) - -#### Signature - -```python -def users_route_list( - self, - limit: CommonLimit, - offset: CommonOffset, - sort_by: UsersRouteListRequestSortBy, - direction: UsersRouteListRequestDirection, - metadata_filter: str, - request_options: typing.Optional[RequestOptions] = None, -) -> UsersRouteListResponse: ... -``` - -### JulepApi().users_route_patch - -[Show source in client.py:3394](../../../../../../julep/api/client.py#L3394) - -Update an existing user by id (merge with existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -name : typing.Optional[CommonIdentifierSafeUnicode] - Name of the user - -about : typing.Optional[str] - About the user - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_patch( - id="id", -) - -#### Signature - -```python -def users_route_patch( - self, - id: CommonUuid, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - name: typing.Optional[CommonIdentifierSafeUnicode] = OMIT, - about: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) - -### JulepApi().users_route_update - -[Show source in client.py:3288](../../../../../../julep/api/client.py#L3288) - -Update an existing user by id (overwrite existing values) - -Parameters ----------- -id : CommonUuid - ID of the resource - -name : CommonIdentifierSafeUnicode - Name of the user - -about : str - About the user - -metadata : typing.Optional[typing.Dict[str, typing.Any]] - -request_options : typing.Optional[RequestOptions] - Request-specific configuration. - -Returns -------- -CommonResourceUpdatedResponse - The request has succeeded. - -Examples --------- -from julep.client import JulepApi - -client = JulepApi( - auth_key="YOUR_AUTH_KEY", - api_key="YOUR_API_KEY", -) -client.users_route_update( - id="id", - name="name", - about="about", -) - -#### Signature - -```python -def users_route_update( - self, - id: CommonUuid, - name: CommonIdentifierSafeUnicode, - about: str, - metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, -) -> CommonResourceUpdatedResponse: ... -``` - -#### See also - -- [OMIT](#omit) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/api_error.md b/docs/python-sdk-docs/julep/api/core/api_error.md deleted file mode 100644 index 7a1374c8a..000000000 --- a/docs/python-sdk-docs/julep/api/core/api_error.md +++ /dev/null @@ -1,21 +0,0 @@ -# ApiError - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / ApiError - -> Auto-generated documentation for [julep.api.core.api_error](../../../../../../../julep/api/core/api_error.py) module. - -- [ApiError](#apierror) - - [ApiError](#apierror-1) - -## ApiError - -[Show source in api_error.py:6](../../../../../../../julep/api/core/api_error.py#L6) - -#### Signature - -```python -class ApiError(Exception): - def __init__( - self, status_code: typing.Optional[int] = None, body: typing.Any = None - ): ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/client_wrapper.md b/docs/python-sdk-docs/julep/api/core/client_wrapper.md deleted file mode 100644 index 876018f69..000000000 --- a/docs/python-sdk-docs/julep/api/core/client_wrapper.md +++ /dev/null @@ -1,105 +0,0 @@ -# Client Wrapper - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / Client Wrapper - -> Auto-generated documentation for [julep.api.core.client_wrapper](../../../../../../../julep/api/core/client_wrapper.py) module. - -- [Client Wrapper](#client-wrapper) - - [AsyncClientWrapper](#asyncclientwrapper) - - [BaseClientWrapper](#baseclientwrapper) - - [SyncClientWrapper](#syncclientwrapper) - -## AsyncClientWrapper - -[Show source in client_wrapper.py:58](../../../../../../../julep/api/core/client_wrapper.py#L58) - -#### Signature - -```python -class AsyncClientWrapper(BaseClientWrapper): - def __init__( - self, - auth_key: str, - api_key: str, - base_url: str, - timeout: typing.Optional[float] = None, - httpx_client: httpx.AsyncClient, - ): ... -``` - -#### See also - -- [BaseClientWrapper](#baseclientwrapper) - - - -## BaseClientWrapper - -[Show source in client_wrapper.py:10](../../../../../../../julep/api/core/client_wrapper.py#L10) - -#### Signature - -```python -class BaseClientWrapper: - def __init__( - self, - auth_key: str, - api_key: str, - base_url: str, - timeout: typing.Optional[float] = None, - ): ... -``` - -### BaseClientWrapper().get_base_url - -[Show source in client_wrapper.py:30](../../../../../../../julep/api/core/client_wrapper.py#L30) - -#### Signature - -```python -def get_base_url(self) -> str: ... -``` - -### BaseClientWrapper().get_headers - -[Show source in client_wrapper.py:24](../../../../../../../julep/api/core/client_wrapper.py#L24) - -#### Signature - -```python -def get_headers(self) -> typing.Dict[str, str]: ... -``` - -### BaseClientWrapper().get_timeout - -[Show source in client_wrapper.py:33](../../../../../../../julep/api/core/client_wrapper.py#L33) - -#### Signature - -```python -def get_timeout(self) -> typing.Optional[float]: ... -``` - - - -## SyncClientWrapper - -[Show source in client_wrapper.py:37](../../../../../../../julep/api/core/client_wrapper.py#L37) - -#### Signature - -```python -class SyncClientWrapper(BaseClientWrapper): - def __init__( - self, - auth_key: str, - api_key: str, - base_url: str, - timeout: typing.Optional[float] = None, - httpx_client: httpx.Client, - ): ... -``` - -#### See also - -- [BaseClientWrapper](#baseclientwrapper) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/datetime_utils.md b/docs/python-sdk-docs/julep/api/core/datetime_utils.md deleted file mode 100644 index 079e9b9c1..000000000 --- a/docs/python-sdk-docs/julep/api/core/datetime_utils.md +++ /dev/null @@ -1,24 +0,0 @@ -# Datetime Utils - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / Datetime Utils - -> Auto-generated documentation for [julep.api.core.datetime_utils](../../../../../../../julep/api/core/datetime_utils.py) module. - -- [Datetime Utils](#datetime-utils) - - [serialize_datetime](#serialize_datetime) - -## serialize_datetime - -[Show source in datetime_utils.py:6](../../../../../../../julep/api/core/datetime_utils.py#L6) - -Serialize a datetime including timezone info. - -Uses the timezone info provided if present, otherwise uses the current runtime's timezone info. - -UTC datetimes end in "Z" while all other timezones are represented as offset from UTC, e.g. +05:00. - -#### Signature - -```python -def serialize_datetime(v: dt.datetime) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/file.md b/docs/python-sdk-docs/julep/api/core/file.md deleted file mode 100644 index 79d76c4cf..000000000 --- a/docs/python-sdk-docs/julep/api/core/file.md +++ /dev/null @@ -1,36 +0,0 @@ -# File - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / File - -> Auto-generated documentation for [julep.api.core.file](../../../../../../../julep/api/core/file.py) module. - -#### Attributes - -- `FileContent` - File typing inspired by the flexibility of types within the httpx library - https://github.com/encode/httpx/blob/master/httpx/_types.py: typing.Union[typing.IO[bytes], bytes, str] - - -- [File](#file) - - [convert_file_dict_to_httpx_tuples](#convert_file_dict_to_httpx_tuples) - -## convert_file_dict_to_httpx_tuples - -[Show source in file.py:25](../../../../../../../julep/api/core/file.py#L25) - -The format we use is a list of tuples, where the first element is the -name of the file and the second is the file object. Typically HTTPX wants -a dict, but to be able to send lists of files, you have to use the list -approach (which also works for non-lists) -https://github.com/encode/httpx/pull/1032 - -#### Signature - -```python -def convert_file_dict_to_httpx_tuples( - d: typing.Dict[str, typing.Union[File, typing.List[File]]], -) -> typing.List[typing.Tuple[str, File]]: ... -``` - -#### See also - -- [File](#file) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/http_client.md b/docs/python-sdk-docs/julep/api/core/http_client.md deleted file mode 100644 index bdfc9598a..000000000 --- a/docs/python-sdk-docs/julep/api/core/http_client.md +++ /dev/null @@ -1,264 +0,0 @@ -# HttpClient - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / HttpClient - -> Auto-generated documentation for [julep.api.core.http_client](../../../../../../../julep/api/core/http_client.py) module. - -- [HttpClient](#httpclient) - - [AsyncHttpClient](#asynchttpclient) - - [HttpClient](#httpclient-1) - - [_parse_retry_after](#_parse_retry_after) - - [_retry_timeout](#_retry_timeout) - - [get_request_body](#get_request_body) - - [maybe_filter_request_body](#maybe_filter_request_body) - - [remove_omit_from_dict](#remove_omit_from_dict) - -## AsyncHttpClient - -[Show source in http_client.py:357](../../../../../../../julep/api/core/http_client.py#L357) - -#### Signature - -```python -class AsyncHttpClient: - def __init__( - self, - httpx_client: httpx.AsyncClient, - base_timeout: typing.Optional[float], - base_headers: typing.Dict[str, str], - base_url: typing.Optional[str] = None, - ): ... -``` - -### AsyncHttpClient().get_base_url - -[Show source in http_client.py:371](../../../../../../../julep/api/core/http_client.py#L371) - -#### Signature - -```python -def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str: ... -``` - -### AsyncHttpClient().request - -[Show source in http_client.py:379](../../../../../../../julep/api/core/http_client.py#L379) - -#### Signature - -```python -async def request( - self, - path: typing.Optional[str] = None, - method: str, - base_url: typing.Optional[str] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - json: typing.Optional[typing.Any] = None, - data: typing.Optional[typing.Any] = None, - content: typing.Optional[ - typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]] - ] = None, - files: typing.Optional[ - typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]] - ] = None, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - request_options: typing.Optional[RequestOptions] = None, - retries: int = 0, - omit: typing.Optional[typing.Any] = None, -) -> httpx.Response: ... -``` - -### AsyncHttpClient().stream - -[Show source in http_client.py:480](../../../../../../../julep/api/core/http_client.py#L480) - -#### Signature - -```python -@asynccontextmanager -async def stream( - self, - path: typing.Optional[str] = None, - method: str, - base_url: typing.Optional[str] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - json: typing.Optional[typing.Any] = None, - data: typing.Optional[typing.Any] = None, - content: typing.Optional[ - typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]] - ] = None, - files: typing.Optional[ - typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]] - ] = None, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - request_options: typing.Optional[RequestOptions] = None, - retries: int = 0, - omit: typing.Optional[typing.Any] = None, -) -> typing.AsyncIterator[httpx.Response]: ... -``` - - - -## HttpClient - -[Show source in http_client.py:153](../../../../../../../julep/api/core/http_client.py#L153) - -#### Signature - -```python -class HttpClient: - def __init__( - self, - httpx_client: httpx.Client, - base_timeout: typing.Optional[float], - base_headers: typing.Dict[str, str], - base_url: typing.Optional[str] = None, - ): ... -``` - -### HttpClient().get_base_url - -[Show source in http_client.py:167](../../../../../../../julep/api/core/http_client.py#L167) - -#### Signature - -```python -def get_base_url(self, maybe_base_url: typing.Optional[str]) -> str: ... -``` - -### HttpClient().request - -[Show source in http_client.py:175](../../../../../../../julep/api/core/http_client.py#L175) - -#### Signature - -```python -def request( - self, - path: typing.Optional[str] = None, - method: str, - base_url: typing.Optional[str] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - json: typing.Optional[typing.Any] = None, - data: typing.Optional[typing.Any] = None, - content: typing.Optional[ - typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]] - ] = None, - files: typing.Optional[ - typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]] - ] = None, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - request_options: typing.Optional[RequestOptions] = None, - retries: int = 0, - omit: typing.Optional[typing.Any] = None, -) -> httpx.Response: ... -``` - -### HttpClient().stream - -[Show source in http_client.py:276](../../../../../../../julep/api/core/http_client.py#L276) - -#### Signature - -```python -@contextmanager -def stream( - self, - path: typing.Optional[str] = None, - method: str, - base_url: typing.Optional[str] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - json: typing.Optional[typing.Any] = None, - data: typing.Optional[typing.Any] = None, - content: typing.Optional[ - typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]] - ] = None, - files: typing.Optional[ - typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]] - ] = None, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - request_options: typing.Optional[RequestOptions] = None, - retries: int = 0, - omit: typing.Optional[typing.Any] = None, -) -> typing.Iterator[httpx.Response]: ... -``` - - - -## _parse_retry_after - -[Show source in http_client.py:26](../../../../../../../julep/api/core/http_client.py#L26) - -This function parses the `Retry-After` header in a HTTP response and returns the number of seconds to wait. - -Inspired by the urllib3 retry implementation. - -#### Signature - -```python -def _parse_retry_after(response_headers: httpx.Headers) -> typing.Optional[float]: ... -``` - - - -## _retry_timeout - -[Show source in http_client.py:67](../../../../../../../julep/api/core/http_client.py#L67) - -Determine the amount of time to wait before retrying a request. -This function begins by trying to parse a retry-after header from the response, and then proceeds to use exponential backoff -with a jitter to determine the number of seconds to wait. - -#### Signature - -```python -def _retry_timeout(response: httpx.Response, retries: int) -> float: ... -``` - - - -## get_request_body - -[Show source in http_client.py:135](../../../../../../../julep/api/core/http_client.py#L135) - -#### Signature - -```python -def get_request_body( - json: typing.Optional[typing.Any], - data: typing.Optional[typing.Any], - request_options: typing.Optional[RequestOptions], - omit: typing.Optional[typing.Any], -) -> typing.Tuple[typing.Optional[typing.Any], typing.Optional[typing.Any]]: ... -``` - - - -## maybe_filter_request_body - -[Show source in http_client.py:107](../../../../../../../julep/api/core/http_client.py#L107) - -#### Signature - -```python -def maybe_filter_request_body( - data: typing.Optional[typing.Any], - request_options: typing.Optional[RequestOptions], - omit: typing.Optional[typing.Any], -) -> typing.Optional[typing.Any]: ... -``` - - - -## remove_omit_from_dict - -[Show source in http_client.py:94](../../../../../../../julep/api/core/http_client.py#L94) - -#### Signature - -```python -def remove_omit_from_dict( - original: typing.Dict[str, typing.Optional[typing.Any]], - omit: typing.Optional[typing.Any], -) -> typing.Dict[str, typing.Any]: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/index.md b/docs/python-sdk-docs/julep/api/core/index.md deleted file mode 100644 index 66561bb3a..000000000 --- a/docs/python-sdk-docs/julep/api/core/index.md +++ /dev/null @@ -1,21 +0,0 @@ -# Core - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / Core - -> Auto-generated documentation for [julep.api.core](../../../../../../../julep/api/core/__init__.py) module. - -- [Core](#core) - - [Modules](#modules) - -## Modules - -- [ApiError](./api_error.md) -- [Client Wrapper](./client_wrapper.md) -- [Datetime Utils](./datetime_utils.md) -- [File](./file.md) -- [HttpClient](./http_client.md) -- [Jsonable Encoder](./jsonable_encoder.md) -- [Pydantic Utilities](./pydantic_utilities.md) -- [Query Encoder](./query_encoder.md) -- [Remove None From Dict](./remove_none_from_dict.md) -- [RequestOptions](./request_options.md) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/jsonable_encoder.md b/docs/python-sdk-docs/julep/api/core/jsonable_encoder.md deleted file mode 100644 index 0f9ec18f8..000000000 --- a/docs/python-sdk-docs/julep/api/core/jsonable_encoder.md +++ /dev/null @@ -1,35 +0,0 @@ -# Jsonable Encoder - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / Jsonable Encoder - -> Auto-generated documentation for [julep.api.core.jsonable_encoder](../../../../../../../julep/api/core/jsonable_encoder.py) module. - -- [Jsonable Encoder](#jsonable-encoder) - - [generate_encoders_by_class_tuples](#generate_encoders_by_class_tuples) - - [jsonable_encoder](#jsonable_encoder) - -## generate_encoders_by_class_tuples - -[Show source in jsonable_encoder.py:26](../../../../../../../julep/api/core/jsonable_encoder.py#L26) - -#### Signature - -```python -def generate_encoders_by_class_tuples( - type_encoder_map: Dict[Any, Callable[[Any], Any]], -) -> Dict[Callable[[Any], Any], Tuple[Any, ...]]: ... -``` - - - -## jsonable_encoder - -[Show source in jsonable_encoder.py:42](../../../../../../../julep/api/core/jsonable_encoder.py#L42) - -#### Signature - -```python -def jsonable_encoder( - obj: Any, custom_encoder: Optional[Dict[Any, Callable[[Any], Any]]] = None -) -> Any: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/pydantic_utilities.md b/docs/python-sdk-docs/julep/api/core/pydantic_utilities.md deleted file mode 100644 index 032fa4805..000000000 --- a/docs/python-sdk-docs/julep/api/core/pydantic_utilities.md +++ /dev/null @@ -1,6 +0,0 @@ -# Pydantic Utilities - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / Pydantic Utilities - -> Auto-generated documentation for [julep.api.core.pydantic_utilities](../../../../../../../julep/api/core/pydantic_utilities.py) module. -- [Pydantic Utilities](#pydantic-utilities) diff --git a/docs/python-sdk-docs/julep/api/core/query_encoder.md b/docs/python-sdk-docs/julep/api/core/query_encoder.md deleted file mode 100644 index 2c4b4f65d..000000000 --- a/docs/python-sdk-docs/julep/api/core/query_encoder.md +++ /dev/null @@ -1,46 +0,0 @@ -# Query Encoder - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / Query Encoder - -> Auto-generated documentation for [julep.api.core.query_encoder](../../../../../../../julep/api/core/query_encoder.py) module. - -- [Query Encoder](#query-encoder) - - [encode_query](#encode_query) - - [single_query_encoder](#single_query_encoder) - - [traverse_query_dict](#traverse_query_dict) - -## encode_query - -[Show source in query_encoder.py:34](../../../../../../../julep/api/core/query_encoder.py#L34) - -#### Signature - -```python -def encode_query(query: Optional[Dict[str, Any]]) -> Optional[Dict[str, Any]]: ... -``` - - - -## single_query_encoder - -[Show source in query_encoder.py:23](../../../../../../../julep/api/core/query_encoder.py#L23) - -#### Signature - -```python -def single_query_encoder(query_key: str, query_value: Any) -> Dict[str, Any]: ... -``` - - - -## traverse_query_dict - -[Show source in query_encoder.py:10](../../../../../../../julep/api/core/query_encoder.py#L10) - -#### Signature - -```python -def traverse_query_dict( - dict_flat: Dict[str, Any], key_prefix: Optional[str] = None -) -> Dict[str, Any]: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/remove_none_from_dict.md b/docs/python-sdk-docs/julep/api/core/remove_none_from_dict.md deleted file mode 100644 index 532583b48..000000000 --- a/docs/python-sdk-docs/julep/api/core/remove_none_from_dict.md +++ /dev/null @@ -1,18 +0,0 @@ -# Remove None From Dict - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / Remove None From Dict - -> Auto-generated documentation for [julep.api.core.remove_none_from_dict](../../../../../../../julep/api/core/remove_none_from_dict.py) module. - -- [Remove None From Dict](#remove-none-from-dict) - - [remove_none_from_dict](#remove_none_from_dict) - -## remove_none_from_dict - -[Show source in remove_none_from_dict.py:6](../../../../../../../julep/api/core/remove_none_from_dict.py#L6) - -#### Signature - -```python -def remove_none_from_dict(original: Mapping[str, Optional[Any]]) -> Dict[str, Any]: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/core/request_options.md b/docs/python-sdk-docs/julep/api/core/request_options.md deleted file mode 100644 index cac44806f..000000000 --- a/docs/python-sdk-docs/julep/api/core/request_options.md +++ /dev/null @@ -1,33 +0,0 @@ -# RequestOptions - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Core](./index.md#core) / RequestOptions - -> Auto-generated documentation for [julep.api.core.request_options](../../../../../../../julep/api/core/request_options.py) module. - -- [RequestOptions](#requestoptions) - - [RequestOptions](#requestoptions-1) - -## RequestOptions - -[Show source in request_options.py:11](../../../../../../../julep/api/core/request_options.py#L11) - -Additional options for request-specific configuration when calling APIs via the SDK. -This is used primarily as an optional final parameter for service functions. - -#### Attributes - -- `-` *timeout_in_seconds* - int. The number of seconds to await an API call before timing out. - -- `-` *max_retries* - int. The max number of retries to attempt if the API call fails. - -- `-` *additional_headers* - typing.Dict[str, typing.Any]. A dictionary containing additional parameters to spread into the request's header dict - -- `-` *additional_query_parameters* - typing.Dict[str, typing.Any]. A dictionary containing additional parameters to spread into the request's query parameters dict - -- `-` *additional_body_parameters* - typing.Dict[str, typing.Any]. A dictionary containing additional parameters to spread into the request's body parameters dict - -#### Signature - -```python -class RequestOptions(typing.TypedDict): ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/environment.md b/docs/python-sdk-docs/julep/api/environment.md deleted file mode 100644 index d10e1aa22..000000000 --- a/docs/python-sdk-docs/julep/api/environment.md +++ /dev/null @@ -1,18 +0,0 @@ -# Environment - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Julep Python Library](./index.md#julep-python-library) / Environment - -> Auto-generated documentation for [julep.api.environment](../../../../../../julep/api/environment.py) module. - -- [Environment](#environment) - - [JulepApiEnvironment](#julepapienvironment) - -## JulepApiEnvironment - -[Show source in environment.py:6](../../../../../../julep/api/environment.py#L6) - -#### Signature - -```python -class JulepApiEnvironment(enum.Enum): ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/index.md b/docs/python-sdk-docs/julep/api/index.md deleted file mode 100644 index f943d9357..000000000 --- a/docs/python-sdk-docs/julep/api/index.md +++ /dev/null @@ -1,15 +0,0 @@ -# Julep Python Library - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / Julep Python Library - -> Auto-generated documentation for [julep.api](../../../../../../julep/api/__init__.py) module. - -- [Julep Python Library](#julep-python-library) - - [Modules](#modules) - -## Modules - -- [Client](./client.md) -- [Core](core/index.md) -- [Environment](./environment.md) -- [Types](types/index.md) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_request_direction.md deleted file mode 100644 index 6073fd184..000000000 --- a/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agent Docs Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agent Docs Route List Request Direction - -> Auto-generated documentation for [julep.api.types.agent_docs_route_list_request_direction](../../../../../../../julep/api/types/agent_docs_route_list_request_direction.py) module. -- [Agent Docs Route List Request Direction](#agent-docs-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_request_sort_by.md deleted file mode 100644 index 5c28c8198..000000000 --- a/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agent Docs Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agent Docs Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.agent_docs_route_list_request_sort_by](../../../../../../../julep/api/types/agent_docs_route_list_request_sort_by.py) module. -- [Agent Docs Route List Request Sort By](#agent-docs-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_response.md b/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_response.md deleted file mode 100644 index 07b9352e5..000000000 --- a/docs/python-sdk-docs/julep/api/types/agent_docs_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# AgentDocsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentDocsRouteListResponse - -> Auto-generated documentation for [julep.api.types.agent_docs_route_list_response](../../../../../../../julep/api/types/agent_docs_route_list_response.py) module. - -- [AgentDocsRouteListResponse](#agentdocsroutelistresponse) - - [AgentDocsRouteListResponse](#agentdocsroutelistresponse-1) - -## AgentDocsRouteListResponse - -[Show source in agent_docs_route_list_response.py:11](../../../../../../../julep/api/types/agent_docs_route_list_response.py#L11) - -#### Signature - -```python -class AgentDocsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### AgentDocsRouteListResponse().dict - -[Show source in agent_docs_route_list_response.py:22](../../../../../../../julep/api/types/agent_docs_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentDocsRouteListResponse().json - -[Show source in agent_docs_route_list_response.py:14](../../../../../../../julep/api/types/agent_docs_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_request_direction.md deleted file mode 100644 index 6a9f1e4c2..000000000 --- a/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agent Tools Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agent Tools Route List Request Direction - -> Auto-generated documentation for [julep.api.types.agent_tools_route_list_request_direction](../../../../../../../julep/api/types/agent_tools_route_list_request_direction.py) module. -- [Agent Tools Route List Request Direction](#agent-tools-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_request_sort_by.md deleted file mode 100644 index f8ce5d292..000000000 --- a/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agent Tools Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agent Tools Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.agent_tools_route_list_request_sort_by](../../../../../../../julep/api/types/agent_tools_route_list_request_sort_by.py) module. -- [Agent Tools Route List Request Sort By](#agent-tools-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_response.md b/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_response.md deleted file mode 100644 index 49377b911..000000000 --- a/docs/python-sdk-docs/julep/api/types/agent_tools_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# AgentToolsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentToolsRouteListResponse - -> Auto-generated documentation for [julep.api.types.agent_tools_route_list_response](../../../../../../../julep/api/types/agent_tools_route_list_response.py) module. - -- [AgentToolsRouteListResponse](#agenttoolsroutelistresponse) - - [AgentToolsRouteListResponse](#agenttoolsroutelistresponse-1) - -## AgentToolsRouteListResponse - -[Show source in agent_tools_route_list_response.py:11](../../../../../../../julep/api/types/agent_tools_route_list_response.py#L11) - -#### Signature - -```python -class AgentToolsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### AgentToolsRouteListResponse().dict - -[Show source in agent_tools_route_list_response.py:22](../../../../../../../julep/api/types/agent_tools_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentToolsRouteListResponse().json - -[Show source in agent_tools_route_list_response.py:14](../../../../../../../julep/api/types/agent_tools_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agents_agent.md b/docs/python-sdk-docs/julep/api/types/agents_agent.md deleted file mode 100644 index 0e1b52be6..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_agent.md +++ /dev/null @@ -1,38 +0,0 @@ -# AgentsAgent - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentsAgent - -> Auto-generated documentation for [julep.api.types.agents_agent](../../../../../../../julep/api/types/agents_agent.py) module. - -- [AgentsAgent](#agentsagent) - - [AgentsAgent](#agentsagent-1) - -## AgentsAgent - -[Show source in agents_agent.py:14](../../../../../../../julep/api/types/agents_agent.py#L14) - -#### Signature - -```python -class AgentsAgent(pydantic_v1.BaseModel): ... -``` - -### AgentsAgent().dict - -[Show source in agents_agent.py:62](../../../../../../../julep/api/types/agents_agent.py#L62) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentsAgent().json - -[Show source in agents_agent.py:54](../../../../../../../julep/api/types/agents_agent.py#L54) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agents_agent_instructions.md b/docs/python-sdk-docs/julep/api/types/agents_agent_instructions.md deleted file mode 100644 index fde3264fe..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_agent_instructions.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Agent Instructions - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Agent Instructions - -> Auto-generated documentation for [julep.api.types.agents_agent_instructions](../../../../../../../julep/api/types/agents_agent_instructions.py) module. -- [Agents Agent Instructions](#agents-agent-instructions) diff --git a/docs/python-sdk-docs/julep/api/types/agents_create_agent_request.md b/docs/python-sdk-docs/julep/api/types/agents_create_agent_request.md deleted file mode 100644 index 0102d2005..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_create_agent_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# AgentsCreateAgentRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentsCreateAgentRequest - -> Auto-generated documentation for [julep.api.types.agents_create_agent_request](../../../../../../../julep/api/types/agents_create_agent_request.py) module. - -- [AgentsCreateAgentRequest](#agentscreateagentrequest) - - [AgentsCreateAgentRequest](#agentscreateagentrequest-1) - -## AgentsCreateAgentRequest - -[Show source in agents_create_agent_request.py:15](../../../../../../../julep/api/types/agents_create_agent_request.py#L15) - -Payload for creating a agent (and associated documents) - -#### Signature - -```python -class AgentsCreateAgentRequest(pydantic_v1.BaseModel): ... -``` - -### AgentsCreateAgentRequest().dict - -[Show source in agents_create_agent_request.py:56](../../../../../../../julep/api/types/agents_create_agent_request.py#L56) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentsCreateAgentRequest().json - -[Show source in agents_create_agent_request.py:48](../../../../../../../julep/api/types/agents_create_agent_request.py#L48) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agents_create_agent_request_instructions.md b/docs/python-sdk-docs/julep/api/types/agents_create_agent_request_instructions.md deleted file mode 100644 index 3b7d98899..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_create_agent_request_instructions.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Create Agent Request Instructions - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Create Agent Request Instructions - -> Auto-generated documentation for [julep.api.types.agents_create_agent_request_instructions](../../../../../../../julep/api/types/agents_create_agent_request_instructions.py) module. -- [Agents Create Agent Request Instructions](#agents-create-agent-request-instructions) diff --git a/docs/python-sdk-docs/julep/api/types/agents_create_or_update_agent_request.md b/docs/python-sdk-docs/julep/api/types/agents_create_or_update_agent_request.md deleted file mode 100644 index e13f3c7e3..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_create_or_update_agent_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# AgentsCreateOrUpdateAgentRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentsCreateOrUpdateAgentRequest - -> Auto-generated documentation for [julep.api.types.agents_create_or_update_agent_request](../../../../../../../julep/api/types/agents_create_or_update_agent_request.py) module. - -- [AgentsCreateOrUpdateAgentRequest](#agentscreateorupdateagentrequest) - - [AgentsCreateOrUpdateAgentRequest](#agentscreateorupdateagentrequest-1) - -## AgentsCreateOrUpdateAgentRequest - -[Show source in agents_create_or_update_agent_request.py:16](../../../../../../../julep/api/types/agents_create_or_update_agent_request.py#L16) - -#### Signature - -```python -class AgentsCreateOrUpdateAgentRequest(pydantic_v1.BaseModel): ... -``` - -### AgentsCreateOrUpdateAgentRequest().dict - -[Show source in agents_create_or_update_agent_request.py:54](../../../../../../../julep/api/types/agents_create_or_update_agent_request.py#L54) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentsCreateOrUpdateAgentRequest().json - -[Show source in agents_create_or_update_agent_request.py:46](../../../../../../../julep/api/types/agents_create_or_update_agent_request.py#L46) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agents_docs_search_route_search_request_body.md b/docs/python-sdk-docs/julep/api/types/agents_docs_search_route_search_request_body.md deleted file mode 100644 index bb7c047be..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_docs_search_route_search_request_body.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Docs Search Route Search Request Body - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Docs Search Route Search Request Body - -> Auto-generated documentation for [julep.api.types.agents_docs_search_route_search_request_body](../../../../../../../julep/api/types/agents_docs_search_route_search_request_body.py) module. -- [Agents Docs Search Route Search Request Body](#agents-docs-search-route-search-request-body) diff --git a/docs/python-sdk-docs/julep/api/types/agents_patch_agent_request_instructions.md b/docs/python-sdk-docs/julep/api/types/agents_patch_agent_request_instructions.md deleted file mode 100644 index d05f16482..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_patch_agent_request_instructions.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Patch Agent Request Instructions - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Patch Agent Request Instructions - -> Auto-generated documentation for [julep.api.types.agents_patch_agent_request_instructions](../../../../../../../julep/api/types/agents_patch_agent_request_instructions.py) module. -- [Agents Patch Agent Request Instructions](#agents-patch-agent-request-instructions) diff --git a/docs/python-sdk-docs/julep/api/types/agents_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/agents_route_list_request_direction.md deleted file mode 100644 index c723dd549..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Route List Request Direction - -> Auto-generated documentation for [julep.api.types.agents_route_list_request_direction](../../../../../../../julep/api/types/agents_route_list_request_direction.py) module. -- [Agents Route List Request Direction](#agents-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/agents_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/agents_route_list_request_sort_by.md deleted file mode 100644 index dae7a82ba..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.agents_route_list_request_sort_by](../../../../../../../julep/api/types/agents_route_list_request_sort_by.py) module. -- [Agents Route List Request Sort By](#agents-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/agents_route_list_response.md b/docs/python-sdk-docs/julep/api/types/agents_route_list_response.md deleted file mode 100644 index cbe615c1e..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# AgentsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentsRouteListResponse - -> Auto-generated documentation for [julep.api.types.agents_route_list_response](../../../../../../../julep/api/types/agents_route_list_response.py) module. - -- [AgentsRouteListResponse](#agentsroutelistresponse) - - [AgentsRouteListResponse](#agentsroutelistresponse-1) - -## AgentsRouteListResponse - -[Show source in agents_route_list_response.py:11](../../../../../../../julep/api/types/agents_route_list_response.py#L11) - -#### Signature - -```python -class AgentsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### AgentsRouteListResponse().dict - -[Show source in agents_route_list_response.py:22](../../../../../../../julep/api/types/agents_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentsRouteListResponse().json - -[Show source in agents_route_list_response.py:14](../../../../../../../julep/api/types/agents_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agents_update_agent_request.md b/docs/python-sdk-docs/julep/api/types/agents_update_agent_request.md deleted file mode 100644 index 8f906f097..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_update_agent_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# AgentsUpdateAgentRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / AgentsUpdateAgentRequest - -> Auto-generated documentation for [julep.api.types.agents_update_agent_request](../../../../../../../julep/api/types/agents_update_agent_request.py) module. - -- [AgentsUpdateAgentRequest](#agentsupdateagentrequest) - - [AgentsUpdateAgentRequest](#agentsupdateagentrequest-1) - -## AgentsUpdateAgentRequest - -[Show source in agents_update_agent_request.py:15](../../../../../../../julep/api/types/agents_update_agent_request.py#L15) - -Payload for updating a agent - -#### Signature - -```python -class AgentsUpdateAgentRequest(pydantic_v1.BaseModel): ... -``` - -### AgentsUpdateAgentRequest().dict - -[Show source in agents_update_agent_request.py:56](../../../../../../../julep/api/types/agents_update_agent_request.py#L56) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### AgentsUpdateAgentRequest().json - -[Show source in agents_update_agent_request.py:48](../../../../../../../julep/api/types/agents_update_agent_request.py#L48) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/agents_update_agent_request_instructions.md b/docs/python-sdk-docs/julep/api/types/agents_update_agent_request_instructions.md deleted file mode 100644 index a2a61914f..000000000 --- a/docs/python-sdk-docs/julep/api/types/agents_update_agent_request_instructions.md +++ /dev/null @@ -1,6 +0,0 @@ -# Agents Update Agent Request Instructions - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Agents Update Agent Request Instructions - -> Auto-generated documentation for [julep.api.types.agents_update_agent_request_instructions](../../../../../../../julep/api/types/agents_update_agent_request_instructions.py) module. -- [Agents Update Agent Request Instructions](#agents-update-agent-request-instructions) diff --git a/docs/python-sdk-docs/julep/api/types/chat_base_chat_output.md b/docs/python-sdk-docs/julep/api/types/chat_base_chat_output.md deleted file mode 100644 index 4f6fde8bc..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_base_chat_output.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatBaseChatOutput - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatBaseChatOutput - -> Auto-generated documentation for [julep.api.types.chat_base_chat_output](../../../../../../../julep/api/types/chat_base_chat_output.py) module. - -- [ChatBaseChatOutput](#chatbasechatoutput) - - [ChatBaseChatOutput](#chatbasechatoutput-1) - -## ChatBaseChatOutput - -[Show source in chat_base_chat_output.py:12](../../../../../../../julep/api/types/chat_base_chat_output.py#L12) - -#### Signature - -```python -class ChatBaseChatOutput(pydantic_v1.BaseModel): ... -``` - -### ChatBaseChatOutput().dict - -[Show source in chat_base_chat_output.py:32](../../../../../../../julep/api/types/chat_base_chat_output.py#L32) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatBaseChatOutput().json - -[Show source in chat_base_chat_output.py:24](../../../../../../../julep/api/types/chat_base_chat_output.py#L24) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_base_chat_response.md b/docs/python-sdk-docs/julep/api/types/chat_base_chat_response.md deleted file mode 100644 index 9eef6113b..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_base_chat_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatBaseChatResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatBaseChatResponse - -> Auto-generated documentation for [julep.api.types.chat_base_chat_response](../../../../../../../julep/api/types/chat_base_chat_response.py) module. - -- [ChatBaseChatResponse](#chatbasechatresponse) - - [ChatBaseChatResponse](#chatbasechatresponse-1) - -## ChatBaseChatResponse - -[Show source in chat_base_chat_response.py:13](../../../../../../../julep/api/types/chat_base_chat_response.py#L13) - -#### Signature - -```python -class ChatBaseChatResponse(pydantic_v1.BaseModel): ... -``` - -### ChatBaseChatResponse().dict - -[Show source in chat_base_chat_response.py:44](../../../../../../../julep/api/types/chat_base_chat_response.py#L44) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatBaseChatResponse().json - -[Show source in chat_base_chat_response.py:36](../../../../../../../julep/api/types/chat_base_chat_response.py#L36) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_base_token_log_prob.md b/docs/python-sdk-docs/julep/api/types/chat_base_token_log_prob.md deleted file mode 100644 index 02074dd4e..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_base_token_log_prob.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatBaseTokenLogProb - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatBaseTokenLogProb - -> Auto-generated documentation for [julep.api.types.chat_base_token_log_prob](../../../../../../../julep/api/types/chat_base_token_log_prob.py) module. - -- [ChatBaseTokenLogProb](#chatbasetokenlogprob) - - [ChatBaseTokenLogProb](#chatbasetokenlogprob-1) - -## ChatBaseTokenLogProb - -[Show source in chat_base_token_log_prob.py:10](../../../../../../../julep/api/types/chat_base_token_log_prob.py#L10) - -#### Signature - -```python -class ChatBaseTokenLogProb(pydantic_v1.BaseModel): ... -``` - -### ChatBaseTokenLogProb().dict - -[Show source in chat_base_token_log_prob.py:27](../../../../../../../julep/api/types/chat_base_token_log_prob.py#L27) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatBaseTokenLogProb().json - -[Show source in chat_base_token_log_prob.py:19](../../../../../../../julep/api/types/chat_base_token_log_prob.py#L19) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_chat_input_data.md b/docs/python-sdk-docs/julep/api/types/chat_chat_input_data.md deleted file mode 100644 index a830d7fa5..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_chat_input_data.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatChatInputData - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatChatInputData - -> Auto-generated documentation for [julep.api.types.chat_chat_input_data](../../../../../../../julep/api/types/chat_chat_input_data.py) module. - -- [ChatChatInputData](#chatchatinputdata) - - [ChatChatInputData](#chatchatinputdata-1) - -## ChatChatInputData - -[Show source in chat_chat_input_data.py:13](../../../../../../../julep/api/types/chat_chat_input_data.py#L13) - -#### Signature - -```python -class ChatChatInputData(pydantic_v1.BaseModel): ... -``` - -### ChatChatInputData().dict - -[Show source in chat_chat_input_data.py:41](../../../../../../../julep/api/types/chat_chat_input_data.py#L41) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatChatInputData().json - -[Show source in chat_chat_input_data.py:33](../../../../../../../julep/api/types/chat_chat_input_data.py#L33) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_chat_input_data_tool_choice.md b/docs/python-sdk-docs/julep/api/types/chat_chat_input_data_tool_choice.md deleted file mode 100644 index 819c98d14..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_chat_input_data_tool_choice.md +++ /dev/null @@ -1,6 +0,0 @@ -# Chat Chat Input Data Tool Choice - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Chat Chat Input Data Tool Choice - -> Auto-generated documentation for [julep.api.types.chat_chat_input_data_tool_choice](../../../../../../../julep/api/types/chat_chat_input_data_tool_choice.py) module. -- [Chat Chat Input Data Tool Choice](#chat-chat-input-data-tool-choice) diff --git a/docs/python-sdk-docs/julep/api/types/chat_chat_output_chunk.md b/docs/python-sdk-docs/julep/api/types/chat_chat_output_chunk.md deleted file mode 100644 index 25f16b4ba..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_chat_output_chunk.md +++ /dev/null @@ -1,40 +0,0 @@ -# ChatChatOutputChunk - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatChatOutputChunk - -> Auto-generated documentation for [julep.api.types.chat_chat_output_chunk](../../../../../../../julep/api/types/chat_chat_output_chunk.py) module. - -- [ChatChatOutputChunk](#chatchatoutputchunk) - - [ChatChatOutputChunk](#chatchatoutputchunk-1) - -## ChatChatOutputChunk - -[Show source in chat_chat_output_chunk.py:12](../../../../../../../julep/api/types/chat_chat_output_chunk.py#L12) - -Streaming chat completion output - -#### Signature - -```python -class ChatChatOutputChunk(ChatBaseChatOutput): ... -``` - -### ChatChatOutputChunk().dict - -[Show source in chat_chat_output_chunk.py:30](../../../../../../../julep/api/types/chat_chat_output_chunk.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatChatOutputChunk().json - -[Show source in chat_chat_output_chunk.py:22](../../../../../../../julep/api/types/chat_chat_output_chunk.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_chat_settings.md b/docs/python-sdk-docs/julep/api/types/chat_chat_settings.md deleted file mode 100644 index af2b74943..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_chat_settings.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatChatSettings - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatChatSettings - -> Auto-generated documentation for [julep.api.types.chat_chat_settings](../../../../../../../julep/api/types/chat_chat_settings.py) module. - -- [ChatChatSettings](#chatchatsettings) - - [ChatChatSettings](#chatchatsettings-1) - -## ChatChatSettings - -[Show source in chat_chat_settings.py:15](../../../../../../../julep/api/types/chat_chat_settings.py#L15) - -#### Signature - -```python -class ChatChatSettings(ChatDefaultChatSettings): ... -``` - -### ChatChatSettings().dict - -[Show source in chat_chat_settings.py:70](../../../../../../../julep/api/types/chat_chat_settings.py#L70) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatChatSettings().json - -[Show source in chat_chat_settings.py:62](../../../../../../../julep/api/types/chat_chat_settings.py#L62) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_chunk_chat_response.md b/docs/python-sdk-docs/julep/api/types/chat_chunk_chat_response.md deleted file mode 100644 index 2ec411b53..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_chunk_chat_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatChunkChatResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatChunkChatResponse - -> Auto-generated documentation for [julep.api.types.chat_chunk_chat_response](../../../../../../../julep/api/types/chat_chunk_chat_response.py) module. - -- [ChatChunkChatResponse](#chatchunkchatresponse) - - [ChatChunkChatResponse](#chatchunkchatresponse-1) - -## ChatChunkChatResponse - -[Show source in chat_chunk_chat_response.py:12](../../../../../../../julep/api/types/chat_chunk_chat_response.py#L12) - -#### Signature - -```python -class ChatChunkChatResponse(ChatBaseChatResponse): ... -``` - -### ChatChunkChatResponse().dict - -[Show source in chat_chunk_chat_response.py:26](../../../../../../../julep/api/types/chat_chunk_chat_response.py#L26) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatChunkChatResponse().json - -[Show source in chat_chunk_chat_response.py:18](../../../../../../../julep/api/types/chat_chunk_chat_response.py#L18) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_competion_usage.md b/docs/python-sdk-docs/julep/api/types/chat_competion_usage.md deleted file mode 100644 index 8c55bb12c..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_competion_usage.md +++ /dev/null @@ -1,40 +0,0 @@ -# ChatCompetionUsage - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatCompetionUsage - -> Auto-generated documentation for [julep.api.types.chat_competion_usage](../../../../../../../julep/api/types/chat_competion_usage.py) module. - -- [ChatCompetionUsage](#chatcompetionusage) - - [ChatCompetionUsage](#chatcompetionusage-1) - -## ChatCompetionUsage - -[Show source in chat_competion_usage.py:10](../../../../../../../julep/api/types/chat_competion_usage.py#L10) - -Usage statistics for the completion request - -#### Signature - -```python -class ChatCompetionUsage(pydantic_v1.BaseModel): ... -``` - -### ChatCompetionUsage().dict - -[Show source in chat_competion_usage.py:38](../../../../../../../julep/api/types/chat_competion_usage.py#L38) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatCompetionUsage().json - -[Show source in chat_competion_usage.py:30](../../../../../../../julep/api/types/chat_competion_usage.py#L30) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_completion_response_format.md b/docs/python-sdk-docs/julep/api/types/chat_completion_response_format.md deleted file mode 100644 index c18aab307..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_completion_response_format.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatCompletionResponseFormat - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatCompletionResponseFormat - -> Auto-generated documentation for [julep.api.types.chat_completion_response_format](../../../../../../../julep/api/types/chat_completion_response_format.py) module. - -- [ChatCompletionResponseFormat](#chatcompletionresponseformat) - - [ChatCompletionResponseFormat](#chatcompletionresponseformat-1) - -## ChatCompletionResponseFormat - -[Show source in chat_completion_response_format.py:11](../../../../../../../julep/api/types/chat_completion_response_format.py#L11) - -#### Signature - -```python -class ChatCompletionResponseFormat(pydantic_v1.BaseModel): ... -``` - -### ChatCompletionResponseFormat().dict - -[Show source in chat_completion_response_format.py:25](../../../../../../../julep/api/types/chat_completion_response_format.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatCompletionResponseFormat().json - -[Show source in chat_completion_response_format.py:17](../../../../../../../julep/api/types/chat_completion_response_format.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_completion_response_format_type.md b/docs/python-sdk-docs/julep/api/types/chat_completion_response_format_type.md deleted file mode 100644 index 0630b2d84..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_completion_response_format_type.md +++ /dev/null @@ -1,6 +0,0 @@ -# Chat Completion Response Format Type - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Chat Completion Response Format Type - -> Auto-generated documentation for [julep.api.types.chat_completion_response_format_type](../../../../../../../julep/api/types/chat_completion_response_format_type.py) module. -- [Chat Completion Response Format Type](#chat-completion-response-format-type) diff --git a/docs/python-sdk-docs/julep/api/types/chat_default_chat_settings.md b/docs/python-sdk-docs/julep/api/types/chat_default_chat_settings.md deleted file mode 100644 index 5905defde..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_default_chat_settings.md +++ /dev/null @@ -1,40 +0,0 @@ -# ChatDefaultChatSettings - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatDefaultChatSettings - -> Auto-generated documentation for [julep.api.types.chat_default_chat_settings](../../../../../../../julep/api/types/chat_default_chat_settings.py) module. - -- [ChatDefaultChatSettings](#chatdefaultchatsettings) - - [ChatDefaultChatSettings](#chatdefaultchatsettings-1) - -## ChatDefaultChatSettings - -[Show source in chat_default_chat_settings.py:11](../../../../../../../julep/api/types/chat_default_chat_settings.py#L11) - -Default settings for the chat session (also used by the agent) - -#### Signature - -```python -class ChatDefaultChatSettings(ChatOpenAiSettings): ... -``` - -### ChatDefaultChatSettings().dict - -[Show source in chat_default_chat_settings.py:39](../../../../../../../julep/api/types/chat_default_chat_settings.py#L39) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatDefaultChatSettings().json - -[Show source in chat_default_chat_settings.py:31](../../../../../../../julep/api/types/chat_default_chat_settings.py#L31) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_finish_reason.md b/docs/python-sdk-docs/julep/api/types/chat_finish_reason.md deleted file mode 100644 index b01a1c85e..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_finish_reason.md +++ /dev/null @@ -1,6 +0,0 @@ -# Chat Finish Reason - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Chat Finish Reason - -> Auto-generated documentation for [julep.api.types.chat_finish_reason](../../../../../../../julep/api/types/chat_finish_reason.py) module. -- [Chat Finish Reason](#chat-finish-reason) diff --git a/docs/python-sdk-docs/julep/api/types/chat_log_prob_response.md b/docs/python-sdk-docs/julep/api/types/chat_log_prob_response.md deleted file mode 100644 index 3b72f98c7..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_log_prob_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatLogProbResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatLogProbResponse - -> Auto-generated documentation for [julep.api.types.chat_log_prob_response](../../../../../../../julep/api/types/chat_log_prob_response.py) module. - -- [ChatLogProbResponse](#chatlogprobresponse) - - [ChatLogProbResponse](#chatlogprobresponse-1) - -## ChatLogProbResponse - -[Show source in chat_log_prob_response.py:11](../../../../../../../julep/api/types/chat_log_prob_response.py#L11) - -#### Signature - -```python -class ChatLogProbResponse(pydantic_v1.BaseModel): ... -``` - -### ChatLogProbResponse().dict - -[Show source in chat_log_prob_response.py:27](../../../../../../../julep/api/types/chat_log_prob_response.py#L27) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatLogProbResponse().json - -[Show source in chat_log_prob_response.py:19](../../../../../../../julep/api/types/chat_log_prob_response.py#L19) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_message_chat_response.md b/docs/python-sdk-docs/julep/api/types/chat_message_chat_response.md deleted file mode 100644 index 361a12782..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_message_chat_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatMessageChatResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatMessageChatResponse - -> Auto-generated documentation for [julep.api.types.chat_message_chat_response](../../../../../../../julep/api/types/chat_message_chat_response.py) module. - -- [ChatMessageChatResponse](#chatmessagechatresponse) - - [ChatMessageChatResponse](#chatmessagechatresponse-1) - -## ChatMessageChatResponse - -[Show source in chat_message_chat_response.py:12](../../../../../../../julep/api/types/chat_message_chat_response.py#L12) - -#### Signature - -```python -class ChatMessageChatResponse(ChatBaseChatResponse): ... -``` - -### ChatMessageChatResponse().dict - -[Show source in chat_message_chat_response.py:26](../../../../../../../julep/api/types/chat_message_chat_response.py#L26) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatMessageChatResponse().json - -[Show source in chat_message_chat_response.py:18](../../../../../../../julep/api/types/chat_message_chat_response.py#L18) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_message_chat_response_choices_item.md b/docs/python-sdk-docs/julep/api/types/chat_message_chat_response_choices_item.md deleted file mode 100644 index 8cdf93ded..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_message_chat_response_choices_item.md +++ /dev/null @@ -1,6 +0,0 @@ -# Chat Message Chat Response Choices Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Chat Message Chat Response Choices Item - -> Auto-generated documentation for [julep.api.types.chat_message_chat_response_choices_item](../../../../../../../julep/api/types/chat_message_chat_response_choices_item.py) module. -- [Chat Message Chat Response Choices Item](#chat-message-chat-response-choices-item) diff --git a/docs/python-sdk-docs/julep/api/types/chat_multiple_chat_output.md b/docs/python-sdk-docs/julep/api/types/chat_multiple_chat_output.md deleted file mode 100644 index e6e1502ba..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_multiple_chat_output.md +++ /dev/null @@ -1,40 +0,0 @@ -# ChatMultipleChatOutput - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatMultipleChatOutput - -> Auto-generated documentation for [julep.api.types.chat_multiple_chat_output](../../../../../../../julep/api/types/chat_multiple_chat_output.py) module. - -- [ChatMultipleChatOutput](#chatmultiplechatoutput) - - [ChatMultipleChatOutput](#chatmultiplechatoutput-1) - -## ChatMultipleChatOutput - -[Show source in chat_multiple_chat_output.py:12](../../../../../../../julep/api/types/chat_multiple_chat_output.py#L12) - -The output returned by the model. Note that, depending on the model provider, they might return more than one message. - -#### Signature - -```python -class ChatMultipleChatOutput(ChatBaseChatOutput): ... -``` - -### ChatMultipleChatOutput().dict - -[Show source in chat_multiple_chat_output.py:27](../../../../../../../julep/api/types/chat_multiple_chat_output.py#L27) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatMultipleChatOutput().json - -[Show source in chat_multiple_chat_output.py:19](../../../../../../../julep/api/types/chat_multiple_chat_output.py#L19) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_open_ai_settings.md b/docs/python-sdk-docs/julep/api/types/chat_open_ai_settings.md deleted file mode 100644 index d04291d75..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_open_ai_settings.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatOpenAiSettings - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatOpenAiSettings - -> Auto-generated documentation for [julep.api.types.chat_open_ai_settings](../../../../../../../julep/api/types/chat_open_ai_settings.py) module. - -- [ChatOpenAiSettings](#chatopenaisettings) - - [ChatOpenAiSettings](#chatopenaisettings-1) - -## ChatOpenAiSettings - -[Show source in chat_open_ai_settings.py:10](../../../../../../../julep/api/types/chat_open_ai_settings.py#L10) - -#### Signature - -```python -class ChatOpenAiSettings(pydantic_v1.BaseModel): ... -``` - -### ChatOpenAiSettings().dict - -[Show source in chat_open_ai_settings.py:39](../../../../../../../julep/api/types/chat_open_ai_settings.py#L39) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatOpenAiSettings().json - -[Show source in chat_open_ai_settings.py:31](../../../../../../../julep/api/types/chat_open_ai_settings.py#L31) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_route_generate_response.md b/docs/python-sdk-docs/julep/api/types/chat_route_generate_response.md deleted file mode 100644 index 947f8c61e..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_route_generate_response.md +++ /dev/null @@ -1,6 +0,0 @@ -# Chat Route Generate Response - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Chat Route Generate Response - -> Auto-generated documentation for [julep.api.types.chat_route_generate_response](../../../../../../../julep/api/types/chat_route_generate_response.py) module. -- [Chat Route Generate Response](#chat-route-generate-response) diff --git a/docs/python-sdk-docs/julep/api/types/chat_single_chat_output.md b/docs/python-sdk-docs/julep/api/types/chat_single_chat_output.md deleted file mode 100644 index dac22a9c6..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_single_chat_output.md +++ /dev/null @@ -1,40 +0,0 @@ -# ChatSingleChatOutput - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatSingleChatOutput - -> Auto-generated documentation for [julep.api.types.chat_single_chat_output](../../../../../../../julep/api/types/chat_single_chat_output.py) module. - -- [ChatSingleChatOutput](#chatsinglechatoutput) - - [ChatSingleChatOutput](#chatsinglechatoutput-1) - -## ChatSingleChatOutput - -[Show source in chat_single_chat_output.py:12](../../../../../../../julep/api/types/chat_single_chat_output.py#L12) - -The output returned by the model. Note that, depending on the model provider, they might return more than one message. - -#### Signature - -```python -class ChatSingleChatOutput(ChatBaseChatOutput): ... -``` - -### ChatSingleChatOutput().dict - -[Show source in chat_single_chat_output.py:27](../../../../../../../julep/api/types/chat_single_chat_output.py#L27) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatSingleChatOutput().json - -[Show source in chat_single_chat_output.py:19](../../../../../../../julep/api/types/chat_single_chat_output.py#L19) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/chat_token_log_prob.md b/docs/python-sdk-docs/julep/api/types/chat_token_log_prob.md deleted file mode 100644 index d4a37cd47..000000000 --- a/docs/python-sdk-docs/julep/api/types/chat_token_log_prob.md +++ /dev/null @@ -1,38 +0,0 @@ -# ChatTokenLogProb - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ChatTokenLogProb - -> Auto-generated documentation for [julep.api.types.chat_token_log_prob](../../../../../../../julep/api/types/chat_token_log_prob.py) module. - -- [ChatTokenLogProb](#chattokenlogprob) - - [ChatTokenLogProb](#chattokenlogprob-1) - -## ChatTokenLogProb - -[Show source in chat_token_log_prob.py:11](../../../../../../../julep/api/types/chat_token_log_prob.py#L11) - -#### Signature - -```python -class ChatTokenLogProb(ChatBaseTokenLogProb): ... -``` - -### ChatTokenLogProb().dict - -[Show source in chat_token_log_prob.py:22](../../../../../../../julep/api/types/chat_token_log_prob.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ChatTokenLogProb().json - -[Show source in chat_token_log_prob.py:14](../../../../../../../julep/api/types/chat_token_log_prob.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/common_identifier_safe_unicode.md b/docs/python-sdk-docs/julep/api/types/common_identifier_safe_unicode.md deleted file mode 100644 index 4c4999309..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_identifier_safe_unicode.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Identifier Safe Unicode - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Identifier Safe Unicode - -> Auto-generated documentation for [julep.api.types.common_identifier_safe_unicode](../../../../../../../julep/api/types/common_identifier_safe_unicode.py) module. -- [Common Identifier Safe Unicode](#common-identifier-safe-unicode) diff --git a/docs/python-sdk-docs/julep/api/types/common_limit.md b/docs/python-sdk-docs/julep/api/types/common_limit.md deleted file mode 100644 index df209cd76..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_limit.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Limit - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Limit - -> Auto-generated documentation for [julep.api.types.common_limit](../../../../../../../julep/api/types/common_limit.py) module. -- [Common Limit](#common-limit) diff --git a/docs/python-sdk-docs/julep/api/types/common_logit_bias.md b/docs/python-sdk-docs/julep/api/types/common_logit_bias.md deleted file mode 100644 index ebdfac95c..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_logit_bias.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Logit Bias - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Logit Bias - -> Auto-generated documentation for [julep.api.types.common_logit_bias](../../../../../../../julep/api/types/common_logit_bias.py) module. -- [Common Logit Bias](#common-logit-bias) diff --git a/docs/python-sdk-docs/julep/api/types/common_offset.md b/docs/python-sdk-docs/julep/api/types/common_offset.md deleted file mode 100644 index 1cda9e94c..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_offset.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Offset - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Offset - -> Auto-generated documentation for [julep.api.types.common_offset](../../../../../../../julep/api/types/common_offset.py) module. -- [Common Offset](#common-offset) diff --git a/docs/python-sdk-docs/julep/api/types/common_py_expression.md b/docs/python-sdk-docs/julep/api/types/common_py_expression.md deleted file mode 100644 index 857f14bb7..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_py_expression.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Py Expression - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Py Expression - -> Auto-generated documentation for [julep.api.types.common_py_expression](../../../../../../../julep/api/types/common_py_expression.py) module. -- [Common Py Expression](#common-py-expression) diff --git a/docs/python-sdk-docs/julep/api/types/common_resource_created_response.md b/docs/python-sdk-docs/julep/api/types/common_resource_created_response.md deleted file mode 100644 index 888c00989..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_resource_created_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# CommonResourceCreatedResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / CommonResourceCreatedResponse - -> Auto-generated documentation for [julep.api.types.common_resource_created_response](../../../../../../../julep/api/types/common_resource_created_response.py) module. - -- [CommonResourceCreatedResponse](#commonresourcecreatedresponse) - - [CommonResourceCreatedResponse](#commonresourcecreatedresponse-1) - -## CommonResourceCreatedResponse - -[Show source in common_resource_created_response.py:11](../../../../../../../julep/api/types/common_resource_created_response.py#L11) - -#### Signature - -```python -class CommonResourceCreatedResponse(pydantic_v1.BaseModel): ... -``` - -### CommonResourceCreatedResponse().dict - -[Show source in common_resource_created_response.py:35](../../../../../../../julep/api/types/common_resource_created_response.py#L35) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### CommonResourceCreatedResponse().json - -[Show source in common_resource_created_response.py:27](../../../../../../../julep/api/types/common_resource_created_response.py#L27) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/common_resource_deleted_response.md b/docs/python-sdk-docs/julep/api/types/common_resource_deleted_response.md deleted file mode 100644 index 4b1f510b3..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_resource_deleted_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# CommonResourceDeletedResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / CommonResourceDeletedResponse - -> Auto-generated documentation for [julep.api.types.common_resource_deleted_response](../../../../../../../julep/api/types/common_resource_deleted_response.py) module. - -- [CommonResourceDeletedResponse](#commonresourcedeletedresponse) - - [CommonResourceDeletedResponse](#commonresourcedeletedresponse-1) - -## CommonResourceDeletedResponse - -[Show source in common_resource_deleted_response.py:11](../../../../../../../julep/api/types/common_resource_deleted_response.py#L11) - -#### Signature - -```python -class CommonResourceDeletedResponse(pydantic_v1.BaseModel): ... -``` - -### CommonResourceDeletedResponse().dict - -[Show source in common_resource_deleted_response.py:35](../../../../../../../julep/api/types/common_resource_deleted_response.py#L35) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### CommonResourceDeletedResponse().json - -[Show source in common_resource_deleted_response.py:27](../../../../../../../julep/api/types/common_resource_deleted_response.py#L27) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/common_resource_updated_response.md b/docs/python-sdk-docs/julep/api/types/common_resource_updated_response.md deleted file mode 100644 index c01549486..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_resource_updated_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# CommonResourceUpdatedResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / CommonResourceUpdatedResponse - -> Auto-generated documentation for [julep.api.types.common_resource_updated_response](../../../../../../../julep/api/types/common_resource_updated_response.py) module. - -- [CommonResourceUpdatedResponse](#commonresourceupdatedresponse) - - [CommonResourceUpdatedResponse](#commonresourceupdatedresponse-1) - -## CommonResourceUpdatedResponse - -[Show source in common_resource_updated_response.py:11](../../../../../../../julep/api/types/common_resource_updated_response.py#L11) - -#### Signature - -```python -class CommonResourceUpdatedResponse(pydantic_v1.BaseModel): ... -``` - -### CommonResourceUpdatedResponse().dict - -[Show source in common_resource_updated_response.py:35](../../../../../../../julep/api/types/common_resource_updated_response.py#L35) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### CommonResourceUpdatedResponse().json - -[Show source in common_resource_updated_response.py:27](../../../../../../../julep/api/types/common_resource_updated_response.py#L27) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/common_tool_ref.md b/docs/python-sdk-docs/julep/api/types/common_tool_ref.md deleted file mode 100644 index eaeedab94..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_tool_ref.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Tool Ref - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Tool Ref - -> Auto-generated documentation for [julep.api.types.common_tool_ref](../../../../../../../julep/api/types/common_tool_ref.py) module. -- [Common Tool Ref](#common-tool-ref) diff --git a/docs/python-sdk-docs/julep/api/types/common_uuid.md b/docs/python-sdk-docs/julep/api/types/common_uuid.md deleted file mode 100644 index 6946cadd2..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_uuid.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Uuid - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Uuid - -> Auto-generated documentation for [julep.api.types.common_uuid](../../../../../../../julep/api/types/common_uuid.py) module. -- [Common Uuid](#common-uuid) diff --git a/docs/python-sdk-docs/julep/api/types/common_valid_python_identifier.md b/docs/python-sdk-docs/julep/api/types/common_valid_python_identifier.md deleted file mode 100644 index 4f7723b0f..000000000 --- a/docs/python-sdk-docs/julep/api/types/common_valid_python_identifier.md +++ /dev/null @@ -1,6 +0,0 @@ -# Common Valid Python Identifier - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Common Valid Python Identifier - -> Auto-generated documentation for [julep.api.types.common_valid_python_identifier](../../../../../../../julep/api/types/common_valid_python_identifier.py) module. -- [Common Valid Python Identifier](#common-valid-python-identifier) diff --git a/docs/python-sdk-docs/julep/api/types/docs_base_doc_search_request.md b/docs/python-sdk-docs/julep/api/types/docs_base_doc_search_request.md deleted file mode 100644 index dfbf3cdd8..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_base_doc_search_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsBaseDocSearchRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsBaseDocSearchRequest - -> Auto-generated documentation for [julep.api.types.docs_base_doc_search_request](../../../../../../../julep/api/types/docs_base_doc_search_request.py) module. - -- [DocsBaseDocSearchRequest](#docsbasedocsearchrequest) - - [DocsBaseDocSearchRequest](#docsbasedocsearchrequest-1) - -## DocsBaseDocSearchRequest - -[Show source in docs_base_doc_search_request.py:10](../../../../../../../julep/api/types/docs_base_doc_search_request.py#L10) - -#### Signature - -```python -class DocsBaseDocSearchRequest(pydantic_v1.BaseModel): ... -``` - -### DocsBaseDocSearchRequest().dict - -[Show source in docs_base_doc_search_request.py:25](../../../../../../../julep/api/types/docs_base_doc_search_request.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsBaseDocSearchRequest().json - -[Show source in docs_base_doc_search_request.py:17](../../../../../../../julep/api/types/docs_base_doc_search_request.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_create_doc_request.md b/docs/python-sdk-docs/julep/api/types/docs_create_doc_request.md deleted file mode 100644 index ae70487ac..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_create_doc_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# DocsCreateDocRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsCreateDocRequest - -> Auto-generated documentation for [julep.api.types.docs_create_doc_request](../../../../../../../julep/api/types/docs_create_doc_request.py) module. - -- [DocsCreateDocRequest](#docscreatedocrequest) - - [DocsCreateDocRequest](#docscreatedocrequest-1) - -## DocsCreateDocRequest - -[Show source in docs_create_doc_request.py:12](../../../../../../../julep/api/types/docs_create_doc_request.py#L12) - -Payload for creating a doc - -#### Signature - -```python -class DocsCreateDocRequest(pydantic_v1.BaseModel): ... -``` - -### DocsCreateDocRequest().dict - -[Show source in docs_create_doc_request.py:36](../../../../../../../julep/api/types/docs_create_doc_request.py#L36) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsCreateDocRequest().json - -[Show source in docs_create_doc_request.py:28](../../../../../../../julep/api/types/docs_create_doc_request.py#L28) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_create_doc_request_content.md b/docs/python-sdk-docs/julep/api/types/docs_create_doc_request_content.md deleted file mode 100644 index abb30a801..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_create_doc_request_content.md +++ /dev/null @@ -1,6 +0,0 @@ -# Docs Create Doc Request Content - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Docs Create Doc Request Content - -> Auto-generated documentation for [julep.api.types.docs_create_doc_request_content](../../../../../../../julep/api/types/docs_create_doc_request_content.py) module. -- [Docs Create Doc Request Content](#docs-create-doc-request-content) diff --git a/docs/python-sdk-docs/julep/api/types/docs_doc.md b/docs/python-sdk-docs/julep/api/types/docs_doc.md deleted file mode 100644 index 514c94ec5..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_doc.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsDoc - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsDoc - -> Auto-generated documentation for [julep.api.types.docs_doc](../../../../../../../julep/api/types/docs_doc.py) module. - -- [DocsDoc](#docsdoc) - - [DocsDoc](#docsdoc-1) - -## DocsDoc - -[Show source in docs_doc.py:13](../../../../../../../julep/api/types/docs_doc.py#L13) - -#### Signature - -```python -class DocsDoc(pydantic_v1.BaseModel): ... -``` - -### DocsDoc().dict - -[Show source in docs_doc.py:39](../../../../../../../julep/api/types/docs_doc.py#L39) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsDoc().json - -[Show source in docs_doc.py:31](../../../../../../../julep/api/types/docs_doc.py#L31) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_doc_content.md b/docs/python-sdk-docs/julep/api/types/docs_doc_content.md deleted file mode 100644 index 5215c33da..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_doc_content.md +++ /dev/null @@ -1,6 +0,0 @@ -# Docs Doc Content - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Docs Doc Content - -> Auto-generated documentation for [julep.api.types.docs_doc_content](../../../../../../../julep/api/types/docs_doc_content.py) module. -- [Docs Doc Content](#docs-doc-content) diff --git a/docs/python-sdk-docs/julep/api/types/docs_doc_owner.md b/docs/python-sdk-docs/julep/api/types/docs_doc_owner.md deleted file mode 100644 index aea6da18c..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_doc_owner.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsDocOwner - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsDocOwner - -> Auto-generated documentation for [julep.api.types.docs_doc_owner](../../../../../../../julep/api/types/docs_doc_owner.py) module. - -- [DocsDocOwner](#docsdocowner) - - [DocsDocOwner](#docsdocowner-1) - -## DocsDocOwner - -[Show source in docs_doc_owner.py:12](../../../../../../../julep/api/types/docs_doc_owner.py#L12) - -#### Signature - -```python -class DocsDocOwner(pydantic_v1.BaseModel): ... -``` - -### DocsDocOwner().dict - -[Show source in docs_doc_owner.py:24](../../../../../../../julep/api/types/docs_doc_owner.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsDocOwner().json - -[Show source in docs_doc_owner.py:16](../../../../../../../julep/api/types/docs_doc_owner.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_doc_owner_role.md b/docs/python-sdk-docs/julep/api/types/docs_doc_owner_role.md deleted file mode 100644 index 847c151be..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_doc_owner_role.md +++ /dev/null @@ -1,6 +0,0 @@ -# Docs Doc Owner Role - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Docs Doc Owner Role - -> Auto-generated documentation for [julep.api.types.docs_doc_owner_role](../../../../../../../julep/api/types/docs_doc_owner_role.py) module. -- [Docs Doc Owner Role](#docs-doc-owner-role) diff --git a/docs/python-sdk-docs/julep/api/types/docs_doc_reference.md b/docs/python-sdk-docs/julep/api/types/docs_doc_reference.md deleted file mode 100644 index 7c0f740fa..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_doc_reference.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsDocReference - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsDocReference - -> Auto-generated documentation for [julep.api.types.docs_doc_reference](../../../../../../../julep/api/types/docs_doc_reference.py) module. - -- [DocsDocReference](#docsdocreference) - - [DocsDocReference](#docsdocreference-1) - -## DocsDocReference - -[Show source in docs_doc_reference.py:13](../../../../../../../julep/api/types/docs_doc_reference.py#L13) - -#### Signature - -```python -class DocsDocReference(pydantic_v1.BaseModel): ... -``` - -### DocsDocReference().dict - -[Show source in docs_doc_reference.py:36](../../../../../../../julep/api/types/docs_doc_reference.py#L36) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsDocReference().json - -[Show source in docs_doc_reference.py:28](../../../../../../../julep/api/types/docs_doc_reference.py#L28) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_doc_search_response.md b/docs/python-sdk-docs/julep/api/types/docs_doc_search_response.md deleted file mode 100644 index ce99b009c..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_doc_search_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsDocSearchResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsDocSearchResponse - -> Auto-generated documentation for [julep.api.types.docs_doc_search_response](../../../../../../../julep/api/types/docs_doc_search_response.py) module. - -- [DocsDocSearchResponse](#docsdocsearchresponse) - - [DocsDocSearchResponse](#docsdocsearchresponse-1) - -## DocsDocSearchResponse - -[Show source in docs_doc_search_response.py:11](../../../../../../../julep/api/types/docs_doc_search_response.py#L11) - -#### Signature - -```python -class DocsDocSearchResponse(pydantic_v1.BaseModel): ... -``` - -### DocsDocSearchResponse().dict - -[Show source in docs_doc_search_response.py:30](../../../../../../../julep/api/types/docs_doc_search_response.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsDocSearchResponse().json - -[Show source in docs_doc_search_response.py:22](../../../../../../../julep/api/types/docs_doc_search_response.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_embed_query_request.md b/docs/python-sdk-docs/julep/api/types/docs_embed_query_request.md deleted file mode 100644 index 2d1f92fe2..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_embed_query_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsEmbedQueryRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsEmbedQueryRequest - -> Auto-generated documentation for [julep.api.types.docs_embed_query_request](../../../../../../../julep/api/types/docs_embed_query_request.py) module. - -- [DocsEmbedQueryRequest](#docsembedqueryrequest) - - [DocsEmbedQueryRequest](#docsembedqueryrequest-1) - -## DocsEmbedQueryRequest - -[Show source in docs_embed_query_request.py:11](../../../../../../../julep/api/types/docs_embed_query_request.py#L11) - -#### Signature - -```python -class DocsEmbedQueryRequest(pydantic_v1.BaseModel): ... -``` - -### DocsEmbedQueryRequest().dict - -[Show source in docs_embed_query_request.py:25](../../../../../../../julep/api/types/docs_embed_query_request.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsEmbedQueryRequest().json - -[Show source in docs_embed_query_request.py:17](../../../../../../../julep/api/types/docs_embed_query_request.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_embed_query_request_text.md b/docs/python-sdk-docs/julep/api/types/docs_embed_query_request_text.md deleted file mode 100644 index ac55882ee..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_embed_query_request_text.md +++ /dev/null @@ -1,6 +0,0 @@ -# Docs Embed Query Request Text - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Docs Embed Query Request Text - -> Auto-generated documentation for [julep.api.types.docs_embed_query_request_text](../../../../../../../julep/api/types/docs_embed_query_request_text.py) module. -- [Docs Embed Query Request Text](#docs-embed-query-request-text) diff --git a/docs/python-sdk-docs/julep/api/types/docs_embed_query_response.md b/docs/python-sdk-docs/julep/api/types/docs_embed_query_response.md deleted file mode 100644 index 18ca2fdb9..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_embed_query_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsEmbedQueryResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsEmbedQueryResponse - -> Auto-generated documentation for [julep.api.types.docs_embed_query_response](../../../../../../../julep/api/types/docs_embed_query_response.py) module. - -- [DocsEmbedQueryResponse](#docsembedqueryresponse) - - [DocsEmbedQueryResponse](#docsembedqueryresponse-1) - -## DocsEmbedQueryResponse - -[Show source in docs_embed_query_response.py:10](../../../../../../../julep/api/types/docs_embed_query_response.py#L10) - -#### Signature - -```python -class DocsEmbedQueryResponse(pydantic_v1.BaseModel): ... -``` - -### DocsEmbedQueryResponse().dict - -[Show source in docs_embed_query_response.py:24](../../../../../../../julep/api/types/docs_embed_query_response.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsEmbedQueryResponse().json - -[Show source in docs_embed_query_response.py:16](../../../../../../../julep/api/types/docs_embed_query_response.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_hybrid_doc_search_request.md b/docs/python-sdk-docs/julep/api/types/docs_hybrid_doc_search_request.md deleted file mode 100644 index 8c3350d45..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_hybrid_doc_search_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsHybridDocSearchRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsHybridDocSearchRequest - -> Auto-generated documentation for [julep.api.types.docs_hybrid_doc_search_request](../../../../../../../julep/api/types/docs_hybrid_doc_search_request.py) module. - -- [DocsHybridDocSearchRequest](#docshybriddocsearchrequest) - - [DocsHybridDocSearchRequest](#docshybriddocsearchrequest-1) - -## DocsHybridDocSearchRequest - -[Show source in docs_hybrid_doc_search_request.py:11](../../../../../../../julep/api/types/docs_hybrid_doc_search_request.py#L11) - -#### Signature - -```python -class DocsHybridDocSearchRequest(DocsBaseDocSearchRequest): ... -``` - -### DocsHybridDocSearchRequest().dict - -[Show source in docs_hybrid_doc_search_request.py:40](../../../../../../../julep/api/types/docs_hybrid_doc_search_request.py#L40) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsHybridDocSearchRequest().json - -[Show source in docs_hybrid_doc_search_request.py:32](../../../../../../../julep/api/types/docs_hybrid_doc_search_request.py#L32) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_snippet.md b/docs/python-sdk-docs/julep/api/types/docs_snippet.md deleted file mode 100644 index 772f9cbce..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_snippet.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsSnippet - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsSnippet - -> Auto-generated documentation for [julep.api.types.docs_snippet](../../../../../../../julep/api/types/docs_snippet.py) module. - -- [DocsSnippet](#docssnippet) - - [DocsSnippet](#docssnippet-1) - -## DocsSnippet - -[Show source in docs_snippet.py:10](../../../../../../../julep/api/types/docs_snippet.py#L10) - -#### Signature - -```python -class DocsSnippet(pydantic_v1.BaseModel): ... -``` - -### DocsSnippet().dict - -[Show source in docs_snippet.py:22](../../../../../../../julep/api/types/docs_snippet.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsSnippet().json - -[Show source in docs_snippet.py:14](../../../../../../../julep/api/types/docs_snippet.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_text_only_doc_search_request.md b/docs/python-sdk-docs/julep/api/types/docs_text_only_doc_search_request.md deleted file mode 100644 index 8cce7a03e..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_text_only_doc_search_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsTextOnlyDocSearchRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsTextOnlyDocSearchRequest - -> Auto-generated documentation for [julep.api.types.docs_text_only_doc_search_request](../../../../../../../julep/api/types/docs_text_only_doc_search_request.py) module. - -- [DocsTextOnlyDocSearchRequest](#docstextonlydocsearchrequest) - - [DocsTextOnlyDocSearchRequest](#docstextonlydocsearchrequest-1) - -## DocsTextOnlyDocSearchRequest - -[Show source in docs_text_only_doc_search_request.py:11](../../../../../../../julep/api/types/docs_text_only_doc_search_request.py#L11) - -#### Signature - -```python -class DocsTextOnlyDocSearchRequest(DocsBaseDocSearchRequest): ... -``` - -### DocsTextOnlyDocSearchRequest().dict - -[Show source in docs_text_only_doc_search_request.py:25](../../../../../../../julep/api/types/docs_text_only_doc_search_request.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsTextOnlyDocSearchRequest().json - -[Show source in docs_text_only_doc_search_request.py:17](../../../../../../../julep/api/types/docs_text_only_doc_search_request.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/docs_vector_doc_search_request.md b/docs/python-sdk-docs/julep/api/types/docs_vector_doc_search_request.md deleted file mode 100644 index 3b2574792..000000000 --- a/docs/python-sdk-docs/julep/api/types/docs_vector_doc_search_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# DocsVectorDocSearchRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / DocsVectorDocSearchRequest - -> Auto-generated documentation for [julep.api.types.docs_vector_doc_search_request](../../../../../../../julep/api/types/docs_vector_doc_search_request.py) module. - -- [DocsVectorDocSearchRequest](#docsvectordocsearchrequest) - - [DocsVectorDocSearchRequest](#docsvectordocsearchrequest-1) - -## DocsVectorDocSearchRequest - -[Show source in docs_vector_doc_search_request.py:11](../../../../../../../julep/api/types/docs_vector_doc_search_request.py#L11) - -#### Signature - -```python -class DocsVectorDocSearchRequest(DocsBaseDocSearchRequest): ... -``` - -### DocsVectorDocSearchRequest().dict - -[Show source in docs_vector_doc_search_request.py:30](../../../../../../../julep/api/types/docs_vector_doc_search_request.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### DocsVectorDocSearchRequest().json - -[Show source in docs_vector_doc_search_request.py:22](../../../../../../../julep/api/types/docs_vector_doc_search_request.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_base_entry.md b/docs/python-sdk-docs/julep/api/types/entries_base_entry.md deleted file mode 100644 index 4b14c805b..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_base_entry.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesBaseEntry - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesBaseEntry - -> Auto-generated documentation for [julep.api.types.entries_base_entry](../../../../../../../julep/api/types/entries_base_entry.py) module. - -- [EntriesBaseEntry](#entriesbaseentry) - - [EntriesBaseEntry](#entriesbaseentry-1) - -## EntriesBaseEntry - -[Show source in entries_base_entry.py:13](../../../../../../../julep/api/types/entries_base_entry.py#L13) - -#### Signature - -```python -class EntriesBaseEntry(pydantic_v1.BaseModel): ... -``` - -### EntriesBaseEntry().dict - -[Show source in entries_base_entry.py:33](../../../../../../../julep/api/types/entries_base_entry.py#L33) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesBaseEntry().json - -[Show source in entries_base_entry.py:25](../../../../../../../julep/api/types/entries_base_entry.py#L25) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_base_entry_content.md b/docs/python-sdk-docs/julep/api/types/entries_base_entry_content.md deleted file mode 100644 index a3a9cf120..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_base_entry_content.md +++ /dev/null @@ -1,6 +0,0 @@ -# Entries Base Entry Content - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Base Entry Content - -> Auto-generated documentation for [julep.api.types.entries_base_entry_content](../../../../../../../julep/api/types/entries_base_entry_content.py) module. -- [Entries Base Entry Content](#entries-base-entry-content) diff --git a/docs/python-sdk-docs/julep/api/types/entries_base_entry_content_item.md b/docs/python-sdk-docs/julep/api/types/entries_base_entry_content_item.md deleted file mode 100644 index f2479af4b..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_base_entry_content_item.md +++ /dev/null @@ -1,6 +0,0 @@ -# Entries Base Entry Content Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Base Entry Content Item - -> Auto-generated documentation for [julep.api.types.entries_base_entry_content_item](../../../../../../../julep/api/types/entries_base_entry_content_item.py) module. -- [Entries Base Entry Content Item](#entries-base-entry-content-item) diff --git a/docs/python-sdk-docs/julep/api/types/entries_base_entry_content_item_item.md b/docs/python-sdk-docs/julep/api/types/entries_base_entry_content_item_item.md deleted file mode 100644 index 4e0d20f25..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_base_entry_content_item_item.md +++ /dev/null @@ -1,71 +0,0 @@ -# Entries Base Entry Content Item Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Base Entry Content Item Item - -> Auto-generated documentation for [julep.api.types.entries_base_entry_content_item_item](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py) module. - -- [Entries Base Entry Content Item Item](#entries-base-entry-content-item-item) - - [EntriesBaseEntryContentItemItem_ImageUrl](#entriesbaseentrycontentitemitem_imageurl) - - [EntriesBaseEntryContentItemItem_Text](#entriesbaseentrycontentitemitem_text) - -## EntriesBaseEntryContentItemItem_ImageUrl - -[Show source in entries_base_entry_content_item_item.py:49](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py#L49) - -#### Signature - -```python -class EntriesBaseEntryContentItemItem_ImageUrl(pydantic_v1.BaseModel): ... -``` - -### EntriesBaseEntryContentItemItem_ImageUrl().dict - -[Show source in entries_base_entry_content_item_item.py:61](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py#L61) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesBaseEntryContentItemItem_ImageUrl().json - -[Show source in entries_base_entry_content_item_item.py:53](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py#L53) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## EntriesBaseEntryContentItemItem_Text - -[Show source in entries_base_entry_content_item_item.py:13](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py#L13) - -#### Signature - -```python -class EntriesBaseEntryContentItemItem_Text(pydantic_v1.BaseModel): ... -``` - -### EntriesBaseEntryContentItemItem_Text().dict - -[Show source in entries_base_entry_content_item_item.py:25](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesBaseEntryContentItemItem_Text().json - -[Show source in entries_base_entry_content_item_item.py:17](../../../../../../../julep/api/types/entries_base_entry_content_item_item.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_base_entry_source.md b/docs/python-sdk-docs/julep/api/types/entries_base_entry_source.md deleted file mode 100644 index 49ec1c8c6..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_base_entry_source.md +++ /dev/null @@ -1,6 +0,0 @@ -# Entries Base Entry Source - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Base Entry Source - -> Auto-generated documentation for [julep.api.types.entries_base_entry_source](../../../../../../../julep/api/types/entries_base_entry_source.py) module. -- [Entries Base Entry Source](#entries-base-entry-source) diff --git a/docs/python-sdk-docs/julep/api/types/entries_chat_ml_image_content_part.md b/docs/python-sdk-docs/julep/api/types/entries_chat_ml_image_content_part.md deleted file mode 100644 index a635515a2..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_chat_ml_image_content_part.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesChatMlImageContentPart - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesChatMlImageContentPart - -> Auto-generated documentation for [julep.api.types.entries_chat_ml_image_content_part](../../../../../../../julep/api/types/entries_chat_ml_image_content_part.py) module. - -- [EntriesChatMlImageContentPart](#entrieschatmlimagecontentpart) - - [EntriesChatMlImageContentPart](#entrieschatmlimagecontentpart-1) - -## EntriesChatMlImageContentPart - -[Show source in entries_chat_ml_image_content_part.py:11](../../../../../../../julep/api/types/entries_chat_ml_image_content_part.py#L11) - -#### Signature - -```python -class EntriesChatMlImageContentPart(pydantic_v1.BaseModel): ... -``` - -### EntriesChatMlImageContentPart().dict - -[Show source in entries_chat_ml_image_content_part.py:25](../../../../../../../julep/api/types/entries_chat_ml_image_content_part.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesChatMlImageContentPart().json - -[Show source in entries_chat_ml_image_content_part.py:17](../../../../../../../julep/api/types/entries_chat_ml_image_content_part.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_chat_ml_role.md b/docs/python-sdk-docs/julep/api/types/entries_chat_ml_role.md deleted file mode 100644 index 7f92f26f0..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_chat_ml_role.md +++ /dev/null @@ -1,6 +0,0 @@ -# Entries Chat Ml Role - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Chat Ml Role - -> Auto-generated documentation for [julep.api.types.entries_chat_ml_role](../../../../../../../julep/api/types/entries_chat_ml_role.py) module. -- [Entries Chat Ml Role](#entries-chat-ml-role) diff --git a/docs/python-sdk-docs/julep/api/types/entries_chat_ml_text_content_part.md b/docs/python-sdk-docs/julep/api/types/entries_chat_ml_text_content_part.md deleted file mode 100644 index a09d2f597..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_chat_ml_text_content_part.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesChatMlTextContentPart - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesChatMlTextContentPart - -> Auto-generated documentation for [julep.api.types.entries_chat_ml_text_content_part](../../../../../../../julep/api/types/entries_chat_ml_text_content_part.py) module. - -- [EntriesChatMlTextContentPart](#entrieschatmltextcontentpart) - - [EntriesChatMlTextContentPart](#entrieschatmltextcontentpart-1) - -## EntriesChatMlTextContentPart - -[Show source in entries_chat_ml_text_content_part.py:10](../../../../../../../julep/api/types/entries_chat_ml_text_content_part.py#L10) - -#### Signature - -```python -class EntriesChatMlTextContentPart(pydantic_v1.BaseModel): ... -``` - -### EntriesChatMlTextContentPart().dict - -[Show source in entries_chat_ml_text_content_part.py:21](../../../../../../../julep/api/types/entries_chat_ml_text_content_part.py#L21) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesChatMlTextContentPart().json - -[Show source in entries_chat_ml_text_content_part.py:13](../../../../../../../julep/api/types/entries_chat_ml_text_content_part.py#L13) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_entry.md b/docs/python-sdk-docs/julep/api/types/entries_entry.md deleted file mode 100644 index 6aa64b67d..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_entry.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesEntry - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesEntry - -> Auto-generated documentation for [julep.api.types.entries_entry](../../../../../../../julep/api/types/entries_entry.py) module. - -- [EntriesEntry](#entriesentry) - - [EntriesEntry](#entriesentry-1) - -## EntriesEntry - -[Show source in entries_entry.py:12](../../../../../../../julep/api/types/entries_entry.py#L12) - -#### Signature - -```python -class EntriesEntry(EntriesBaseEntry): ... -``` - -### EntriesEntry().dict - -[Show source in entries_entry.py:28](../../../../../../../julep/api/types/entries_entry.py#L28) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesEntry().json - -[Show source in entries_entry.py:20](../../../../../../../julep/api/types/entries_entry.py#L20) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_history.md b/docs/python-sdk-docs/julep/api/types/entries_history.md deleted file mode 100644 index 615f6b666..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_history.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesHistory - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesHistory - -> Auto-generated documentation for [julep.api.types.entries_history](../../../../../../../julep/api/types/entries_history.py) module. - -- [EntriesHistory](#entrieshistory) - - [EntriesHistory](#entrieshistory-1) - -## EntriesHistory - -[Show source in entries_history.py:13](../../../../../../../julep/api/types/entries_history.py#L13) - -#### Signature - -```python -class EntriesHistory(pydantic_v1.BaseModel): ... -``` - -### EntriesHistory().dict - -[Show source in entries_history.py:30](../../../../../../../julep/api/types/entries_history.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesHistory().json - -[Show source in entries_history.py:22](../../../../../../../julep/api/types/entries_history.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_image_detail.md b/docs/python-sdk-docs/julep/api/types/entries_image_detail.md deleted file mode 100644 index 5e98b5628..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_image_detail.md +++ /dev/null @@ -1,6 +0,0 @@ -# Entries Image Detail - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Image Detail - -> Auto-generated documentation for [julep.api.types.entries_image_detail](../../../../../../../julep/api/types/entries_image_detail.py) module. -- [Entries Image Detail](#entries-image-detail) diff --git a/docs/python-sdk-docs/julep/api/types/entries_image_url.md b/docs/python-sdk-docs/julep/api/types/entries_image_url.md deleted file mode 100644 index 4b6870f88..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_image_url.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesImageUrl - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesImageUrl - -> Auto-generated documentation for [julep.api.types.entries_image_url](../../../../../../../julep/api/types/entries_image_url.py) module. - -- [EntriesImageUrl](#entriesimageurl) - - [EntriesImageUrl](#entriesimageurl-1) - -## EntriesImageUrl - -[Show source in entries_image_url.py:11](../../../../../../../julep/api/types/entries_image_url.py#L11) - -#### Signature - -```python -class EntriesImageUrl(pydantic_v1.BaseModel): ... -``` - -### EntriesImageUrl().dict - -[Show source in entries_image_url.py:30](../../../../../../../julep/api/types/entries_image_url.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesImageUrl().json - -[Show source in entries_image_url.py:22](../../../../../../../julep/api/types/entries_image_url.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message.md b/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message.md deleted file mode 100644 index 7beba9d20..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesInputChatMlMessage - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesInputChatMlMessage - -> Auto-generated documentation for [julep.api.types.entries_input_chat_ml_message](../../../../../../../julep/api/types/entries_input_chat_ml_message.py) module. - -- [EntriesInputChatMlMessage](#entriesinputchatmlmessage) - - [EntriesInputChatMlMessage](#entriesinputchatmlmessage-1) - -## EntriesInputChatMlMessage - -[Show source in entries_input_chat_ml_message.py:12](../../../../../../../julep/api/types/entries_input_chat_ml_message.py#L12) - -#### Signature - -```python -class EntriesInputChatMlMessage(pydantic_v1.BaseModel): ... -``` - -### EntriesInputChatMlMessage().dict - -[Show source in entries_input_chat_ml_message.py:41](../../../../../../../julep/api/types/entries_input_chat_ml_message.py#L41) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesInputChatMlMessage().json - -[Show source in entries_input_chat_ml_message.py:33](../../../../../../../julep/api/types/entries_input_chat_ml_message.py#L33) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message_content.md b/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message_content.md deleted file mode 100644 index e4a4d9b27..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message_content.md +++ /dev/null @@ -1,6 +0,0 @@ -# Entries Input Chat Ml Message Content - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Input Chat Ml Message Content - -> Auto-generated documentation for [julep.api.types.entries_input_chat_ml_message_content](../../../../../../../julep/api/types/entries_input_chat_ml_message_content.py) module. -- [Entries Input Chat Ml Message Content](#entries-input-chat-ml-message-content) diff --git a/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message_content_item.md b/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message_content_item.md deleted file mode 100644 index 2f25e9173..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_input_chat_ml_message_content_item.md +++ /dev/null @@ -1,71 +0,0 @@ -# Entries Input Chat Ml Message Content Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Entries Input Chat Ml Message Content Item - -> Auto-generated documentation for [julep.api.types.entries_input_chat_ml_message_content_item](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py) module. - -- [Entries Input Chat Ml Message Content Item](#entries-input-chat-ml-message-content-item) - - [EntriesInputChatMlMessageContentItem_ImageUrl](#entriesinputchatmlmessagecontentitem_imageurl) - - [EntriesInputChatMlMessageContentItem_Text](#entriesinputchatmlmessagecontentitem_text) - -## EntriesInputChatMlMessageContentItem_ImageUrl - -[Show source in entries_input_chat_ml_message_content_item.py:49](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py#L49) - -#### Signature - -```python -class EntriesInputChatMlMessageContentItem_ImageUrl(pydantic_v1.BaseModel): ... -``` - -### EntriesInputChatMlMessageContentItem_ImageUrl().dict - -[Show source in entries_input_chat_ml_message_content_item.py:61](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py#L61) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesInputChatMlMessageContentItem_ImageUrl().json - -[Show source in entries_input_chat_ml_message_content_item.py:53](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py#L53) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## EntriesInputChatMlMessageContentItem_Text - -[Show source in entries_input_chat_ml_message_content_item.py:13](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py#L13) - -#### Signature - -```python -class EntriesInputChatMlMessageContentItem_Text(pydantic_v1.BaseModel): ... -``` - -### EntriesInputChatMlMessageContentItem_Text().dict - -[Show source in entries_input_chat_ml_message_content_item.py:25](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesInputChatMlMessageContentItem_Text().json - -[Show source in entries_input_chat_ml_message_content_item.py:17](../../../../../../../julep/api/types/entries_input_chat_ml_message_content_item.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/entries_relation.md b/docs/python-sdk-docs/julep/api/types/entries_relation.md deleted file mode 100644 index 9694b3b08..000000000 --- a/docs/python-sdk-docs/julep/api/types/entries_relation.md +++ /dev/null @@ -1,38 +0,0 @@ -# EntriesRelation - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / EntriesRelation - -> Auto-generated documentation for [julep.api.types.entries_relation](../../../../../../../julep/api/types/entries_relation.py) module. - -- [EntriesRelation](#entriesrelation) - - [EntriesRelation](#entriesrelation-1) - -## EntriesRelation - -[Show source in entries_relation.py:11](../../../../../../../julep/api/types/entries_relation.py#L11) - -#### Signature - -```python -class EntriesRelation(pydantic_v1.BaseModel): ... -``` - -### EntriesRelation().dict - -[Show source in entries_relation.py:24](../../../../../../../julep/api/types/entries_relation.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### EntriesRelation().json - -[Show source in entries_relation.py:16](../../../../../../../julep/api/types/entries_relation.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_request_direction.md deleted file mode 100644 index 24fd3b5ca..000000000 --- a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Execution Transitions Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Execution Transitions Route List Request Direction - -> Auto-generated documentation for [julep.api.types.execution_transitions_route_list_request_direction](../../../../../../../julep/api/types/execution_transitions_route_list_request_direction.py) module. -- [Execution Transitions Route List Request Direction](#execution-transitions-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_request_sort_by.md deleted file mode 100644 index 5c393c4bd..000000000 --- a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Execution Transitions Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Execution Transitions Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.execution_transitions_route_list_request_sort_by](../../../../../../../julep/api/types/execution_transitions_route_list_request_sort_by.py) module. -- [Execution Transitions Route List Request Sort By](#execution-transitions-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_response.md b/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_response.md deleted file mode 100644 index d515b6efc..000000000 --- a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionTransitionsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionTransitionsRouteListResponse - -> Auto-generated documentation for [julep.api.types.execution_transitions_route_list_response](../../../../../../../julep/api/types/execution_transitions_route_list_response.py) module. - -- [ExecutionTransitionsRouteListResponse](#executiontransitionsroutelistresponse) - - [ExecutionTransitionsRouteListResponse](#executiontransitionsroutelistresponse-1) - -## ExecutionTransitionsRouteListResponse - -[Show source in execution_transitions_route_list_response.py:13](../../../../../../../julep/api/types/execution_transitions_route_list_response.py#L13) - -#### Signature - -```python -class ExecutionTransitionsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### ExecutionTransitionsRouteListResponse().dict - -[Show source in execution_transitions_route_list_response.py:24](../../../../../../../julep/api/types/execution_transitions_route_list_response.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionTransitionsRouteListResponse().json - -[Show source in execution_transitions_route_list_response.py:16](../../../../../../../julep/api/types/execution_transitions_route_list_response.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_response_results_item.md b/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_response_results_item.md deleted file mode 100644 index ca9cbc082..000000000 --- a/docs/python-sdk-docs/julep/api/types/execution_transitions_route_list_response_results_item.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionTransitionsRouteListResponseResultsItem - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionTransitionsRouteListResponseResultsItem - -> Auto-generated documentation for [julep.api.types.execution_transitions_route_list_response_results_item](../../../../../../../julep/api/types/execution_transitions_route_list_response_results_item.py) module. - -- [ExecutionTransitionsRouteListResponseResultsItem](#executiontransitionsroutelistresponseresultsitem) - - [ExecutionTransitionsRouteListResponseResultsItem](#executiontransitionsroutelistresponseresultsitem-1) - -## ExecutionTransitionsRouteListResponseResultsItem - -[Show source in execution_transitions_route_list_response_results_item.py:11](../../../../../../../julep/api/types/execution_transitions_route_list_response_results_item.py#L11) - -#### Signature - -```python -class ExecutionTransitionsRouteListResponseResultsItem(pydantic_v1.BaseModel): ... -``` - -### ExecutionTransitionsRouteListResponseResultsItem().dict - -[Show source in execution_transitions_route_list_response_results_item.py:22](../../../../../../../julep/api/types/execution_transitions_route_list_response_results_item.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionTransitionsRouteListResponseResultsItem().json - -[Show source in execution_transitions_route_list_response_results_item.py:14](../../../../../../../julep/api/types/execution_transitions_route_list_response_results_item.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/executions_execution.md b/docs/python-sdk-docs/julep/api/types/executions_execution.md deleted file mode 100644 index e79809fe6..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_execution.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionsExecution - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionsExecution - -> Auto-generated documentation for [julep.api.types.executions_execution](../../../../../../../julep/api/types/executions_execution.py) module. - -- [ExecutionsExecution](#executionsexecution) - - [ExecutionsExecution](#executionsexecution-1) - -## ExecutionsExecution - -[Show source in executions_execution.py:12](../../../../../../../julep/api/types/executions_execution.py#L12) - -#### Signature - -```python -class ExecutionsExecution(pydantic_v1.BaseModel): ... -``` - -### ExecutionsExecution().dict - -[Show source in executions_execution.py:49](../../../../../../../julep/api/types/executions_execution.py#L49) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsExecution().json - -[Show source in executions_execution.py:41](../../../../../../../julep/api/types/executions_execution.py#L41) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/executions_execution_status.md b/docs/python-sdk-docs/julep/api/types/executions_execution_status.md deleted file mode 100644 index 419ddcb50..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_execution_status.md +++ /dev/null @@ -1,6 +0,0 @@ -# Executions Execution Status - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Executions Execution Status - -> Auto-generated documentation for [julep.api.types.executions_execution_status](../../../../../../../julep/api/types/executions_execution_status.py) module. -- [Executions Execution Status](#executions-execution-status) diff --git a/docs/python-sdk-docs/julep/api/types/executions_resume_execution_request.md b/docs/python-sdk-docs/julep/api/types/executions_resume_execution_request.md deleted file mode 100644 index b5d6cf960..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_resume_execution_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionsResumeExecutionRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionsResumeExecutionRequest - -> Auto-generated documentation for [julep.api.types.executions_resume_execution_request](../../../../../../../julep/api/types/executions_resume_execution_request.py) module. - -- [ExecutionsResumeExecutionRequest](#executionsresumeexecutionrequest) - - [ExecutionsResumeExecutionRequest](#executionsresumeexecutionrequest-1) - -## ExecutionsResumeExecutionRequest - -[Show source in executions_resume_execution_request.py:10](../../../../../../../julep/api/types/executions_resume_execution_request.py#L10) - -#### Signature - -```python -class ExecutionsResumeExecutionRequest(pydantic_v1.BaseModel): ... -``` - -### ExecutionsResumeExecutionRequest().dict - -[Show source in executions_resume_execution_request.py:26](../../../../../../../julep/api/types/executions_resume_execution_request.py#L26) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsResumeExecutionRequest().json - -[Show source in executions_resume_execution_request.py:18](../../../../../../../julep/api/types/executions_resume_execution_request.py#L18) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/executions_stop_execution_request.md b/docs/python-sdk-docs/julep/api/types/executions_stop_execution_request.md deleted file mode 100644 index 6142b3737..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_stop_execution_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionsStopExecutionRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionsStopExecutionRequest - -> Auto-generated documentation for [julep.api.types.executions_stop_execution_request](../../../../../../../julep/api/types/executions_stop_execution_request.py) module. - -- [ExecutionsStopExecutionRequest](#executionsstopexecutionrequest) - - [ExecutionsStopExecutionRequest](#executionsstopexecutionrequest-1) - -## ExecutionsStopExecutionRequest - -[Show source in executions_stop_execution_request.py:10](../../../../../../../julep/api/types/executions_stop_execution_request.py#L10) - -#### Signature - -```python -class ExecutionsStopExecutionRequest(pydantic_v1.BaseModel): ... -``` - -### ExecutionsStopExecutionRequest().dict - -[Show source in executions_stop_execution_request.py:24](../../../../../../../julep/api/types/executions_stop_execution_request.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsStopExecutionRequest().json - -[Show source in executions_stop_execution_request.py:16](../../../../../../../julep/api/types/executions_stop_execution_request.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/executions_transition.md b/docs/python-sdk-docs/julep/api/types/executions_transition.md deleted file mode 100644 index 51de83c30..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_transition.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionsTransition - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionsTransition - -> Auto-generated documentation for [julep.api.types.executions_transition](../../../../../../../julep/api/types/executions_transition.py) module. - -- [ExecutionsTransition](#executionstransition) - - [ExecutionsTransition](#executionstransition-1) - -## ExecutionsTransition - -[Show source in executions_transition.py:13](../../../../../../../julep/api/types/executions_transition.py#L13) - -#### Signature - -```python -class ExecutionsTransition(pydantic_v1.BaseModel): ... -``` - -### ExecutionsTransition().dict - -[Show source in executions_transition.py:39](../../../../../../../julep/api/types/executions_transition.py#L39) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsTransition().json - -[Show source in executions_transition.py:31](../../../../../../../julep/api/types/executions_transition.py#L31) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/executions_transition_target.md b/docs/python-sdk-docs/julep/api/types/executions_transition_target.md deleted file mode 100644 index 28a2b6282..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_transition_target.md +++ /dev/null @@ -1,38 +0,0 @@ -# ExecutionsTransitionTarget - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ExecutionsTransitionTarget - -> Auto-generated documentation for [julep.api.types.executions_transition_target](../../../../../../../julep/api/types/executions_transition_target.py) module. - -- [ExecutionsTransitionTarget](#executionstransitiontarget) - - [ExecutionsTransitionTarget](#executionstransitiontarget-1) - -## ExecutionsTransitionTarget - -[Show source in executions_transition_target.py:11](../../../../../../../julep/api/types/executions_transition_target.py#L11) - -#### Signature - -```python -class ExecutionsTransitionTarget(pydantic_v1.BaseModel): ... -``` - -### ExecutionsTransitionTarget().dict - -[Show source in executions_transition_target.py:23](../../../../../../../julep/api/types/executions_transition_target.py#L23) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsTransitionTarget().json - -[Show source in executions_transition_target.py:15](../../../../../../../julep/api/types/executions_transition_target.py#L15) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/executions_transition_type.md b/docs/python-sdk-docs/julep/api/types/executions_transition_type.md deleted file mode 100644 index 0d1435e49..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_transition_type.md +++ /dev/null @@ -1,6 +0,0 @@ -# Executions Transition Type - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Executions Transition Type - -> Auto-generated documentation for [julep.api.types.executions_transition_type](../../../../../../../julep/api/types/executions_transition_type.py) module. -- [Executions Transition Type](#executions-transition-type) diff --git a/docs/python-sdk-docs/julep/api/types/executions_update_execution_request.md b/docs/python-sdk-docs/julep/api/types/executions_update_execution_request.md deleted file mode 100644 index da3204548..000000000 --- a/docs/python-sdk-docs/julep/api/types/executions_update_execution_request.md +++ /dev/null @@ -1,71 +0,0 @@ -# Executions Update Execution Request - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Executions Update Execution Request - -> Auto-generated documentation for [julep.api.types.executions_update_execution_request](../../../../../../../julep/api/types/executions_update_execution_request.py) module. - -- [Executions Update Execution Request](#executions-update-execution-request) - - [ExecutionsUpdateExecutionRequest_Cancelled](#executionsupdateexecutionrequest_cancelled) - - [ExecutionsUpdateExecutionRequest_Running](#executionsupdateexecutionrequest_running) - -## ExecutionsUpdateExecutionRequest_Cancelled - -[Show source in executions_update_execution_request.py:12](../../../../../../../julep/api/types/executions_update_execution_request.py#L12) - -#### Signature - -```python -class ExecutionsUpdateExecutionRequest_Cancelled(pydantic_v1.BaseModel): ... -``` - -### ExecutionsUpdateExecutionRequest_Cancelled().dict - -[Show source in executions_update_execution_request.py:24](../../../../../../../julep/api/types/executions_update_execution_request.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsUpdateExecutionRequest_Cancelled().json - -[Show source in executions_update_execution_request.py:16](../../../../../../../julep/api/types/executions_update_execution_request.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## ExecutionsUpdateExecutionRequest_Running - -[Show source in executions_update_execution_request.py:48](../../../../../../../julep/api/types/executions_update_execution_request.py#L48) - -#### Signature - -```python -class ExecutionsUpdateExecutionRequest_Running(pydantic_v1.BaseModel): ... -``` - -### ExecutionsUpdateExecutionRequest_Running().dict - -[Show source in executions_update_execution_request.py:60](../../../../../../../julep/api/types/executions_update_execution_request.py#L60) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ExecutionsUpdateExecutionRequest_Running().json - -[Show source in executions_update_execution_request.py:52](../../../../../../../julep/api/types/executions_update_execution_request.py#L52) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/index.md b/docs/python-sdk-docs/julep/api/types/index.md deleted file mode 100644 index 1e1c8a509..000000000 --- a/docs/python-sdk-docs/julep/api/types/index.md +++ /dev/null @@ -1,186 +0,0 @@ -# Types - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / Types - -> Auto-generated documentation for [julep.api.types](../../../../../../../julep/api/types/__init__.py) module. - -- [Types](#types) - - [Modules](#modules) - -## Modules - -- [Agent Docs Route List Request Direction](./agent_docs_route_list_request_direction.md) -- [Agent Docs Route List Request Sort By](./agent_docs_route_list_request_sort_by.md) -- [AgentDocsRouteListResponse](./agent_docs_route_list_response.md) -- [Agent Tools Route List Request Direction](./agent_tools_route_list_request_direction.md) -- [Agent Tools Route List Request Sort By](./agent_tools_route_list_request_sort_by.md) -- [AgentToolsRouteListResponse](./agent_tools_route_list_response.md) -- [AgentsAgent](./agents_agent.md) -- [Agents Agent Instructions](./agents_agent_instructions.md) -- [AgentsCreateAgentRequest](./agents_create_agent_request.md) -- [Agents Create Agent Request Instructions](./agents_create_agent_request_instructions.md) -- [AgentsCreateOrUpdateAgentRequest](./agents_create_or_update_agent_request.md) -- [Agents Docs Search Route Search Request Body](./agents_docs_search_route_search_request_body.md) -- [Agents Patch Agent Request Instructions](./agents_patch_agent_request_instructions.md) -- [Agents Route List Request Direction](./agents_route_list_request_direction.md) -- [Agents Route List Request Sort By](./agents_route_list_request_sort_by.md) -- [AgentsRouteListResponse](./agents_route_list_response.md) -- [AgentsUpdateAgentRequest](./agents_update_agent_request.md) -- [Agents Update Agent Request Instructions](./agents_update_agent_request_instructions.md) -- [ChatBaseChatOutput](./chat_base_chat_output.md) -- [ChatBaseChatResponse](./chat_base_chat_response.md) -- [ChatBaseTokenLogProb](./chat_base_token_log_prob.md) -- [ChatChatInputData](./chat_chat_input_data.md) -- [Chat Chat Input Data Tool Choice](./chat_chat_input_data_tool_choice.md) -- [ChatChatOutputChunk](./chat_chat_output_chunk.md) -- [ChatChatSettings](./chat_chat_settings.md) -- [ChatChunkChatResponse](./chat_chunk_chat_response.md) -- [ChatCompetionUsage](./chat_competion_usage.md) -- [ChatCompletionResponseFormat](./chat_completion_response_format.md) -- [Chat Completion Response Format Type](./chat_completion_response_format_type.md) -- [ChatDefaultChatSettings](./chat_default_chat_settings.md) -- [Chat Finish Reason](./chat_finish_reason.md) -- [ChatLogProbResponse](./chat_log_prob_response.md) -- [ChatMessageChatResponse](./chat_message_chat_response.md) -- [Chat Message Chat Response Choices Item](./chat_message_chat_response_choices_item.md) -- [ChatMultipleChatOutput](./chat_multiple_chat_output.md) -- [ChatOpenAiSettings](./chat_open_ai_settings.md) -- [Chat Route Generate Response](./chat_route_generate_response.md) -- [ChatSingleChatOutput](./chat_single_chat_output.md) -- [ChatTokenLogProb](./chat_token_log_prob.md) -- [Common Identifier Safe Unicode](./common_identifier_safe_unicode.md) -- [Common Limit](./common_limit.md) -- [Common Logit Bias](./common_logit_bias.md) -- [Common Offset](./common_offset.md) -- [Common Py Expression](./common_py_expression.md) -- [CommonResourceCreatedResponse](./common_resource_created_response.md) -- [CommonResourceDeletedResponse](./common_resource_deleted_response.md) -- [CommonResourceUpdatedResponse](./common_resource_updated_response.md) -- [Common Tool Ref](./common_tool_ref.md) -- [Common Uuid](./common_uuid.md) -- [Common Valid Python Identifier](./common_valid_python_identifier.md) -- [DocsBaseDocSearchRequest](./docs_base_doc_search_request.md) -- [DocsCreateDocRequest](./docs_create_doc_request.md) -- [Docs Create Doc Request Content](./docs_create_doc_request_content.md) -- [DocsDoc](./docs_doc.md) -- [Docs Doc Content](./docs_doc_content.md) -- [DocsDocOwner](./docs_doc_owner.md) -- [Docs Doc Owner Role](./docs_doc_owner_role.md) -- [DocsDocReference](./docs_doc_reference.md) -- [DocsDocSearchResponse](./docs_doc_search_response.md) -- [DocsEmbedQueryRequest](./docs_embed_query_request.md) -- [Docs Embed Query Request Text](./docs_embed_query_request_text.md) -- [DocsEmbedQueryResponse](./docs_embed_query_response.md) -- [DocsHybridDocSearchRequest](./docs_hybrid_doc_search_request.md) -- [DocsSnippet](./docs_snippet.md) -- [DocsTextOnlyDocSearchRequest](./docs_text_only_doc_search_request.md) -- [DocsVectorDocSearchRequest](./docs_vector_doc_search_request.md) -- [EntriesBaseEntry](./entries_base_entry.md) -- [Entries Base Entry Content](./entries_base_entry_content.md) -- [Entries Base Entry Content Item](./entries_base_entry_content_item.md) -- [Entries Base Entry Content Item Item](./entries_base_entry_content_item_item.md) -- [Entries Base Entry Source](./entries_base_entry_source.md) -- [EntriesChatMlImageContentPart](./entries_chat_ml_image_content_part.md) -- [Entries Chat Ml Role](./entries_chat_ml_role.md) -- [EntriesChatMlTextContentPart](./entries_chat_ml_text_content_part.md) -- [EntriesEntry](./entries_entry.md) -- [EntriesHistory](./entries_history.md) -- [Entries Image Detail](./entries_image_detail.md) -- [EntriesImageUrl](./entries_image_url.md) -- [EntriesInputChatMlMessage](./entries_input_chat_ml_message.md) -- [Entries Input Chat Ml Message Content](./entries_input_chat_ml_message_content.md) -- [Entries Input Chat Ml Message Content Item](./entries_input_chat_ml_message_content_item.md) -- [EntriesRelation](./entries_relation.md) -- [Execution Transitions Route List Request Direction](./execution_transitions_route_list_request_direction.md) -- [Execution Transitions Route List Request Sort By](./execution_transitions_route_list_request_sort_by.md) -- [ExecutionTransitionsRouteListResponse](./execution_transitions_route_list_response.md) -- [ExecutionTransitionsRouteListResponseResultsItem](./execution_transitions_route_list_response_results_item.md) -- [ExecutionsExecution](./executions_execution.md) -- [Executions Execution Status](./executions_execution_status.md) -- [ExecutionsResumeExecutionRequest](./executions_resume_execution_request.md) -- [ExecutionsStopExecutionRequest](./executions_stop_execution_request.md) -- [ExecutionsTransition](./executions_transition.md) -- [ExecutionsTransitionTarget](./executions_transition_target.md) -- [Executions Transition Type](./executions_transition_type.md) -- [Executions Update Execution Request](./executions_update_execution_request.md) -- [Jobs Job State](./jobs_job_state.md) -- [JobsJobStatus](./jobs_job_status.md) -- [Sessions Context Overflow Type](./sessions_context_overflow_type.md) -- [SessionsCreateOrUpdateSessionRequest](./sessions_create_or_update_session_request.md) -- [SessionsCreateSessionRequest](./sessions_create_session_request.md) -- [SessionsMultiAgentMultiUserSession](./sessions_multi_agent_multi_user_session.md) -- [SessionsMultiAgentNoUserSession](./sessions_multi_agent_no_user_session.md) -- [SessionsMultiAgentSingleUserSession](./sessions_multi_agent_single_user_session.md) -- [Sessions Route List Request Direction](./sessions_route_list_request_direction.md) -- [Sessions Route List Request Sort By](./sessions_route_list_request_sort_by.md) -- [SessionsRouteListResponse](./sessions_route_list_response.md) -- [Sessions Session](./sessions_session.md) -- [SessionsSingleAgentMultiUserSession](./sessions_single_agent_multi_user_session.md) -- [SessionsSingleAgentNoUserSession](./sessions_single_agent_no_user_session.md) -- [SessionsSingleAgentSingleUserSession](./sessions_single_agent_single_user_session.md) -- [Task Executions Route List Request Direction](./task_executions_route_list_request_direction.md) -- [Task Executions Route List Request Sort By](./task_executions_route_list_request_sort_by.md) -- [TaskExecutionsRouteListResponse](./task_executions_route_list_response.md) -- [Tasks Base Workflow Step](./tasks_base_workflow_step.md) -- [TasksCaseThen](./tasks_case_then.md) -- [Tasks Case Then Then](./tasks_case_then_then.md) -- [TasksCreateTaskRequest](./tasks_create_task_request.md) -- [Tasks Create Task Request Main Item](./tasks_create_task_request_main_item.md) -- [TasksEmbedStep](./tasks_embed_step.md) -- [TasksErrorWorkflowStep](./tasks_error_workflow_step.md) -- [TasksEvaluateStep](./tasks_evaluate_step.md) -- [TasksForeachDo](./tasks_foreach_do.md) -- [Tasks Foreach Do Do](./tasks_foreach_do_do.md) -- [TasksForeachStep](./tasks_foreach_step.md) -- [TasksGetStep](./tasks_get_step.md) -- [TasksIfElseWorkflowStep](./tasks_if_else_workflow_step.md) -- [Tasks If Else Workflow Step Else](./tasks_if_else_workflow_step_else.md) -- [Tasks If Else Workflow Step Then](./tasks_if_else_workflow_step_then.md) -- [TasksLogStep](./tasks_log_step.md) -- [TasksMapOver](./tasks_map_over.md) -- [TasksMapReduceStep](./tasks_map_reduce_step.md) -- [TasksParallelStep](./tasks_parallel_step.md) -- [Tasks Parallel Step Parallel Item](./tasks_parallel_step_parallel_item.md) -- [Tasks Patch Task Request Main Item](./tasks_patch_task_request_main_item.md) -- [TasksPromptStep](./tasks_prompt_step.md) -- [Tasks Prompt Step Prompt](./tasks_prompt_step_prompt.md) -- [TasksReturnStep](./tasks_return_step.md) -- [Tasks Route List Request Direction](./tasks_route_list_request_direction.md) -- [Tasks Route List Request Sort By](./tasks_route_list_request_sort_by.md) -- [TasksRouteListResponse](./tasks_route_list_response.md) -- [TasksSearchStep](./tasks_search_step.md) -- [Tasks Search Step Search](./tasks_search_step_search.md) -- [TasksSetKey](./tasks_set_key.md) -- [TasksSetStep](./tasks_set_step.md) -- [Tasks Set Step Set](./tasks_set_step_set.md) -- [TasksSleepFor](./tasks_sleep_for.md) -- [TasksSleepStep](./tasks_sleep_step.md) -- [TasksSwitchStep](./tasks_switch_step.md) -- [TasksTask](./tasks_task.md) -- [Tasks Task Main Item](./tasks_task_main_item.md) -- [TasksTaskTool](./tasks_task_tool.md) -- [TasksToolCallStep](./tasks_tool_call_step.md) -- [Tasks Update Task Request Main Item](./tasks_update_task_request_main_item.md) -- [TasksWaitForInputStep](./tasks_wait_for_input_step.md) -- [TasksYieldStep](./tasks_yield_step.md) -- [ToolsChosenFunctionCall](./tools_chosen_function_call.md) -- [Tools Chosen Tool Call](./tools_chosen_tool_call.md) -- [ToolsCreateToolRequest](./tools_create_tool_request.md) -- [ToolsFunctionCallOption](./tools_function_call_option.md) -- [ToolsFunctionDef](./tools_function_def.md) -- [ToolsFunctionTool](./tools_function_tool.md) -- [ToolsNamedFunctionChoice](./tools_named_function_choice.md) -- [Tools Named Tool Choice](./tools_named_tool_choice.md) -- [Tools Tool](./tools_tool.md) -- [ToolsToolResponse](./tools_tool_response.md) -- [Tools Tool Type](./tools_tool_type.md) -- [User Docs Route List Request Direction](./user_docs_route_list_request_direction.md) -- [User Docs Route List Request Sort By](./user_docs_route_list_request_sort_by.md) -- [UserDocsRouteListResponse](./user_docs_route_list_response.md) -- [User Docs Search Route Search Request Body](./user_docs_search_route_search_request_body.md) -- [UsersCreateOrUpdateUserRequest](./users_create_or_update_user_request.md) -- [UsersCreateUserRequest](./users_create_user_request.md) -- [Users Route List Request Direction](./users_route_list_request_direction.md) -- [Users Route List Request Sort By](./users_route_list_request_sort_by.md) -- [UsersRouteListResponse](./users_route_list_response.md) -- [UsersUser](./users_user.md) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/jobs_job_state.md b/docs/python-sdk-docs/julep/api/types/jobs_job_state.md deleted file mode 100644 index b5e138867..000000000 --- a/docs/python-sdk-docs/julep/api/types/jobs_job_state.md +++ /dev/null @@ -1,6 +0,0 @@ -# Jobs Job State - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Jobs Job State - -> Auto-generated documentation for [julep.api.types.jobs_job_state](../../../../../../../julep/api/types/jobs_job_state.py) module. -- [Jobs Job State](#jobs-job-state) diff --git a/docs/python-sdk-docs/julep/api/types/jobs_job_status.md b/docs/python-sdk-docs/julep/api/types/jobs_job_status.md deleted file mode 100644 index 2055a3811..000000000 --- a/docs/python-sdk-docs/julep/api/types/jobs_job_status.md +++ /dev/null @@ -1,38 +0,0 @@ -# JobsJobStatus - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / JobsJobStatus - -> Auto-generated documentation for [julep.api.types.jobs_job_status](../../../../../../../julep/api/types/jobs_job_status.py) module. - -- [JobsJobStatus](#jobsjobstatus) - - [JobsJobStatus](#jobsjobstatus-1) - -## JobsJobStatus - -[Show source in jobs_job_status.py:13](../../../../../../../julep/api/types/jobs_job_status.py#L13) - -#### Signature - -```python -class JobsJobStatus(pydantic_v1.BaseModel): ... -``` - -### JobsJobStatus().dict - -[Show source in jobs_job_status.py:58](../../../../../../../julep/api/types/jobs_job_status.py#L58) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### JobsJobStatus().json - -[Show source in jobs_job_status.py:50](../../../../../../../julep/api/types/jobs_job_status.py#L50) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_context_overflow_type.md b/docs/python-sdk-docs/julep/api/types/sessions_context_overflow_type.md deleted file mode 100644 index 4009e89ec..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_context_overflow_type.md +++ /dev/null @@ -1,6 +0,0 @@ -# Sessions Context Overflow Type - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Sessions Context Overflow Type - -> Auto-generated documentation for [julep.api.types.sessions_context_overflow_type](../../../../../../../julep/api/types/sessions_context_overflow_type.py) module. -- [Sessions Context Overflow Type](#sessions-context-overflow-type) diff --git a/docs/python-sdk-docs/julep/api/types/sessions_create_or_update_session_request.md b/docs/python-sdk-docs/julep/api/types/sessions_create_or_update_session_request.md deleted file mode 100644 index d94fcfd40..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_create_or_update_session_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsCreateOrUpdateSessionRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsCreateOrUpdateSessionRequest - -> Auto-generated documentation for [julep.api.types.sessions_create_or_update_session_request](../../../../../../../julep/api/types/sessions_create_or_update_session_request.py) module. - -- [SessionsCreateOrUpdateSessionRequest](#sessionscreateorupdatesessionrequest) - - [SessionsCreateOrUpdateSessionRequest](#sessionscreateorupdatesessionrequest-1) - -## SessionsCreateOrUpdateSessionRequest - -[Show source in sessions_create_or_update_session_request.py:12](../../../../../../../julep/api/types/sessions_create_or_update_session_request.py#L12) - -#### Signature - -```python -class SessionsCreateOrUpdateSessionRequest(pydantic_v1.BaseModel): ... -``` - -### SessionsCreateOrUpdateSessionRequest().dict - -[Show source in sessions_create_or_update_session_request.py:57](../../../../../../../julep/api/types/sessions_create_or_update_session_request.py#L57) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsCreateOrUpdateSessionRequest().json - -[Show source in sessions_create_or_update_session_request.py:49](../../../../../../../julep/api/types/sessions_create_or_update_session_request.py#L49) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_create_session_request.md b/docs/python-sdk-docs/julep/api/types/sessions_create_session_request.md deleted file mode 100644 index d9b07631d..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_create_session_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# SessionsCreateSessionRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsCreateSessionRequest - -> Auto-generated documentation for [julep.api.types.sessions_create_session_request](../../../../../../../julep/api/types/sessions_create_session_request.py) module. - -- [SessionsCreateSessionRequest](#sessionscreatesessionrequest) - - [SessionsCreateSessionRequest](#sessionscreatesessionrequest-1) - -## SessionsCreateSessionRequest - -[Show source in sessions_create_session_request.py:12](../../../../../../../julep/api/types/sessions_create_session_request.py#L12) - -Payload for creating a session - -#### Signature - -```python -class SessionsCreateSessionRequest(pydantic_v1.BaseModel): ... -``` - -### SessionsCreateSessionRequest().dict - -[Show source in sessions_create_session_request.py:61](../../../../../../../julep/api/types/sessions_create_session_request.py#L61) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsCreateSessionRequest().json - -[Show source in sessions_create_session_request.py:53](../../../../../../../julep/api/types/sessions_create_session_request.py#L53) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_multi_user_session.md b/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_multi_user_session.md deleted file mode 100644 index f7c407cbd..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_multi_user_session.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsMultiAgentMultiUserSession - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsMultiAgentMultiUserSession - -> Auto-generated documentation for [julep.api.types.sessions_multi_agent_multi_user_session](../../../../../../../julep/api/types/sessions_multi_agent_multi_user_session.py) module. - -- [SessionsMultiAgentMultiUserSession](#sessionsmultiagentmultiusersession) - - [SessionsMultiAgentMultiUserSession](#sessionsmultiagentmultiusersession-1) - -## SessionsMultiAgentMultiUserSession - -[Show source in sessions_multi_agent_multi_user_session.py:11](../../../../../../../julep/api/types/sessions_multi_agent_multi_user_session.py#L11) - -#### Signature - -```python -class SessionsMultiAgentMultiUserSession(pydantic_v1.BaseModel): ... -``` - -### SessionsMultiAgentMultiUserSession().dict - -[Show source in sessions_multi_agent_multi_user_session.py:23](../../../../../../../julep/api/types/sessions_multi_agent_multi_user_session.py#L23) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsMultiAgentMultiUserSession().json - -[Show source in sessions_multi_agent_multi_user_session.py:15](../../../../../../../julep/api/types/sessions_multi_agent_multi_user_session.py#L15) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_no_user_session.md b/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_no_user_session.md deleted file mode 100644 index a6ad4554f..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_no_user_session.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsMultiAgentNoUserSession - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsMultiAgentNoUserSession - -> Auto-generated documentation for [julep.api.types.sessions_multi_agent_no_user_session](../../../../../../../julep/api/types/sessions_multi_agent_no_user_session.py) module. - -- [SessionsMultiAgentNoUserSession](#sessionsmultiagentnousersession) - - [SessionsMultiAgentNoUserSession](#sessionsmultiagentnousersession-1) - -## SessionsMultiAgentNoUserSession - -[Show source in sessions_multi_agent_no_user_session.py:11](../../../../../../../julep/api/types/sessions_multi_agent_no_user_session.py#L11) - -#### Signature - -```python -class SessionsMultiAgentNoUserSession(pydantic_v1.BaseModel): ... -``` - -### SessionsMultiAgentNoUserSession().dict - -[Show source in sessions_multi_agent_no_user_session.py:22](../../../../../../../julep/api/types/sessions_multi_agent_no_user_session.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsMultiAgentNoUserSession().json - -[Show source in sessions_multi_agent_no_user_session.py:14](../../../../../../../julep/api/types/sessions_multi_agent_no_user_session.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_single_user_session.md b/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_single_user_session.md deleted file mode 100644 index 77f842cfd..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_multi_agent_single_user_session.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsMultiAgentSingleUserSession - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsMultiAgentSingleUserSession - -> Auto-generated documentation for [julep.api.types.sessions_multi_agent_single_user_session](../../../../../../../julep/api/types/sessions_multi_agent_single_user_session.py) module. - -- [SessionsMultiAgentSingleUserSession](#sessionsmultiagentsingleusersession) - - [SessionsMultiAgentSingleUserSession](#sessionsmultiagentsingleusersession-1) - -## SessionsMultiAgentSingleUserSession - -[Show source in sessions_multi_agent_single_user_session.py:11](../../../../../../../julep/api/types/sessions_multi_agent_single_user_session.py#L11) - -#### Signature - -```python -class SessionsMultiAgentSingleUserSession(pydantic_v1.BaseModel): ... -``` - -### SessionsMultiAgentSingleUserSession().dict - -[Show source in sessions_multi_agent_single_user_session.py:23](../../../../../../../julep/api/types/sessions_multi_agent_single_user_session.py#L23) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsMultiAgentSingleUserSession().json - -[Show source in sessions_multi_agent_single_user_session.py:15](../../../../../../../julep/api/types/sessions_multi_agent_single_user_session.py#L15) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/sessions_route_list_request_direction.md deleted file mode 100644 index d23a5296e..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Sessions Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Sessions Route List Request Direction - -> Auto-generated documentation for [julep.api.types.sessions_route_list_request_direction](../../../../../../../julep/api/types/sessions_route_list_request_direction.py) module. -- [Sessions Route List Request Direction](#sessions-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/sessions_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/sessions_route_list_request_sort_by.md deleted file mode 100644 index 0b38dd9b4..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Sessions Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Sessions Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.sessions_route_list_request_sort_by](../../../../../../../julep/api/types/sessions_route_list_request_sort_by.py) module. -- [Sessions Route List Request Sort By](#sessions-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/sessions_route_list_response.md b/docs/python-sdk-docs/julep/api/types/sessions_route_list_response.md deleted file mode 100644 index 5d5e37ed3..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsRouteListResponse - -> Auto-generated documentation for [julep.api.types.sessions_route_list_response](../../../../../../../julep/api/types/sessions_route_list_response.py) module. - -- [SessionsRouteListResponse](#sessionsroutelistresponse) - - [SessionsRouteListResponse](#sessionsroutelistresponse-1) - -## SessionsRouteListResponse - -[Show source in sessions_route_list_response.py:11](../../../../../../../julep/api/types/sessions_route_list_response.py#L11) - -#### Signature - -```python -class SessionsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### SessionsRouteListResponse().dict - -[Show source in sessions_route_list_response.py:22](../../../../../../../julep/api/types/sessions_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsRouteListResponse().json - -[Show source in sessions_route_list_response.py:14](../../../../../../../julep/api/types/sessions_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_session.md b/docs/python-sdk-docs/julep/api/types/sessions_session.md deleted file mode 100644 index 6bba8275e..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_session.md +++ /dev/null @@ -1,260 +0,0 @@ -# Sessions Session - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Sessions Session - -> Auto-generated documentation for [julep.api.types.sessions_session](../../../../../../../julep/api/types/sessions_session.py) module. - -- [Sessions Session](#sessions-session) - - [Base](#base) - - [SessionsSession_MultiAgentMultiUser](#sessionssession_multiagentmultiuser) - - [SessionsSession_MultiAgentNoUser](#sessionssession_multiagentnouser) - - [SessionsSession_MultiAgentSingleUser](#sessionssession_multiagentsingleuser) - - [SessionsSession_SingleAgentMultiUser](#sessionssession_singleagentmultiuser) - - [SessionsSession_SingleAgentNoUser](#sessionssession_singleagentnouser) - - [SessionsSession_SingleAgentSingleUser](#sessionssession_singleagentsingleuser) - -## Base - -[Show source in sessions_session.py:14](../../../../../../../julep/api/types/sessions_session.py#L14) - -#### Signature - -```python -class Base(pydantic_v1.BaseModel): ... -``` - -### Base().dict - -[Show source in sessions_session.py:62](../../../../../../../julep/api/types/sessions_session.py#L62) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### Base().json - -[Show source in sessions_session.py:54](../../../../../../../julep/api/types/sessions_session.py#L54) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## SessionsSession_MultiAgentMultiUser - -[Show source in sessions_session.py:279](../../../../../../../julep/api/types/sessions_session.py#L279) - -#### Signature - -```python -class SessionsSession_MultiAgentMultiUser(Base): ... -``` - -#### See also - -- [Base](#base) - -### SessionsSession_MultiAgentMultiUser().dict - -[Show source in sessions_session.py:292](../../../../../../../julep/api/types/sessions_session.py#L292) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSession_MultiAgentMultiUser().json - -[Show source in sessions_session.py:284](../../../../../../../julep/api/types/sessions_session.py#L284) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## SessionsSession_MultiAgentNoUser - -[Show source in sessions_session.py:202](../../../../../../../julep/api/types/sessions_session.py#L202) - -#### Signature - -```python -class SessionsSession_MultiAgentNoUser(Base): ... -``` - -#### See also - -- [Base](#base) - -### SessionsSession_MultiAgentNoUser().dict - -[Show source in sessions_session.py:214](../../../../../../../julep/api/types/sessions_session.py#L214) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSession_MultiAgentNoUser().json - -[Show source in sessions_session.py:206](../../../../../../../julep/api/types/sessions_session.py#L206) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## SessionsSession_MultiAgentSingleUser - -[Show source in sessions_session.py:240](../../../../../../../julep/api/types/sessions_session.py#L240) - -#### Signature - -```python -class SessionsSession_MultiAgentSingleUser(Base): ... -``` - -#### See also - -- [Base](#base) - -### SessionsSession_MultiAgentSingleUser().dict - -[Show source in sessions_session.py:253](../../../../../../../julep/api/types/sessions_session.py#L253) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSession_MultiAgentSingleUser().json - -[Show source in sessions_session.py:245](../../../../../../../julep/api/types/sessions_session.py#L245) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## SessionsSession_SingleAgentMultiUser - -[Show source in sessions_session.py:163](../../../../../../../julep/api/types/sessions_session.py#L163) - -#### Signature - -```python -class SessionsSession_SingleAgentMultiUser(Base): ... -``` - -#### See also - -- [Base](#base) - -### SessionsSession_SingleAgentMultiUser().dict - -[Show source in sessions_session.py:176](../../../../../../../julep/api/types/sessions_session.py#L176) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSession_SingleAgentMultiUser().json - -[Show source in sessions_session.py:168](../../../../../../../julep/api/types/sessions_session.py#L168) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## SessionsSession_SingleAgentNoUser - -[Show source in sessions_session.py:86](../../../../../../../julep/api/types/sessions_session.py#L86) - -#### Signature - -```python -class SessionsSession_SingleAgentNoUser(Base): ... -``` - -#### See also - -- [Base](#base) - -### SessionsSession_SingleAgentNoUser().dict - -[Show source in sessions_session.py:98](../../../../../../../julep/api/types/sessions_session.py#L98) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSession_SingleAgentNoUser().json - -[Show source in sessions_session.py:90](../../../../../../../julep/api/types/sessions_session.py#L90) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## SessionsSession_SingleAgentSingleUser - -[Show source in sessions_session.py:124](../../../../../../../julep/api/types/sessions_session.py#L124) - -#### Signature - -```python -class SessionsSession_SingleAgentSingleUser(Base): ... -``` - -#### See also - -- [Base](#base) - -### SessionsSession_SingleAgentSingleUser().dict - -[Show source in sessions_session.py:137](../../../../../../../julep/api/types/sessions_session.py#L137) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSession_SingleAgentSingleUser().json - -[Show source in sessions_session.py:129](../../../../../../../julep/api/types/sessions_session.py#L129) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_single_agent_multi_user_session.md b/docs/python-sdk-docs/julep/api/types/sessions_single_agent_multi_user_session.md deleted file mode 100644 index caccf2166..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_single_agent_multi_user_session.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsSingleAgentMultiUserSession - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsSingleAgentMultiUserSession - -> Auto-generated documentation for [julep.api.types.sessions_single_agent_multi_user_session](../../../../../../../julep/api/types/sessions_single_agent_multi_user_session.py) module. - -- [SessionsSingleAgentMultiUserSession](#sessionssingleagentmultiusersession) - - [SessionsSingleAgentMultiUserSession](#sessionssingleagentmultiusersession-1) - -## SessionsSingleAgentMultiUserSession - -[Show source in sessions_single_agent_multi_user_session.py:11](../../../../../../../julep/api/types/sessions_single_agent_multi_user_session.py#L11) - -#### Signature - -```python -class SessionsSingleAgentMultiUserSession(pydantic_v1.BaseModel): ... -``` - -### SessionsSingleAgentMultiUserSession().dict - -[Show source in sessions_single_agent_multi_user_session.py:23](../../../../../../../julep/api/types/sessions_single_agent_multi_user_session.py#L23) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSingleAgentMultiUserSession().json - -[Show source in sessions_single_agent_multi_user_session.py:15](../../../../../../../julep/api/types/sessions_single_agent_multi_user_session.py#L15) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_single_agent_no_user_session.md b/docs/python-sdk-docs/julep/api/types/sessions_single_agent_no_user_session.md deleted file mode 100644 index 0f45b6d06..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_single_agent_no_user_session.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsSingleAgentNoUserSession - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsSingleAgentNoUserSession - -> Auto-generated documentation for [julep.api.types.sessions_single_agent_no_user_session](../../../../../../../julep/api/types/sessions_single_agent_no_user_session.py) module. - -- [SessionsSingleAgentNoUserSession](#sessionssingleagentnousersession) - - [SessionsSingleAgentNoUserSession](#sessionssingleagentnousersession-1) - -## SessionsSingleAgentNoUserSession - -[Show source in sessions_single_agent_no_user_session.py:11](../../../../../../../julep/api/types/sessions_single_agent_no_user_session.py#L11) - -#### Signature - -```python -class SessionsSingleAgentNoUserSession(pydantic_v1.BaseModel): ... -``` - -### SessionsSingleAgentNoUserSession().dict - -[Show source in sessions_single_agent_no_user_session.py:22](../../../../../../../julep/api/types/sessions_single_agent_no_user_session.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSingleAgentNoUserSession().json - -[Show source in sessions_single_agent_no_user_session.py:14](../../../../../../../julep/api/types/sessions_single_agent_no_user_session.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/sessions_single_agent_single_user_session.md b/docs/python-sdk-docs/julep/api/types/sessions_single_agent_single_user_session.md deleted file mode 100644 index be8bab1e7..000000000 --- a/docs/python-sdk-docs/julep/api/types/sessions_single_agent_single_user_session.md +++ /dev/null @@ -1,38 +0,0 @@ -# SessionsSingleAgentSingleUserSession - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / SessionsSingleAgentSingleUserSession - -> Auto-generated documentation for [julep.api.types.sessions_single_agent_single_user_session](../../../../../../../julep/api/types/sessions_single_agent_single_user_session.py) module. - -- [SessionsSingleAgentSingleUserSession](#sessionssingleagentsingleusersession) - - [SessionsSingleAgentSingleUserSession](#sessionssingleagentsingleusersession-1) - -## SessionsSingleAgentSingleUserSession - -[Show source in sessions_single_agent_single_user_session.py:11](../../../../../../../julep/api/types/sessions_single_agent_single_user_session.py#L11) - -#### Signature - -```python -class SessionsSingleAgentSingleUserSession(pydantic_v1.BaseModel): ... -``` - -### SessionsSingleAgentSingleUserSession().dict - -[Show source in sessions_single_agent_single_user_session.py:23](../../../../../../../julep/api/types/sessions_single_agent_single_user_session.py#L23) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### SessionsSingleAgentSingleUserSession().json - -[Show source in sessions_single_agent_single_user_session.py:15](../../../../../../../julep/api/types/sessions_single_agent_single_user_session.py#L15) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/task_executions_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/task_executions_route_list_request_direction.md deleted file mode 100644 index eca88dcfc..000000000 --- a/docs/python-sdk-docs/julep/api/types/task_executions_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Task Executions Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Task Executions Route List Request Direction - -> Auto-generated documentation for [julep.api.types.task_executions_route_list_request_direction](../../../../../../../julep/api/types/task_executions_route_list_request_direction.py) module. -- [Task Executions Route List Request Direction](#task-executions-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/task_executions_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/task_executions_route_list_request_sort_by.md deleted file mode 100644 index 19c4abc9a..000000000 --- a/docs/python-sdk-docs/julep/api/types/task_executions_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Task Executions Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Task Executions Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.task_executions_route_list_request_sort_by](../../../../../../../julep/api/types/task_executions_route_list_request_sort_by.py) module. -- [Task Executions Route List Request Sort By](#task-executions-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/task_executions_route_list_response.md b/docs/python-sdk-docs/julep/api/types/task_executions_route_list_response.md deleted file mode 100644 index 3ed80a5bd..000000000 --- a/docs/python-sdk-docs/julep/api/types/task_executions_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# TaskExecutionsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TaskExecutionsRouteListResponse - -> Auto-generated documentation for [julep.api.types.task_executions_route_list_response](../../../../../../../julep/api/types/task_executions_route_list_response.py) module. - -- [TaskExecutionsRouteListResponse](#taskexecutionsroutelistresponse) - - [TaskExecutionsRouteListResponse](#taskexecutionsroutelistresponse-1) - -## TaskExecutionsRouteListResponse - -[Show source in task_executions_route_list_response.py:11](../../../../../../../julep/api/types/task_executions_route_list_response.py#L11) - -#### Signature - -```python -class TaskExecutionsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### TaskExecutionsRouteListResponse().dict - -[Show source in task_executions_route_list_response.py:22](../../../../../../../julep/api/types/task_executions_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TaskExecutionsRouteListResponse().json - -[Show source in task_executions_route_list_response.py:14](../../../../../../../julep/api/types/task_executions_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_base_workflow_step.md b/docs/python-sdk-docs/julep/api/types/tasks_base_workflow_step.md deleted file mode 100644 index 21731b101..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_base_workflow_step.md +++ /dev/null @@ -1,566 +0,0 @@ -# Tasks Base Workflow Step - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Base Workflow Step - -> Auto-generated documentation for [julep.api.types.tasks_base_workflow_step](../../../../../../../julep/api/types/tasks_base_workflow_step.py) module. - -- [Tasks Base Workflow Step](#tasks-base-workflow-step) - - [TasksBaseWorkflowStep_Embed](#tasksbaseworkflowstep_embed) - - [TasksBaseWorkflowStep_Error](#tasksbaseworkflowstep_error) - - [TasksBaseWorkflowStep_Foreach](#tasksbaseworkflowstep_foreach) - - [TasksBaseWorkflowStep_Get](#tasksbaseworkflowstep_get) - - [TasksBaseWorkflowStep_IfElse](#tasksbaseworkflowstep_ifelse) - - [TasksBaseWorkflowStep_Log](#tasksbaseworkflowstep_log) - - [TasksBaseWorkflowStep_MapReduce](#tasksbaseworkflowstep_mapreduce) - - [TasksBaseWorkflowStep_Parallel](#tasksbaseworkflowstep_parallel) - - [TasksBaseWorkflowStep_Prompt](#tasksbaseworkflowstep_prompt) - - [TasksBaseWorkflowStep_Return](#tasksbaseworkflowstep_return) - - [TasksBaseWorkflowStep_Search](#tasksbaseworkflowstep_search) - - [TasksBaseWorkflowStep_Set](#tasksbaseworkflowstep_set) - - [TasksBaseWorkflowStep_Sleep](#tasksbaseworkflowstep_sleep) - - [TasksBaseWorkflowStep_Switch](#tasksbaseworkflowstep_switch) - - [TasksBaseWorkflowStep_ToolCall](#tasksbaseworkflowstep_toolcall) - - [TasksBaseWorkflowStep_WaitForInput](#tasksbaseworkflowstep_waitforinput) - - [TasksBaseWorkflowStep_Yield](#tasksbaseworkflowstep_yield) - -## TasksBaseWorkflowStep_Embed - -[Show source in tasks_base_workflow_step.py:373](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L373) - -#### Signature - -```python -class TasksBaseWorkflowStep_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Embed().dict - -[Show source in tasks_base_workflow_step.py:385](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L385) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Embed().json - -[Show source in tasks_base_workflow_step.py:377](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L377) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Error - -[Show source in tasks_base_workflow_step.py:145](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L145) - -#### Signature - -```python -class TasksBaseWorkflowStep_Error(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Error().dict - -[Show source in tasks_base_workflow_step.py:157](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L157) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Error().json - -[Show source in tasks_base_workflow_step.py:149](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L149) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Foreach - -[Show source in tasks_base_workflow_step.py:569](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L569) - -#### Signature - -```python -class TasksBaseWorkflowStep_Foreach(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Foreach().dict - -[Show source in tasks_base_workflow_step.py:583](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L583) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Foreach().json - -[Show source in tasks_base_workflow_step.py:575](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L575) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Get - -[Show source in tasks_base_workflow_step.py:259](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L259) - -#### Signature - -```python -class TasksBaseWorkflowStep_Get(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Get().dict - -[Show source in tasks_base_workflow_step.py:271](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L271) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Get().json - -[Show source in tasks_base_workflow_step.py:263](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L263) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_IfElse - -[Show source in tasks_base_workflow_step.py:489](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L489) - -#### Signature - -```python -class TasksBaseWorkflowStep_IfElse(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_IfElse().dict - -[Show source in tasks_base_workflow_step.py:505](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L505) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_IfElse().json - -[Show source in tasks_base_workflow_step.py:497](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L497) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Log - -[Show source in tasks_base_workflow_step.py:335](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L335) - -#### Signature - -```python -class TasksBaseWorkflowStep_Log(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Log().dict - -[Show source in tasks_base_workflow_step.py:347](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L347) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Log().json - -[Show source in tasks_base_workflow_step.py:339](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L339) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_MapReduce - -[Show source in tasks_base_workflow_step.py:649](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L649) - -#### Signature - -```python -class TasksBaseWorkflowStep_MapReduce(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_MapReduce().dict - -[Show source in tasks_base_workflow_step.py:664](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L664) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_MapReduce().json - -[Show source in tasks_base_workflow_step.py:656](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L656) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Parallel - -[Show source in tasks_base_workflow_step.py:609](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L609) - -#### Signature - -```python -class TasksBaseWorkflowStep_Parallel(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Parallel().dict - -[Show source in tasks_base_workflow_step.py:623](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L623) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Parallel().json - -[Show source in tasks_base_workflow_step.py:615](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L615) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Prompt - -[Show source in tasks_base_workflow_step.py:106](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L106) - -#### Signature - -```python -class TasksBaseWorkflowStep_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Prompt().dict - -[Show source in tasks_base_workflow_step.py:119](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L119) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Prompt().json - -[Show source in tasks_base_workflow_step.py:111](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L111) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Return - -[Show source in tasks_base_workflow_step.py:221](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L221) - -#### Signature - -```python -class TasksBaseWorkflowStep_Return(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Return().dict - -[Show source in tasks_base_workflow_step.py:233](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L233) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Return().json - -[Show source in tasks_base_workflow_step.py:225](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L225) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Search - -[Show source in tasks_base_workflow_step.py:411](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L411) - -#### Signature - -```python -class TasksBaseWorkflowStep_Search(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Search().dict - -[Show source in tasks_base_workflow_step.py:423](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L423) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Search().json - -[Show source in tasks_base_workflow_step.py:415](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L415) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Set - -[Show source in tasks_base_workflow_step.py:297](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L297) - -#### Signature - -```python -class TasksBaseWorkflowStep_Set(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Set().dict - -[Show source in tasks_base_workflow_step.py:309](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L309) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Set().json - -[Show source in tasks_base_workflow_step.py:301](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L301) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Sleep - -[Show source in tasks_base_workflow_step.py:183](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L183) - -#### Signature - -```python -class TasksBaseWorkflowStep_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Sleep().dict - -[Show source in tasks_base_workflow_step.py:195](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L195) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Sleep().json - -[Show source in tasks_base_workflow_step.py:187](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L187) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Switch - -[Show source in tasks_base_workflow_step.py:531](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L531) - -#### Signature - -```python -class TasksBaseWorkflowStep_Switch(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Switch().dict - -[Show source in tasks_base_workflow_step.py:543](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L543) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Switch().json - -[Show source in tasks_base_workflow_step.py:535](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L535) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_ToolCall - -[Show source in tasks_base_workflow_step.py:26](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L26) - -#### Signature - -```python -class TasksBaseWorkflowStep_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_ToolCall().dict - -[Show source in tasks_base_workflow_step.py:41](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L41) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_ToolCall().json - -[Show source in tasks_base_workflow_step.py:33](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L33) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_WaitForInput - -[Show source in tasks_base_workflow_step.py:449](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L449) - -#### Signature - -```python -class TasksBaseWorkflowStep_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_WaitForInput().dict - -[Show source in tasks_base_workflow_step.py:463](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_WaitForInput().json - -[Show source in tasks_base_workflow_step.py:455](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksBaseWorkflowStep_Yield - -[Show source in tasks_base_workflow_step.py:67](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L67) - -#### Signature - -```python -class TasksBaseWorkflowStep_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksBaseWorkflowStep_Yield().dict - -[Show source in tasks_base_workflow_step.py:80](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L80) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksBaseWorkflowStep_Yield().json - -[Show source in tasks_base_workflow_step.py:72](../../../../../../../julep/api/types/tasks_base_workflow_step.py#L72) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_case_then.md b/docs/python-sdk-docs/julep/api/types/tasks_case_then.md deleted file mode 100644 index 388ee34d0..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_case_then.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksCaseThen - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksCaseThen - -> Auto-generated documentation for [julep.api.types.tasks_case_then](../../../../../../../julep/api/types/tasks_case_then.py) module. - -- [TasksCaseThen](#taskscasethen) - - [TasksCaseThen](#taskscasethen-1) - -## TasksCaseThen - -[Show source in tasks_case_then.py:12](../../../../../../../julep/api/types/tasks_case_then.py#L12) - -#### Signature - -```python -class TasksCaseThen(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThen().dict - -[Show source in tasks_case_then.py:31](../../../../../../../julep/api/types/tasks_case_then.py#L31) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThen().json - -[Show source in tasks_case_then.py:23](../../../../../../../julep/api/types/tasks_case_then.py#L23) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_case_then_then.md b/docs/python-sdk-docs/julep/api/types/tasks_case_then_then.md deleted file mode 100644 index dc1a9eb70..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_case_then_then.md +++ /dev/null @@ -1,460 +0,0 @@ -# Tasks Case Then Then - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Case Then Then - -> Auto-generated documentation for [julep.api.types.tasks_case_then_then](../../../../../../../julep/api/types/tasks_case_then_then.py) module. - -- [Tasks Case Then Then](#tasks-case-then-then) - - [TasksCaseThenThen_Embed](#taskscasethenthen_embed) - - [TasksCaseThenThen_Error](#taskscasethenthen_error) - - [TasksCaseThenThen_Evaluate](#taskscasethenthen_evaluate) - - [TasksCaseThenThen_Get](#taskscasethenthen_get) - - [TasksCaseThenThen_Log](#taskscasethenthen_log) - - [TasksCaseThenThen_Prompt](#taskscasethenthen_prompt) - - [TasksCaseThenThen_Return](#taskscasethenthen_return) - - [TasksCaseThenThen_Search](#taskscasethenthen_search) - - [TasksCaseThenThen_Set](#taskscasethenthen_set) - - [TasksCaseThenThen_Sleep](#taskscasethenthen_sleep) - - [TasksCaseThenThen_ToolCall](#taskscasethenthen_toolcall) - - [TasksCaseThenThen_WaitForInput](#taskscasethenthen_waitforinput) - - [TasksCaseThenThen_Yield](#taskscasethenthen_yield) - -## TasksCaseThenThen_Embed - -[Show source in tasks_case_then_then.py:447](../../../../../../../julep/api/types/tasks_case_then_then.py#L447) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Embed().dict - -[Show source in tasks_case_then_then.py:463](../../../../../../../julep/api/types/tasks_case_then_then.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Embed().json - -[Show source in tasks_case_then_then.py:455](../../../../../../../julep/api/types/tasks_case_then_then.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Error - -[Show source in tasks_case_then_then.py:195](../../../../../../../julep/api/types/tasks_case_then_then.py#L195) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Error(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Error().dict - -[Show source in tasks_case_then_then.py:211](../../../../../../../julep/api/types/tasks_case_then_then.py#L211) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Error().json - -[Show source in tasks_case_then_then.py:203](../../../../../../../julep/api/types/tasks_case_then_then.py#L203) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Evaluate - -[Show source in tasks_case_then_then.py:20](../../../../../../../julep/api/types/tasks_case_then_then.py#L20) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Evaluate().dict - -[Show source in tasks_case_then_then.py:38](../../../../../../../julep/api/types/tasks_case_then_then.py#L38) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Evaluate().json - -[Show source in tasks_case_then_then.py:30](../../../../../../../julep/api/types/tasks_case_then_then.py#L30) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Get - -[Show source in tasks_case_then_then.py:321](../../../../../../../julep/api/types/tasks_case_then_then.py#L321) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Get(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Get().dict - -[Show source in tasks_case_then_then.py:337](../../../../../../../julep/api/types/tasks_case_then_then.py#L337) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Get().json - -[Show source in tasks_case_then_then.py:329](../../../../../../../julep/api/types/tasks_case_then_then.py#L329) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Log - -[Show source in tasks_case_then_then.py:405](../../../../../../../julep/api/types/tasks_case_then_then.py#L405) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Log(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Log().dict - -[Show source in tasks_case_then_then.py:421](../../../../../../../julep/api/types/tasks_case_then_then.py#L421) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Log().json - -[Show source in tasks_case_then_then.py:413](../../../../../../../julep/api/types/tasks_case_then_then.py#L413) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Prompt - -[Show source in tasks_case_then_then.py:152](../../../../../../../julep/api/types/tasks_case_then_then.py#L152) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Prompt().dict - -[Show source in tasks_case_then_then.py:169](../../../../../../../julep/api/types/tasks_case_then_then.py#L169) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Prompt().json - -[Show source in tasks_case_then_then.py:161](../../../../../../../julep/api/types/tasks_case_then_then.py#L161) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Return - -[Show source in tasks_case_then_then.py:279](../../../../../../../julep/api/types/tasks_case_then_then.py#L279) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Return(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Return().dict - -[Show source in tasks_case_then_then.py:295](../../../../../../../julep/api/types/tasks_case_then_then.py#L295) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Return().json - -[Show source in tasks_case_then_then.py:287](../../../../../../../julep/api/types/tasks_case_then_then.py#L287) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Search - -[Show source in tasks_case_then_then.py:489](../../../../../../../julep/api/types/tasks_case_then_then.py#L489) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Search(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Search().dict - -[Show source in tasks_case_then_then.py:505](../../../../../../../julep/api/types/tasks_case_then_then.py#L505) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Search().json - -[Show source in tasks_case_then_then.py:497](../../../../../../../julep/api/types/tasks_case_then_then.py#L497) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Set - -[Show source in tasks_case_then_then.py:363](../../../../../../../julep/api/types/tasks_case_then_then.py#L363) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Set(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Set().dict - -[Show source in tasks_case_then_then.py:379](../../../../../../../julep/api/types/tasks_case_then_then.py#L379) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Set().json - -[Show source in tasks_case_then_then.py:371](../../../../../../../julep/api/types/tasks_case_then_then.py#L371) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Sleep - -[Show source in tasks_case_then_then.py:237](../../../../../../../julep/api/types/tasks_case_then_then.py#L237) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Sleep().dict - -[Show source in tasks_case_then_then.py:253](../../../../../../../julep/api/types/tasks_case_then_then.py#L253) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Sleep().json - -[Show source in tasks_case_then_then.py:245](../../../../../../../julep/api/types/tasks_case_then_then.py#L245) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_ToolCall - -[Show source in tasks_case_then_then.py:64](../../../../../../../julep/api/types/tasks_case_then_then.py#L64) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_ToolCall().dict - -[Show source in tasks_case_then_then.py:83](../../../../../../../julep/api/types/tasks_case_then_then.py#L83) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_ToolCall().json - -[Show source in tasks_case_then_then.py:75](../../../../../../../julep/api/types/tasks_case_then_then.py#L75) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_WaitForInput - -[Show source in tasks_case_then_then.py:531](../../../../../../../julep/api/types/tasks_case_then_then.py#L531) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_WaitForInput().dict - -[Show source in tasks_case_then_then.py:549](../../../../../../../julep/api/types/tasks_case_then_then.py#L549) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_WaitForInput().json - -[Show source in tasks_case_then_then.py:541](../../../../../../../julep/api/types/tasks_case_then_then.py#L541) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCaseThenThen_Yield - -[Show source in tasks_case_then_then.py:109](../../../../../../../julep/api/types/tasks_case_then_then.py#L109) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksCaseThenThen_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksCaseThenThen_Yield().dict - -[Show source in tasks_case_then_then.py:126](../../../../../../../julep/api/types/tasks_case_then_then.py#L126) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCaseThenThen_Yield().json - -[Show source in tasks_case_then_then.py:118](../../../../../../../julep/api/types/tasks_case_then_then.py#L118) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_create_task_request.md b/docs/python-sdk-docs/julep/api/types/tasks_create_task_request.md deleted file mode 100644 index d49ae4afa..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_create_task_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# TasksCreateTaskRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksCreateTaskRequest - -> Auto-generated documentation for [julep.api.types.tasks_create_task_request](../../../../../../../julep/api/types/tasks_create_task_request.py) module. - -- [TasksCreateTaskRequest](#taskscreatetaskrequest) - - [TasksCreateTaskRequest](#taskscreatetaskrequest-1) - -## TasksCreateTaskRequest - -[Show source in tasks_create_task_request.py:12](../../../../../../../julep/api/types/tasks_create_task_request.py#L12) - -Payload for creating a task - -#### Signature - -```python -class TasksCreateTaskRequest(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequest().dict - -[Show source in tasks_create_task_request.py:51](../../../../../../../julep/api/types/tasks_create_task_request.py#L51) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequest().json - -[Show source in tasks_create_task_request.py:43](../../../../../../../julep/api/types/tasks_create_task_request.py#L43) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_create_task_request_main_item.md b/docs/python-sdk-docs/julep/api/types/tasks_create_task_request_main_item.md deleted file mode 100644 index a0105a35b..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_create_task_request_main_item.md +++ /dev/null @@ -1,599 +0,0 @@ -# Tasks Create Task Request Main Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Create Task Request Main Item - -> Auto-generated documentation for [julep.api.types.tasks_create_task_request_main_item](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py) module. - -- [Tasks Create Task Request Main Item](#tasks-create-task-request-main-item) - - [TasksCreateTaskRequestMainItem_Embed](#taskscreatetaskrequestmainitem_embed) - - [TasksCreateTaskRequestMainItem_Error](#taskscreatetaskrequestmainitem_error) - - [TasksCreateTaskRequestMainItem_Evaluate](#taskscreatetaskrequestmainitem_evaluate) - - [TasksCreateTaskRequestMainItem_Foreach](#taskscreatetaskrequestmainitem_foreach) - - [TasksCreateTaskRequestMainItem_Get](#taskscreatetaskrequestmainitem_get) - - [TasksCreateTaskRequestMainItem_IfElse](#taskscreatetaskrequestmainitem_ifelse) - - [TasksCreateTaskRequestMainItem_Log](#taskscreatetaskrequestmainitem_log) - - [TasksCreateTaskRequestMainItem_MapReduce](#taskscreatetaskrequestmainitem_mapreduce) - - [TasksCreateTaskRequestMainItem_Parallel](#taskscreatetaskrequestmainitem_parallel) - - [TasksCreateTaskRequestMainItem_Prompt](#taskscreatetaskrequestmainitem_prompt) - - [TasksCreateTaskRequestMainItem_Return](#taskscreatetaskrequestmainitem_return) - - [TasksCreateTaskRequestMainItem_Search](#taskscreatetaskrequestmainitem_search) - - [TasksCreateTaskRequestMainItem_Set](#taskscreatetaskrequestmainitem_set) - - [TasksCreateTaskRequestMainItem_Sleep](#taskscreatetaskrequestmainitem_sleep) - - [TasksCreateTaskRequestMainItem_Switch](#taskscreatetaskrequestmainitem_switch) - - [TasksCreateTaskRequestMainItem_ToolCall](#taskscreatetaskrequestmainitem_toolcall) - - [TasksCreateTaskRequestMainItem_WaitForInput](#taskscreatetaskrequestmainitem_waitforinput) - - [TasksCreateTaskRequestMainItem_Yield](#taskscreatetaskrequestmainitem_yield) - -## TasksCreateTaskRequestMainItem_Embed - -[Show source in tasks_create_task_request_main_item.py:413](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L413) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Embed().dict - -[Show source in tasks_create_task_request_main_item.py:425](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L425) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Embed().json - -[Show source in tasks_create_task_request_main_item.py:417](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L417) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Error - -[Show source in tasks_create_task_request_main_item.py:185](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L185) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Error(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Error().dict - -[Show source in tasks_create_task_request_main_item.py:197](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L197) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Error().json - -[Show source in tasks_create_task_request_main_item.py:189](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L189) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Evaluate - -[Show source in tasks_create_task_request_main_item.py:26](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L26) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Evaluate().dict - -[Show source in tasks_create_task_request_main_item.py:40](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L40) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Evaluate().json - -[Show source in tasks_create_task_request_main_item.py:32](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L32) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Foreach - -[Show source in tasks_create_task_request_main_item.py:609](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L609) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Foreach(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Foreach().dict - -[Show source in tasks_create_task_request_main_item.py:623](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L623) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Foreach().json - -[Show source in tasks_create_task_request_main_item.py:615](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L615) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Get - -[Show source in tasks_create_task_request_main_item.py:299](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L299) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Get(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Get().dict - -[Show source in tasks_create_task_request_main_item.py:311](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L311) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Get().json - -[Show source in tasks_create_task_request_main_item.py:303](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L303) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_IfElse - -[Show source in tasks_create_task_request_main_item.py:529](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L529) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_IfElse(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_IfElse().dict - -[Show source in tasks_create_task_request_main_item.py:545](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L545) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_IfElse().json - -[Show source in tasks_create_task_request_main_item.py:537](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L537) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Log - -[Show source in tasks_create_task_request_main_item.py:375](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L375) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Log(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Log().dict - -[Show source in tasks_create_task_request_main_item.py:387](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L387) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Log().json - -[Show source in tasks_create_task_request_main_item.py:379](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L379) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_MapReduce - -[Show source in tasks_create_task_request_main_item.py:689](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L689) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_MapReduce(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_MapReduce().dict - -[Show source in tasks_create_task_request_main_item.py:704](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L704) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_MapReduce().json - -[Show source in tasks_create_task_request_main_item.py:696](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L696) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Parallel - -[Show source in tasks_create_task_request_main_item.py:649](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L649) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Parallel(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Parallel().dict - -[Show source in tasks_create_task_request_main_item.py:663](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L663) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Parallel().json - -[Show source in tasks_create_task_request_main_item.py:655](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L655) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Prompt - -[Show source in tasks_create_task_request_main_item.py:146](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L146) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Prompt().dict - -[Show source in tasks_create_task_request_main_item.py:159](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L159) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Prompt().json - -[Show source in tasks_create_task_request_main_item.py:151](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L151) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Return - -[Show source in tasks_create_task_request_main_item.py:261](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L261) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Return(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Return().dict - -[Show source in tasks_create_task_request_main_item.py:273](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L273) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Return().json - -[Show source in tasks_create_task_request_main_item.py:265](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L265) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Search - -[Show source in tasks_create_task_request_main_item.py:451](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L451) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Search(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Search().dict - -[Show source in tasks_create_task_request_main_item.py:463](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Search().json - -[Show source in tasks_create_task_request_main_item.py:455](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Set - -[Show source in tasks_create_task_request_main_item.py:337](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L337) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Set(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Set().dict - -[Show source in tasks_create_task_request_main_item.py:349](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L349) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Set().json - -[Show source in tasks_create_task_request_main_item.py:341](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L341) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Sleep - -[Show source in tasks_create_task_request_main_item.py:223](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L223) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Sleep().dict - -[Show source in tasks_create_task_request_main_item.py:235](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L235) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Sleep().json - -[Show source in tasks_create_task_request_main_item.py:227](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L227) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Switch - -[Show source in tasks_create_task_request_main_item.py:571](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L571) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Switch(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Switch().dict - -[Show source in tasks_create_task_request_main_item.py:583](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L583) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Switch().json - -[Show source in tasks_create_task_request_main_item.py:575](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L575) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_ToolCall - -[Show source in tasks_create_task_request_main_item.py:66](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L66) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_ToolCall().dict - -[Show source in tasks_create_task_request_main_item.py:81](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L81) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_ToolCall().json - -[Show source in tasks_create_task_request_main_item.py:73](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L73) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_WaitForInput - -[Show source in tasks_create_task_request_main_item.py:489](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L489) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_WaitForInput().dict - -[Show source in tasks_create_task_request_main_item.py:503](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L503) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_WaitForInput().json - -[Show source in tasks_create_task_request_main_item.py:495](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L495) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksCreateTaskRequestMainItem_Yield - -[Show source in tasks_create_task_request_main_item.py:107](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L107) - -#### Signature - -```python -class TasksCreateTaskRequestMainItem_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksCreateTaskRequestMainItem_Yield().dict - -[Show source in tasks_create_task_request_main_item.py:120](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L120) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksCreateTaskRequestMainItem_Yield().json - -[Show source in tasks_create_task_request_main_item.py:112](../../../../../../../julep/api/types/tasks_create_task_request_main_item.py#L112) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_embed_step.md b/docs/python-sdk-docs/julep/api/types/tasks_embed_step.md deleted file mode 100644 index af18dfe3b..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_embed_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksEmbedStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksEmbedStep - -> Auto-generated documentation for [julep.api.types.tasks_embed_step](../../../../../../../julep/api/types/tasks_embed_step.py) module. - -- [TasksEmbedStep](#tasksembedstep) - - [TasksEmbedStep](#tasksembedstep-1) - -## TasksEmbedStep - -[Show source in tasks_embed_step.py:11](../../../../../../../julep/api/types/tasks_embed_step.py#L11) - -#### Signature - -```python -class TasksEmbedStep(pydantic_v1.BaseModel): ... -``` - -### TasksEmbedStep().dict - -[Show source in tasks_embed_step.py:25](../../../../../../../julep/api/types/tasks_embed_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksEmbedStep().json - -[Show source in tasks_embed_step.py:17](../../../../../../../julep/api/types/tasks_embed_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_error_workflow_step.md b/docs/python-sdk-docs/julep/api/types/tasks_error_workflow_step.md deleted file mode 100644 index 457cc00b6..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_error_workflow_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksErrorWorkflowStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksErrorWorkflowStep - -> Auto-generated documentation for [julep.api.types.tasks_error_workflow_step](../../../../../../../julep/api/types/tasks_error_workflow_step.py) module. - -- [TasksErrorWorkflowStep](#taskserrorworkflowstep) - - [TasksErrorWorkflowStep](#taskserrorworkflowstep-1) - -## TasksErrorWorkflowStep - -[Show source in tasks_error_workflow_step.py:10](../../../../../../../julep/api/types/tasks_error_workflow_step.py#L10) - -#### Signature - -```python -class TasksErrorWorkflowStep(pydantic_v1.BaseModel): ... -``` - -### TasksErrorWorkflowStep().dict - -[Show source in tasks_error_workflow_step.py:24](../../../../../../../julep/api/types/tasks_error_workflow_step.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksErrorWorkflowStep().json - -[Show source in tasks_error_workflow_step.py:16](../../../../../../../julep/api/types/tasks_error_workflow_step.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_evaluate_step.md b/docs/python-sdk-docs/julep/api/types/tasks_evaluate_step.md deleted file mode 100644 index cc9d0b45e..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_evaluate_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksEvaluateStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksEvaluateStep - -> Auto-generated documentation for [julep.api.types.tasks_evaluate_step](../../../../../../../julep/api/types/tasks_evaluate_step.py) module. - -- [TasksEvaluateStep](#tasksevaluatestep) - - [TasksEvaluateStep](#tasksevaluatestep-1) - -## TasksEvaluateStep - -[Show source in tasks_evaluate_step.py:11](../../../../../../../julep/api/types/tasks_evaluate_step.py#L11) - -#### Signature - -```python -class TasksEvaluateStep(pydantic_v1.BaseModel): ... -``` - -### TasksEvaluateStep().dict - -[Show source in tasks_evaluate_step.py:25](../../../../../../../julep/api/types/tasks_evaluate_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksEvaluateStep().json - -[Show source in tasks_evaluate_step.py:17](../../../../../../../julep/api/types/tasks_evaluate_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_foreach_do.md b/docs/python-sdk-docs/julep/api/types/tasks_foreach_do.md deleted file mode 100644 index 29730240e..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_foreach_do.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksForeachDo - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksForeachDo - -> Auto-generated documentation for [julep.api.types.tasks_foreach_do](../../../../../../../julep/api/types/tasks_foreach_do.py) module. - -- [TasksForeachDo](#tasksforeachdo) - - [TasksForeachDo](#tasksforeachdo-1) - -## TasksForeachDo - -[Show source in tasks_foreach_do.py:12](../../../../../../../julep/api/types/tasks_foreach_do.py#L12) - -#### Signature - -```python -class TasksForeachDo(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDo().dict - -[Show source in tasks_foreach_do.py:31](../../../../../../../julep/api/types/tasks_foreach_do.py#L31) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDo().json - -[Show source in tasks_foreach_do.py:23](../../../../../../../julep/api/types/tasks_foreach_do.py#L23) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_foreach_do_do.md b/docs/python-sdk-docs/julep/api/types/tasks_foreach_do_do.md deleted file mode 100644 index 729006800..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_foreach_do_do.md +++ /dev/null @@ -1,460 +0,0 @@ -# Tasks Foreach Do Do - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Foreach Do Do - -> Auto-generated documentation for [julep.api.types.tasks_foreach_do_do](../../../../../../../julep/api/types/tasks_foreach_do_do.py) module. - -- [Tasks Foreach Do Do](#tasks-foreach-do-do) - - [TasksForeachDoDo_Embed](#tasksforeachdodo_embed) - - [TasksForeachDoDo_Error](#tasksforeachdodo_error) - - [TasksForeachDoDo_Evaluate](#tasksforeachdodo_evaluate) - - [TasksForeachDoDo_Get](#tasksforeachdodo_get) - - [TasksForeachDoDo_Log](#tasksforeachdodo_log) - - [TasksForeachDoDo_Prompt](#tasksforeachdodo_prompt) - - [TasksForeachDoDo_Return](#tasksforeachdodo_return) - - [TasksForeachDoDo_Search](#tasksforeachdodo_search) - - [TasksForeachDoDo_Set](#tasksforeachdodo_set) - - [TasksForeachDoDo_Sleep](#tasksforeachdodo_sleep) - - [TasksForeachDoDo_ToolCall](#tasksforeachdodo_toolcall) - - [TasksForeachDoDo_WaitForInput](#tasksforeachdodo_waitforinput) - - [TasksForeachDoDo_Yield](#tasksforeachdodo_yield) - -## TasksForeachDoDo_Embed - -[Show source in tasks_foreach_do_do.py:447](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L447) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Embed().dict - -[Show source in tasks_foreach_do_do.py:463](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Embed().json - -[Show source in tasks_foreach_do_do.py:455](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Error - -[Show source in tasks_foreach_do_do.py:195](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L195) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Error(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Error().dict - -[Show source in tasks_foreach_do_do.py:211](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L211) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Error().json - -[Show source in tasks_foreach_do_do.py:203](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L203) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Evaluate - -[Show source in tasks_foreach_do_do.py:20](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L20) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Evaluate().dict - -[Show source in tasks_foreach_do_do.py:38](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L38) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Evaluate().json - -[Show source in tasks_foreach_do_do.py:30](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L30) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Get - -[Show source in tasks_foreach_do_do.py:321](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L321) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Get(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Get().dict - -[Show source in tasks_foreach_do_do.py:337](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L337) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Get().json - -[Show source in tasks_foreach_do_do.py:329](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L329) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Log - -[Show source in tasks_foreach_do_do.py:405](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L405) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Log(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Log().dict - -[Show source in tasks_foreach_do_do.py:421](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L421) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Log().json - -[Show source in tasks_foreach_do_do.py:413](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L413) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Prompt - -[Show source in tasks_foreach_do_do.py:152](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L152) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Prompt().dict - -[Show source in tasks_foreach_do_do.py:169](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L169) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Prompt().json - -[Show source in tasks_foreach_do_do.py:161](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L161) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Return - -[Show source in tasks_foreach_do_do.py:279](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L279) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Return(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Return().dict - -[Show source in tasks_foreach_do_do.py:295](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L295) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Return().json - -[Show source in tasks_foreach_do_do.py:287](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L287) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Search - -[Show source in tasks_foreach_do_do.py:489](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L489) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Search(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Search().dict - -[Show source in tasks_foreach_do_do.py:505](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L505) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Search().json - -[Show source in tasks_foreach_do_do.py:497](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L497) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Set - -[Show source in tasks_foreach_do_do.py:363](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L363) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Set(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Set().dict - -[Show source in tasks_foreach_do_do.py:379](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L379) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Set().json - -[Show source in tasks_foreach_do_do.py:371](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L371) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Sleep - -[Show source in tasks_foreach_do_do.py:237](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L237) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Sleep().dict - -[Show source in tasks_foreach_do_do.py:253](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L253) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Sleep().json - -[Show source in tasks_foreach_do_do.py:245](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L245) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_ToolCall - -[Show source in tasks_foreach_do_do.py:64](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L64) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_ToolCall().dict - -[Show source in tasks_foreach_do_do.py:83](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L83) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_ToolCall().json - -[Show source in tasks_foreach_do_do.py:75](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L75) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_WaitForInput - -[Show source in tasks_foreach_do_do.py:531](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L531) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_WaitForInput().dict - -[Show source in tasks_foreach_do_do.py:549](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L549) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_WaitForInput().json - -[Show source in tasks_foreach_do_do.py:541](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L541) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksForeachDoDo_Yield - -[Show source in tasks_foreach_do_do.py:109](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L109) - -The steps to run for each iteration - -#### Signature - -```python -class TasksForeachDoDo_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksForeachDoDo_Yield().dict - -[Show source in tasks_foreach_do_do.py:126](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L126) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachDoDo_Yield().json - -[Show source in tasks_foreach_do_do.py:118](../../../../../../../julep/api/types/tasks_foreach_do_do.py#L118) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_foreach_step.md b/docs/python-sdk-docs/julep/api/types/tasks_foreach_step.md deleted file mode 100644 index 563f1c526..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_foreach_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksForeachStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksForeachStep - -> Auto-generated documentation for [julep.api.types.tasks_foreach_step](../../../../../../../julep/api/types/tasks_foreach_step.py) module. - -- [TasksForeachStep](#tasksforeachstep) - - [TasksForeachStep](#tasksforeachstep-1) - -## TasksForeachStep - -[Show source in tasks_foreach_step.py:11](../../../../../../../julep/api/types/tasks_foreach_step.py#L11) - -#### Signature - -```python -class TasksForeachStep(pydantic_v1.BaseModel): ... -``` - -### TasksForeachStep().dict - -[Show source in tasks_foreach_step.py:25](../../../../../../../julep/api/types/tasks_foreach_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksForeachStep().json - -[Show source in tasks_foreach_step.py:17](../../../../../../../julep/api/types/tasks_foreach_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_get_step.md b/docs/python-sdk-docs/julep/api/types/tasks_get_step.md deleted file mode 100644 index 0bda9cb54..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_get_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksGetStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksGetStep - -> Auto-generated documentation for [julep.api.types.tasks_get_step](../../../../../../../julep/api/types/tasks_get_step.py) module. - -- [TasksGetStep](#tasksgetstep) - - [TasksGetStep](#tasksgetstep-1) - -## TasksGetStep - -[Show source in tasks_get_step.py:10](../../../../../../../julep/api/types/tasks_get_step.py#L10) - -#### Signature - -```python -class TasksGetStep(pydantic_v1.BaseModel): ... -``` - -### TasksGetStep().dict - -[Show source in tasks_get_step.py:24](../../../../../../../julep/api/types/tasks_get_step.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksGetStep().json - -[Show source in tasks_get_step.py:16](../../../../../../../julep/api/types/tasks_get_step.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step.md b/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step.md deleted file mode 100644 index 27aa1d222..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksIfElseWorkflowStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksIfElseWorkflowStep - -> Auto-generated documentation for [julep.api.types.tasks_if_else_workflow_step](../../../../../../../julep/api/types/tasks_if_else_workflow_step.py) module. - -- [TasksIfElseWorkflowStep](#tasksifelseworkflowstep) - - [TasksIfElseWorkflowStep](#tasksifelseworkflowstep-1) - -## TasksIfElseWorkflowStep - -[Show source in tasks_if_else_workflow_step.py:13](../../../../../../../julep/api/types/tasks_if_else_workflow_step.py#L13) - -#### Signature - -```python -class TasksIfElseWorkflowStep(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStep().dict - -[Show source in tasks_if_else_workflow_step.py:37](../../../../../../../julep/api/types/tasks_if_else_workflow_step.py#L37) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStep().json - -[Show source in tasks_if_else_workflow_step.py:29](../../../../../../../julep/api/types/tasks_if_else_workflow_step.py#L29) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step_else.md b/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step_else.md deleted file mode 100644 index e3928449c..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step_else.md +++ /dev/null @@ -1,460 +0,0 @@ -# Tasks If Else Workflow Step Else - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks If Else Workflow Step Else - -> Auto-generated documentation for [julep.api.types.tasks_if_else_workflow_step_else](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py) module. - -- [Tasks If Else Workflow Step Else](#tasks-if-else-workflow-step-else) - - [TasksIfElseWorkflowStepElse_Embed](#tasksifelseworkflowstepelse_embed) - - [TasksIfElseWorkflowStepElse_Error](#tasksifelseworkflowstepelse_error) - - [TasksIfElseWorkflowStepElse_Evaluate](#tasksifelseworkflowstepelse_evaluate) - - [TasksIfElseWorkflowStepElse_Get](#tasksifelseworkflowstepelse_get) - - [TasksIfElseWorkflowStepElse_Log](#tasksifelseworkflowstepelse_log) - - [TasksIfElseWorkflowStepElse_Prompt](#tasksifelseworkflowstepelse_prompt) - - [TasksIfElseWorkflowStepElse_Return](#tasksifelseworkflowstepelse_return) - - [TasksIfElseWorkflowStepElse_Search](#tasksifelseworkflowstepelse_search) - - [TasksIfElseWorkflowStepElse_Set](#tasksifelseworkflowstepelse_set) - - [TasksIfElseWorkflowStepElse_Sleep](#tasksifelseworkflowstepelse_sleep) - - [TasksIfElseWorkflowStepElse_ToolCall](#tasksifelseworkflowstepelse_toolcall) - - [TasksIfElseWorkflowStepElse_WaitForInput](#tasksifelseworkflowstepelse_waitforinput) - - [TasksIfElseWorkflowStepElse_Yield](#tasksifelseworkflowstepelse_yield) - -## TasksIfElseWorkflowStepElse_Embed - -[Show source in tasks_if_else_workflow_step_else.py:447](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L447) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Embed().dict - -[Show source in tasks_if_else_workflow_step_else.py:463](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Embed().json - -[Show source in tasks_if_else_workflow_step_else.py:455](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Error - -[Show source in tasks_if_else_workflow_step_else.py:195](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L195) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Error(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Error().dict - -[Show source in tasks_if_else_workflow_step_else.py:211](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L211) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Error().json - -[Show source in tasks_if_else_workflow_step_else.py:203](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L203) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Evaluate - -[Show source in tasks_if_else_workflow_step_else.py:20](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L20) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Evaluate().dict - -[Show source in tasks_if_else_workflow_step_else.py:38](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L38) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Evaluate().json - -[Show source in tasks_if_else_workflow_step_else.py:30](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L30) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Get - -[Show source in tasks_if_else_workflow_step_else.py:321](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L321) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Get(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Get().dict - -[Show source in tasks_if_else_workflow_step_else.py:337](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L337) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Get().json - -[Show source in tasks_if_else_workflow_step_else.py:329](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L329) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Log - -[Show source in tasks_if_else_workflow_step_else.py:405](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L405) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Log(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Log().dict - -[Show source in tasks_if_else_workflow_step_else.py:421](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L421) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Log().json - -[Show source in tasks_if_else_workflow_step_else.py:413](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L413) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Prompt - -[Show source in tasks_if_else_workflow_step_else.py:152](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L152) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Prompt().dict - -[Show source in tasks_if_else_workflow_step_else.py:169](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L169) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Prompt().json - -[Show source in tasks_if_else_workflow_step_else.py:161](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L161) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Return - -[Show source in tasks_if_else_workflow_step_else.py:279](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L279) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Return(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Return().dict - -[Show source in tasks_if_else_workflow_step_else.py:295](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L295) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Return().json - -[Show source in tasks_if_else_workflow_step_else.py:287](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L287) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Search - -[Show source in tasks_if_else_workflow_step_else.py:489](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L489) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Search(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Search().dict - -[Show source in tasks_if_else_workflow_step_else.py:505](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L505) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Search().json - -[Show source in tasks_if_else_workflow_step_else.py:497](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L497) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Set - -[Show source in tasks_if_else_workflow_step_else.py:363](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L363) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Set(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Set().dict - -[Show source in tasks_if_else_workflow_step_else.py:379](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L379) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Set().json - -[Show source in tasks_if_else_workflow_step_else.py:371](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L371) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Sleep - -[Show source in tasks_if_else_workflow_step_else.py:237](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L237) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Sleep().dict - -[Show source in tasks_if_else_workflow_step_else.py:253](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L253) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Sleep().json - -[Show source in tasks_if_else_workflow_step_else.py:245](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L245) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_ToolCall - -[Show source in tasks_if_else_workflow_step_else.py:64](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L64) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_ToolCall().dict - -[Show source in tasks_if_else_workflow_step_else.py:83](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L83) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_ToolCall().json - -[Show source in tasks_if_else_workflow_step_else.py:75](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L75) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_WaitForInput - -[Show source in tasks_if_else_workflow_step_else.py:531](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L531) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_WaitForInput().dict - -[Show source in tasks_if_else_workflow_step_else.py:549](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L549) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_WaitForInput().json - -[Show source in tasks_if_else_workflow_step_else.py:541](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L541) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepElse_Yield - -[Show source in tasks_if_else_workflow_step_else.py:109](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L109) - -The steps to run if the condition is false - -#### Signature - -```python -class TasksIfElseWorkflowStepElse_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepElse_Yield().dict - -[Show source in tasks_if_else_workflow_step_else.py:126](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L126) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepElse_Yield().json - -[Show source in tasks_if_else_workflow_step_else.py:118](../../../../../../../julep/api/types/tasks_if_else_workflow_step_else.py#L118) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step_then.md b/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step_then.md deleted file mode 100644 index 75ef5edf1..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_if_else_workflow_step_then.md +++ /dev/null @@ -1,460 +0,0 @@ -# Tasks If Else Workflow Step Then - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks If Else Workflow Step Then - -> Auto-generated documentation for [julep.api.types.tasks_if_else_workflow_step_then](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py) module. - -- [Tasks If Else Workflow Step Then](#tasks-if-else-workflow-step-then) - - [TasksIfElseWorkflowStepThen_Embed](#tasksifelseworkflowstepthen_embed) - - [TasksIfElseWorkflowStepThen_Error](#tasksifelseworkflowstepthen_error) - - [TasksIfElseWorkflowStepThen_Evaluate](#tasksifelseworkflowstepthen_evaluate) - - [TasksIfElseWorkflowStepThen_Get](#tasksifelseworkflowstepthen_get) - - [TasksIfElseWorkflowStepThen_Log](#tasksifelseworkflowstepthen_log) - - [TasksIfElseWorkflowStepThen_Prompt](#tasksifelseworkflowstepthen_prompt) - - [TasksIfElseWorkflowStepThen_Return](#tasksifelseworkflowstepthen_return) - - [TasksIfElseWorkflowStepThen_Search](#tasksifelseworkflowstepthen_search) - - [TasksIfElseWorkflowStepThen_Set](#tasksifelseworkflowstepthen_set) - - [TasksIfElseWorkflowStepThen_Sleep](#tasksifelseworkflowstepthen_sleep) - - [TasksIfElseWorkflowStepThen_ToolCall](#tasksifelseworkflowstepthen_toolcall) - - [TasksIfElseWorkflowStepThen_WaitForInput](#tasksifelseworkflowstepthen_waitforinput) - - [TasksIfElseWorkflowStepThen_Yield](#tasksifelseworkflowstepthen_yield) - -## TasksIfElseWorkflowStepThen_Embed - -[Show source in tasks_if_else_workflow_step_then.py:447](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L447) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Embed().dict - -[Show source in tasks_if_else_workflow_step_then.py:463](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Embed().json - -[Show source in tasks_if_else_workflow_step_then.py:455](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Error - -[Show source in tasks_if_else_workflow_step_then.py:195](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L195) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Error(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Error().dict - -[Show source in tasks_if_else_workflow_step_then.py:211](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L211) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Error().json - -[Show source in tasks_if_else_workflow_step_then.py:203](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L203) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Evaluate - -[Show source in tasks_if_else_workflow_step_then.py:20](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L20) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Evaluate().dict - -[Show source in tasks_if_else_workflow_step_then.py:38](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L38) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Evaluate().json - -[Show source in tasks_if_else_workflow_step_then.py:30](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L30) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Get - -[Show source in tasks_if_else_workflow_step_then.py:321](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L321) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Get(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Get().dict - -[Show source in tasks_if_else_workflow_step_then.py:337](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L337) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Get().json - -[Show source in tasks_if_else_workflow_step_then.py:329](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L329) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Log - -[Show source in tasks_if_else_workflow_step_then.py:405](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L405) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Log(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Log().dict - -[Show source in tasks_if_else_workflow_step_then.py:421](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L421) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Log().json - -[Show source in tasks_if_else_workflow_step_then.py:413](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L413) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Prompt - -[Show source in tasks_if_else_workflow_step_then.py:152](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L152) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Prompt().dict - -[Show source in tasks_if_else_workflow_step_then.py:169](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L169) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Prompt().json - -[Show source in tasks_if_else_workflow_step_then.py:161](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L161) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Return - -[Show source in tasks_if_else_workflow_step_then.py:279](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L279) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Return(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Return().dict - -[Show source in tasks_if_else_workflow_step_then.py:295](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L295) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Return().json - -[Show source in tasks_if_else_workflow_step_then.py:287](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L287) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Search - -[Show source in tasks_if_else_workflow_step_then.py:489](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L489) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Search(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Search().dict - -[Show source in tasks_if_else_workflow_step_then.py:505](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L505) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Search().json - -[Show source in tasks_if_else_workflow_step_then.py:497](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L497) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Set - -[Show source in tasks_if_else_workflow_step_then.py:363](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L363) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Set(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Set().dict - -[Show source in tasks_if_else_workflow_step_then.py:379](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L379) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Set().json - -[Show source in tasks_if_else_workflow_step_then.py:371](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L371) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Sleep - -[Show source in tasks_if_else_workflow_step_then.py:237](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L237) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Sleep().dict - -[Show source in tasks_if_else_workflow_step_then.py:253](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L253) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Sleep().json - -[Show source in tasks_if_else_workflow_step_then.py:245](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L245) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_ToolCall - -[Show source in tasks_if_else_workflow_step_then.py:64](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L64) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_ToolCall().dict - -[Show source in tasks_if_else_workflow_step_then.py:83](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L83) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_ToolCall().json - -[Show source in tasks_if_else_workflow_step_then.py:75](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L75) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_WaitForInput - -[Show source in tasks_if_else_workflow_step_then.py:531](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L531) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_WaitForInput().dict - -[Show source in tasks_if_else_workflow_step_then.py:549](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L549) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_WaitForInput().json - -[Show source in tasks_if_else_workflow_step_then.py:541](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L541) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksIfElseWorkflowStepThen_Yield - -[Show source in tasks_if_else_workflow_step_then.py:109](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L109) - -The steps to run if the condition is true - -#### Signature - -```python -class TasksIfElseWorkflowStepThen_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksIfElseWorkflowStepThen_Yield().dict - -[Show source in tasks_if_else_workflow_step_then.py:126](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L126) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksIfElseWorkflowStepThen_Yield().json - -[Show source in tasks_if_else_workflow_step_then.py:118](../../../../../../../julep/api/types/tasks_if_else_workflow_step_then.py#L118) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_log_step.md b/docs/python-sdk-docs/julep/api/types/tasks_log_step.md deleted file mode 100644 index 2ab4a3c39..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_log_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksLogStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksLogStep - -> Auto-generated documentation for [julep.api.types.tasks_log_step](../../../../../../../julep/api/types/tasks_log_step.py) module. - -- [TasksLogStep](#taskslogstep) - - [TasksLogStep](#taskslogstep-1) - -## TasksLogStep - -[Show source in tasks_log_step.py:11](../../../../../../../julep/api/types/tasks_log_step.py#L11) - -#### Signature - -```python -class TasksLogStep(pydantic_v1.BaseModel): ... -``` - -### TasksLogStep().dict - -[Show source in tasks_log_step.py:25](../../../../../../../julep/api/types/tasks_log_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksLogStep().json - -[Show source in tasks_log_step.py:17](../../../../../../../julep/api/types/tasks_log_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_map_over.md b/docs/python-sdk-docs/julep/api/types/tasks_map_over.md deleted file mode 100644 index af877ed87..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_map_over.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksMapOver - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksMapOver - -> Auto-generated documentation for [julep.api.types.tasks_map_over](../../../../../../../julep/api/types/tasks_map_over.py) module. - -- [TasksMapOver](#tasksmapover) - - [TasksMapOver](#tasksmapover-1) - -## TasksMapOver - -[Show source in tasks_map_over.py:11](../../../../../../../julep/api/types/tasks_map_over.py#L11) - -#### Signature - -```python -class TasksMapOver(pydantic_v1.BaseModel): ... -``` - -### TasksMapOver().dict - -[Show source in tasks_map_over.py:30](../../../../../../../julep/api/types/tasks_map_over.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksMapOver().json - -[Show source in tasks_map_over.py:22](../../../../../../../julep/api/types/tasks_map_over.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_map_reduce_step.md b/docs/python-sdk-docs/julep/api/types/tasks_map_reduce_step.md deleted file mode 100644 index 15fe7be42..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_map_reduce_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksMapReduceStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksMapReduceStep - -> Auto-generated documentation for [julep.api.types.tasks_map_reduce_step](../../../../../../../julep/api/types/tasks_map_reduce_step.py) module. - -- [TasksMapReduceStep](#tasksmapreducestep) - - [TasksMapReduceStep](#tasksmapreducestep-1) - -## TasksMapReduceStep - -[Show source in tasks_map_reduce_step.py:12](../../../../../../../julep/api/types/tasks_map_reduce_step.py#L12) - -#### Signature - -```python -class TasksMapReduceStep(pydantic_v1.BaseModel): ... -``` - -### TasksMapReduceStep().dict - -[Show source in tasks_map_reduce_step.py:31](../../../../../../../julep/api/types/tasks_map_reduce_step.py#L31) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksMapReduceStep().json - -[Show source in tasks_map_reduce_step.py:23](../../../../../../../julep/api/types/tasks_map_reduce_step.py#L23) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_parallel_step.md b/docs/python-sdk-docs/julep/api/types/tasks_parallel_step.md deleted file mode 100644 index 3c2c08d7d..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_parallel_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksParallelStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksParallelStep - -> Auto-generated documentation for [julep.api.types.tasks_parallel_step](../../../../../../../julep/api/types/tasks_parallel_step.py) module. - -- [TasksParallelStep](#tasksparallelstep) - - [TasksParallelStep](#tasksparallelstep-1) - -## TasksParallelStep - -[Show source in tasks_parallel_step.py:11](../../../../../../../julep/api/types/tasks_parallel_step.py#L11) - -#### Signature - -```python -class TasksParallelStep(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStep().dict - -[Show source in tasks_parallel_step.py:25](../../../../../../../julep/api/types/tasks_parallel_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStep().json - -[Show source in tasks_parallel_step.py:17](../../../../../../../julep/api/types/tasks_parallel_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_parallel_step_parallel_item.md b/docs/python-sdk-docs/julep/api/types/tasks_parallel_step_parallel_item.md deleted file mode 100644 index 6ac00488b..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_parallel_step_parallel_item.md +++ /dev/null @@ -1,434 +0,0 @@ -# Tasks Parallel Step Parallel Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Parallel Step Parallel Item - -> Auto-generated documentation for [julep.api.types.tasks_parallel_step_parallel_item](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py) module. - -- [Tasks Parallel Step Parallel Item](#tasks-parallel-step-parallel-item) - - [TasksParallelStepParallelItem_Embed](#tasksparallelstepparallelitem_embed) - - [TasksParallelStepParallelItem_Error](#tasksparallelstepparallelitem_error) - - [TasksParallelStepParallelItem_Evaluate](#tasksparallelstepparallelitem_evaluate) - - [TasksParallelStepParallelItem_Get](#tasksparallelstepparallelitem_get) - - [TasksParallelStepParallelItem_Log](#tasksparallelstepparallelitem_log) - - [TasksParallelStepParallelItem_Prompt](#tasksparallelstepparallelitem_prompt) - - [TasksParallelStepParallelItem_Return](#tasksparallelstepparallelitem_return) - - [TasksParallelStepParallelItem_Search](#tasksparallelstepparallelitem_search) - - [TasksParallelStepParallelItem_Set](#tasksparallelstepparallelitem_set) - - [TasksParallelStepParallelItem_Sleep](#tasksparallelstepparallelitem_sleep) - - [TasksParallelStepParallelItem_ToolCall](#tasksparallelstepparallelitem_toolcall) - - [TasksParallelStepParallelItem_WaitForInput](#tasksparallelstepparallelitem_waitforinput) - - [TasksParallelStepParallelItem_Yield](#tasksparallelstepparallelitem_yield) - -## TasksParallelStepParallelItem_Embed - -[Show source in tasks_parallel_step_parallel_item.py:407](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L407) - -#### Signature - -```python -class TasksParallelStepParallelItem_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Embed().dict - -[Show source in tasks_parallel_step_parallel_item.py:419](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L419) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Embed().json - -[Show source in tasks_parallel_step_parallel_item.py:411](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L411) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Error - -[Show source in tasks_parallel_step_parallel_item.py:179](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L179) - -#### Signature - -```python -class TasksParallelStepParallelItem_Error(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Error().dict - -[Show source in tasks_parallel_step_parallel_item.py:191](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L191) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Error().json - -[Show source in tasks_parallel_step_parallel_item.py:183](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L183) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Evaluate - -[Show source in tasks_parallel_step_parallel_item.py:20](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L20) - -#### Signature - -```python -class TasksParallelStepParallelItem_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Evaluate().dict - -[Show source in tasks_parallel_step_parallel_item.py:34](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L34) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Evaluate().json - -[Show source in tasks_parallel_step_parallel_item.py:26](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L26) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Get - -[Show source in tasks_parallel_step_parallel_item.py:293](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L293) - -#### Signature - -```python -class TasksParallelStepParallelItem_Get(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Get().dict - -[Show source in tasks_parallel_step_parallel_item.py:305](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L305) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Get().json - -[Show source in tasks_parallel_step_parallel_item.py:297](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L297) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Log - -[Show source in tasks_parallel_step_parallel_item.py:369](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L369) - -#### Signature - -```python -class TasksParallelStepParallelItem_Log(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Log().dict - -[Show source in tasks_parallel_step_parallel_item.py:381](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L381) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Log().json - -[Show source in tasks_parallel_step_parallel_item.py:373](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L373) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Prompt - -[Show source in tasks_parallel_step_parallel_item.py:140](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L140) - -#### Signature - -```python -class TasksParallelStepParallelItem_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Prompt().dict - -[Show source in tasks_parallel_step_parallel_item.py:153](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L153) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Prompt().json - -[Show source in tasks_parallel_step_parallel_item.py:145](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L145) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Return - -[Show source in tasks_parallel_step_parallel_item.py:255](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L255) - -#### Signature - -```python -class TasksParallelStepParallelItem_Return(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Return().dict - -[Show source in tasks_parallel_step_parallel_item.py:267](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L267) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Return().json - -[Show source in tasks_parallel_step_parallel_item.py:259](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L259) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Search - -[Show source in tasks_parallel_step_parallel_item.py:445](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L445) - -#### Signature - -```python -class TasksParallelStepParallelItem_Search(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Search().dict - -[Show source in tasks_parallel_step_parallel_item.py:457](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L457) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Search().json - -[Show source in tasks_parallel_step_parallel_item.py:449](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L449) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Set - -[Show source in tasks_parallel_step_parallel_item.py:331](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L331) - -#### Signature - -```python -class TasksParallelStepParallelItem_Set(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Set().dict - -[Show source in tasks_parallel_step_parallel_item.py:343](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L343) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Set().json - -[Show source in tasks_parallel_step_parallel_item.py:335](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L335) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Sleep - -[Show source in tasks_parallel_step_parallel_item.py:217](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L217) - -#### Signature - -```python -class TasksParallelStepParallelItem_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Sleep().dict - -[Show source in tasks_parallel_step_parallel_item.py:229](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L229) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Sleep().json - -[Show source in tasks_parallel_step_parallel_item.py:221](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L221) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_ToolCall - -[Show source in tasks_parallel_step_parallel_item.py:60](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L60) - -#### Signature - -```python -class TasksParallelStepParallelItem_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_ToolCall().dict - -[Show source in tasks_parallel_step_parallel_item.py:75](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L75) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_ToolCall().json - -[Show source in tasks_parallel_step_parallel_item.py:67](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L67) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_WaitForInput - -[Show source in tasks_parallel_step_parallel_item.py:483](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L483) - -#### Signature - -```python -class TasksParallelStepParallelItem_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_WaitForInput().dict - -[Show source in tasks_parallel_step_parallel_item.py:497](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L497) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_WaitForInput().json - -[Show source in tasks_parallel_step_parallel_item.py:489](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L489) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksParallelStepParallelItem_Yield - -[Show source in tasks_parallel_step_parallel_item.py:101](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L101) - -#### Signature - -```python -class TasksParallelStepParallelItem_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksParallelStepParallelItem_Yield().dict - -[Show source in tasks_parallel_step_parallel_item.py:114](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L114) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksParallelStepParallelItem_Yield().json - -[Show source in tasks_parallel_step_parallel_item.py:106](../../../../../../../julep/api/types/tasks_parallel_step_parallel_item.py#L106) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_patch_task_request_main_item.md b/docs/python-sdk-docs/julep/api/types/tasks_patch_task_request_main_item.md deleted file mode 100644 index de1078439..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_patch_task_request_main_item.md +++ /dev/null @@ -1,599 +0,0 @@ -# Tasks Patch Task Request Main Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Patch Task Request Main Item - -> Auto-generated documentation for [julep.api.types.tasks_patch_task_request_main_item](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py) module. - -- [Tasks Patch Task Request Main Item](#tasks-patch-task-request-main-item) - - [TasksPatchTaskRequestMainItem_Embed](#taskspatchtaskrequestmainitem_embed) - - [TasksPatchTaskRequestMainItem_Error](#taskspatchtaskrequestmainitem_error) - - [TasksPatchTaskRequestMainItem_Evaluate](#taskspatchtaskrequestmainitem_evaluate) - - [TasksPatchTaskRequestMainItem_Foreach](#taskspatchtaskrequestmainitem_foreach) - - [TasksPatchTaskRequestMainItem_Get](#taskspatchtaskrequestmainitem_get) - - [TasksPatchTaskRequestMainItem_IfElse](#taskspatchtaskrequestmainitem_ifelse) - - [TasksPatchTaskRequestMainItem_Log](#taskspatchtaskrequestmainitem_log) - - [TasksPatchTaskRequestMainItem_MapReduce](#taskspatchtaskrequestmainitem_mapreduce) - - [TasksPatchTaskRequestMainItem_Parallel](#taskspatchtaskrequestmainitem_parallel) - - [TasksPatchTaskRequestMainItem_Prompt](#taskspatchtaskrequestmainitem_prompt) - - [TasksPatchTaskRequestMainItem_Return](#taskspatchtaskrequestmainitem_return) - - [TasksPatchTaskRequestMainItem_Search](#taskspatchtaskrequestmainitem_search) - - [TasksPatchTaskRequestMainItem_Set](#taskspatchtaskrequestmainitem_set) - - [TasksPatchTaskRequestMainItem_Sleep](#taskspatchtaskrequestmainitem_sleep) - - [TasksPatchTaskRequestMainItem_Switch](#taskspatchtaskrequestmainitem_switch) - - [TasksPatchTaskRequestMainItem_ToolCall](#taskspatchtaskrequestmainitem_toolcall) - - [TasksPatchTaskRequestMainItem_WaitForInput](#taskspatchtaskrequestmainitem_waitforinput) - - [TasksPatchTaskRequestMainItem_Yield](#taskspatchtaskrequestmainitem_yield) - -## TasksPatchTaskRequestMainItem_Embed - -[Show source in tasks_patch_task_request_main_item.py:413](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L413) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Embed().dict - -[Show source in tasks_patch_task_request_main_item.py:425](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L425) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Embed().json - -[Show source in tasks_patch_task_request_main_item.py:417](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L417) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Error - -[Show source in tasks_patch_task_request_main_item.py:185](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L185) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Error(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Error().dict - -[Show source in tasks_patch_task_request_main_item.py:197](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L197) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Error().json - -[Show source in tasks_patch_task_request_main_item.py:189](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L189) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Evaluate - -[Show source in tasks_patch_task_request_main_item.py:26](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L26) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Evaluate().dict - -[Show source in tasks_patch_task_request_main_item.py:40](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L40) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Evaluate().json - -[Show source in tasks_patch_task_request_main_item.py:32](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L32) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Foreach - -[Show source in tasks_patch_task_request_main_item.py:609](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L609) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Foreach(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Foreach().dict - -[Show source in tasks_patch_task_request_main_item.py:623](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L623) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Foreach().json - -[Show source in tasks_patch_task_request_main_item.py:615](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L615) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Get - -[Show source in tasks_patch_task_request_main_item.py:299](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L299) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Get(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Get().dict - -[Show source in tasks_patch_task_request_main_item.py:311](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L311) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Get().json - -[Show source in tasks_patch_task_request_main_item.py:303](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L303) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_IfElse - -[Show source in tasks_patch_task_request_main_item.py:529](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L529) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_IfElse(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_IfElse().dict - -[Show source in tasks_patch_task_request_main_item.py:545](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L545) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_IfElse().json - -[Show source in tasks_patch_task_request_main_item.py:537](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L537) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Log - -[Show source in tasks_patch_task_request_main_item.py:375](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L375) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Log(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Log().dict - -[Show source in tasks_patch_task_request_main_item.py:387](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L387) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Log().json - -[Show source in tasks_patch_task_request_main_item.py:379](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L379) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_MapReduce - -[Show source in tasks_patch_task_request_main_item.py:689](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L689) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_MapReduce(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_MapReduce().dict - -[Show source in tasks_patch_task_request_main_item.py:704](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L704) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_MapReduce().json - -[Show source in tasks_patch_task_request_main_item.py:696](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L696) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Parallel - -[Show source in tasks_patch_task_request_main_item.py:649](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L649) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Parallel(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Parallel().dict - -[Show source in tasks_patch_task_request_main_item.py:663](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L663) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Parallel().json - -[Show source in tasks_patch_task_request_main_item.py:655](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L655) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Prompt - -[Show source in tasks_patch_task_request_main_item.py:146](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L146) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Prompt().dict - -[Show source in tasks_patch_task_request_main_item.py:159](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L159) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Prompt().json - -[Show source in tasks_patch_task_request_main_item.py:151](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L151) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Return - -[Show source in tasks_patch_task_request_main_item.py:261](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L261) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Return(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Return().dict - -[Show source in tasks_patch_task_request_main_item.py:273](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L273) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Return().json - -[Show source in tasks_patch_task_request_main_item.py:265](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L265) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Search - -[Show source in tasks_patch_task_request_main_item.py:451](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L451) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Search(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Search().dict - -[Show source in tasks_patch_task_request_main_item.py:463](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Search().json - -[Show source in tasks_patch_task_request_main_item.py:455](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Set - -[Show source in tasks_patch_task_request_main_item.py:337](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L337) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Set(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Set().dict - -[Show source in tasks_patch_task_request_main_item.py:349](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L349) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Set().json - -[Show source in tasks_patch_task_request_main_item.py:341](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L341) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Sleep - -[Show source in tasks_patch_task_request_main_item.py:223](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L223) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Sleep().dict - -[Show source in tasks_patch_task_request_main_item.py:235](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L235) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Sleep().json - -[Show source in tasks_patch_task_request_main_item.py:227](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L227) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Switch - -[Show source in tasks_patch_task_request_main_item.py:571](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L571) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Switch(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Switch().dict - -[Show source in tasks_patch_task_request_main_item.py:583](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L583) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Switch().json - -[Show source in tasks_patch_task_request_main_item.py:575](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L575) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_ToolCall - -[Show source in tasks_patch_task_request_main_item.py:66](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L66) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_ToolCall().dict - -[Show source in tasks_patch_task_request_main_item.py:81](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L81) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_ToolCall().json - -[Show source in tasks_patch_task_request_main_item.py:73](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L73) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_WaitForInput - -[Show source in tasks_patch_task_request_main_item.py:489](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L489) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_WaitForInput().dict - -[Show source in tasks_patch_task_request_main_item.py:503](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L503) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_WaitForInput().json - -[Show source in tasks_patch_task_request_main_item.py:495](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L495) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksPatchTaskRequestMainItem_Yield - -[Show source in tasks_patch_task_request_main_item.py:107](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L107) - -#### Signature - -```python -class TasksPatchTaskRequestMainItem_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksPatchTaskRequestMainItem_Yield().dict - -[Show source in tasks_patch_task_request_main_item.py:120](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L120) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPatchTaskRequestMainItem_Yield().json - -[Show source in tasks_patch_task_request_main_item.py:112](../../../../../../../julep/api/types/tasks_patch_task_request_main_item.py#L112) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_prompt_step.md b/docs/python-sdk-docs/julep/api/types/tasks_prompt_step.md deleted file mode 100644 index aead87f7b..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_prompt_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksPromptStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksPromptStep - -> Auto-generated documentation for [julep.api.types.tasks_prompt_step](../../../../../../../julep/api/types/tasks_prompt_step.py) module. - -- [TasksPromptStep](#taskspromptstep) - - [TasksPromptStep](#taskspromptstep-1) - -## TasksPromptStep - -[Show source in tasks_prompt_step.py:12](../../../../../../../julep/api/types/tasks_prompt_step.py#L12) - -#### Signature - -```python -class TasksPromptStep(pydantic_v1.BaseModel): ... -``` - -### TasksPromptStep().dict - -[Show source in tasks_prompt_step.py:31](../../../../../../../julep/api/types/tasks_prompt_step.py#L31) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksPromptStep().json - -[Show source in tasks_prompt_step.py:23](../../../../../../../julep/api/types/tasks_prompt_step.py#L23) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_prompt_step_prompt.md b/docs/python-sdk-docs/julep/api/types/tasks_prompt_step_prompt.md deleted file mode 100644 index dcaf88924..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_prompt_step_prompt.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks Prompt Step Prompt - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Prompt Step Prompt - -> Auto-generated documentation for [julep.api.types.tasks_prompt_step_prompt](../../../../../../../julep/api/types/tasks_prompt_step_prompt.py) module. -- [Tasks Prompt Step Prompt](#tasks-prompt-step-prompt) diff --git a/docs/python-sdk-docs/julep/api/types/tasks_return_step.md b/docs/python-sdk-docs/julep/api/types/tasks_return_step.md deleted file mode 100644 index 6ffe79f9a..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_return_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksReturnStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksReturnStep - -> Auto-generated documentation for [julep.api.types.tasks_return_step](../../../../../../../julep/api/types/tasks_return_step.py) module. - -- [TasksReturnStep](#tasksreturnstep) - - [TasksReturnStep](#tasksreturnstep-1) - -## TasksReturnStep - -[Show source in tasks_return_step.py:11](../../../../../../../julep/api/types/tasks_return_step.py#L11) - -#### Signature - -```python -class TasksReturnStep(pydantic_v1.BaseModel): ... -``` - -### TasksReturnStep().dict - -[Show source in tasks_return_step.py:25](../../../../../../../julep/api/types/tasks_return_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksReturnStep().json - -[Show source in tasks_return_step.py:17](../../../../../../../julep/api/types/tasks_return_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/tasks_route_list_request_direction.md deleted file mode 100644 index a770714c2..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Route List Request Direction - -> Auto-generated documentation for [julep.api.types.tasks_route_list_request_direction](../../../../../../../julep/api/types/tasks_route_list_request_direction.py) module. -- [Tasks Route List Request Direction](#tasks-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/tasks_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/tasks_route_list_request_sort_by.md deleted file mode 100644 index 6724a2a5e..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.tasks_route_list_request_sort_by](../../../../../../../julep/api/types/tasks_route_list_request_sort_by.py) module. -- [Tasks Route List Request Sort By](#tasks-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/tasks_route_list_response.md b/docs/python-sdk-docs/julep/api/types/tasks_route_list_response.md deleted file mode 100644 index 567d53784..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksRouteListResponse - -> Auto-generated documentation for [julep.api.types.tasks_route_list_response](../../../../../../../julep/api/types/tasks_route_list_response.py) module. - -- [TasksRouteListResponse](#tasksroutelistresponse) - - [TasksRouteListResponse](#tasksroutelistresponse-1) - -## TasksRouteListResponse - -[Show source in tasks_route_list_response.py:11](../../../../../../../julep/api/types/tasks_route_list_response.py#L11) - -#### Signature - -```python -class TasksRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### TasksRouteListResponse().dict - -[Show source in tasks_route_list_response.py:22](../../../../../../../julep/api/types/tasks_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksRouteListResponse().json - -[Show source in tasks_route_list_response.py:14](../../../../../../../julep/api/types/tasks_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_search_step.md b/docs/python-sdk-docs/julep/api/types/tasks_search_step.md deleted file mode 100644 index 261961a32..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_search_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksSearchStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksSearchStep - -> Auto-generated documentation for [julep.api.types.tasks_search_step](../../../../../../../julep/api/types/tasks_search_step.py) module. - -- [TasksSearchStep](#taskssearchstep) - - [TasksSearchStep](#taskssearchstep-1) - -## TasksSearchStep - -[Show source in tasks_search_step.py:11](../../../../../../../julep/api/types/tasks_search_step.py#L11) - -#### Signature - -```python -class TasksSearchStep(pydantic_v1.BaseModel): ... -``` - -### TasksSearchStep().dict - -[Show source in tasks_search_step.py:25](../../../../../../../julep/api/types/tasks_search_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksSearchStep().json - -[Show source in tasks_search_step.py:17](../../../../../../../julep/api/types/tasks_search_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_search_step_search.md b/docs/python-sdk-docs/julep/api/types/tasks_search_step_search.md deleted file mode 100644 index 3a493bb23..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_search_step_search.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks Search Step Search - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Search Step Search - -> Auto-generated documentation for [julep.api.types.tasks_search_step_search](../../../../../../../julep/api/types/tasks_search_step_search.py) module. -- [Tasks Search Step Search](#tasks-search-step-search) diff --git a/docs/python-sdk-docs/julep/api/types/tasks_set_key.md b/docs/python-sdk-docs/julep/api/types/tasks_set_key.md deleted file mode 100644 index 38598bcf3..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_set_key.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksSetKey - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksSetKey - -> Auto-generated documentation for [julep.api.types.tasks_set_key](../../../../../../../julep/api/types/tasks_set_key.py) module. - -- [TasksSetKey](#taskssetkey) - - [TasksSetKey](#taskssetkey-1) - -## TasksSetKey - -[Show source in tasks_set_key.py:11](../../../../../../../julep/api/types/tasks_set_key.py#L11) - -#### Signature - -```python -class TasksSetKey(pydantic_v1.BaseModel): ... -``` - -### TasksSetKey().dict - -[Show source in tasks_set_key.py:30](../../../../../../../julep/api/types/tasks_set_key.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksSetKey().json - -[Show source in tasks_set_key.py:22](../../../../../../../julep/api/types/tasks_set_key.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_set_step.md b/docs/python-sdk-docs/julep/api/types/tasks_set_step.md deleted file mode 100644 index e8de84022..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_set_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksSetStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksSetStep - -> Auto-generated documentation for [julep.api.types.tasks_set_step](../../../../../../../julep/api/types/tasks_set_step.py) module. - -- [TasksSetStep](#taskssetstep) - - [TasksSetStep](#taskssetstep-1) - -## TasksSetStep - -[Show source in tasks_set_step.py:11](../../../../../../../julep/api/types/tasks_set_step.py#L11) - -#### Signature - -```python -class TasksSetStep(pydantic_v1.BaseModel): ... -``` - -### TasksSetStep().dict - -[Show source in tasks_set_step.py:25](../../../../../../../julep/api/types/tasks_set_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksSetStep().json - -[Show source in tasks_set_step.py:17](../../../../../../../julep/api/types/tasks_set_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_set_step_set.md b/docs/python-sdk-docs/julep/api/types/tasks_set_step_set.md deleted file mode 100644 index 142512310..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_set_step_set.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks Set Step Set - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Set Step Set - -> Auto-generated documentation for [julep.api.types.tasks_set_step_set](../../../../../../../julep/api/types/tasks_set_step_set.py) module. -- [Tasks Set Step Set](#tasks-set-step-set) diff --git a/docs/python-sdk-docs/julep/api/types/tasks_sleep_for.md b/docs/python-sdk-docs/julep/api/types/tasks_sleep_for.md deleted file mode 100644 index 884627663..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_sleep_for.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksSleepFor - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksSleepFor - -> Auto-generated documentation for [julep.api.types.tasks_sleep_for](../../../../../../../julep/api/types/tasks_sleep_for.py) module. - -- [TasksSleepFor](#taskssleepfor) - - [TasksSleepFor](#taskssleepfor-1) - -## TasksSleepFor - -[Show source in tasks_sleep_for.py:10](../../../../../../../julep/api/types/tasks_sleep_for.py#L10) - -#### Signature - -```python -class TasksSleepFor(pydantic_v1.BaseModel): ... -``` - -### TasksSleepFor().dict - -[Show source in tasks_sleep_for.py:39](../../../../../../../julep/api/types/tasks_sleep_for.py#L39) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksSleepFor().json - -[Show source in tasks_sleep_for.py:31](../../../../../../../julep/api/types/tasks_sleep_for.py#L31) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_sleep_step.md b/docs/python-sdk-docs/julep/api/types/tasks_sleep_step.md deleted file mode 100644 index b286704b0..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_sleep_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksSleepStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksSleepStep - -> Auto-generated documentation for [julep.api.types.tasks_sleep_step](../../../../../../../julep/api/types/tasks_sleep_step.py) module. - -- [TasksSleepStep](#taskssleepstep) - - [TasksSleepStep](#taskssleepstep-1) - -## TasksSleepStep - -[Show source in tasks_sleep_step.py:11](../../../../../../../julep/api/types/tasks_sleep_step.py#L11) - -#### Signature - -```python -class TasksSleepStep(pydantic_v1.BaseModel): ... -``` - -### TasksSleepStep().dict - -[Show source in tasks_sleep_step.py:25](../../../../../../../julep/api/types/tasks_sleep_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksSleepStep().json - -[Show source in tasks_sleep_step.py:17](../../../../../../../julep/api/types/tasks_sleep_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_switch_step.md b/docs/python-sdk-docs/julep/api/types/tasks_switch_step.md deleted file mode 100644 index ac6daef52..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_switch_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksSwitchStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksSwitchStep - -> Auto-generated documentation for [julep.api.types.tasks_switch_step](../../../../../../../julep/api/types/tasks_switch_step.py) module. - -- [TasksSwitchStep](#tasksswitchstep) - - [TasksSwitchStep](#tasksswitchstep-1) - -## TasksSwitchStep - -[Show source in tasks_switch_step.py:11](../../../../../../../julep/api/types/tasks_switch_step.py#L11) - -#### Signature - -```python -class TasksSwitchStep(pydantic_v1.BaseModel): ... -``` - -### TasksSwitchStep().dict - -[Show source in tasks_switch_step.py:25](../../../../../../../julep/api/types/tasks_switch_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksSwitchStep().json - -[Show source in tasks_switch_step.py:17](../../../../../../../julep/api/types/tasks_switch_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_task.md b/docs/python-sdk-docs/julep/api/types/tasks_task.md deleted file mode 100644 index 64d55c76d..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_task.md +++ /dev/null @@ -1,40 +0,0 @@ -# TasksTask - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksTask - -> Auto-generated documentation for [julep.api.types.tasks_task](../../../../../../../julep/api/types/tasks_task.py) module. - -- [TasksTask](#taskstask) - - [TasksTask](#taskstask-1) - -## TasksTask - -[Show source in tasks_task.py:13](../../../../../../../julep/api/types/tasks_task.py#L13) - -Object describing a Task - -#### Signature - -```python -class TasksTask(pydantic_v1.BaseModel): ... -``` - -### TasksTask().dict - -[Show source in tasks_task.py:63](../../../../../../../julep/api/types/tasks_task.py#L63) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTask().json - -[Show source in tasks_task.py:55](../../../../../../../julep/api/types/tasks_task.py#L55) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_task_main_item.md b/docs/python-sdk-docs/julep/api/types/tasks_task_main_item.md deleted file mode 100644 index ae12a2f50..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_task_main_item.md +++ /dev/null @@ -1,599 +0,0 @@ -# Tasks Task Main Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Task Main Item - -> Auto-generated documentation for [julep.api.types.tasks_task_main_item](../../../../../../../julep/api/types/tasks_task_main_item.py) module. - -- [Tasks Task Main Item](#tasks-task-main-item) - - [TasksTaskMainItem_Embed](#taskstaskmainitem_embed) - - [TasksTaskMainItem_Error](#taskstaskmainitem_error) - - [TasksTaskMainItem_Evaluate](#taskstaskmainitem_evaluate) - - [TasksTaskMainItem_Foreach](#taskstaskmainitem_foreach) - - [TasksTaskMainItem_Get](#taskstaskmainitem_get) - - [TasksTaskMainItem_IfElse](#taskstaskmainitem_ifelse) - - [TasksTaskMainItem_Log](#taskstaskmainitem_log) - - [TasksTaskMainItem_MapReduce](#taskstaskmainitem_mapreduce) - - [TasksTaskMainItem_Parallel](#taskstaskmainitem_parallel) - - [TasksTaskMainItem_Prompt](#taskstaskmainitem_prompt) - - [TasksTaskMainItem_Return](#taskstaskmainitem_return) - - [TasksTaskMainItem_Search](#taskstaskmainitem_search) - - [TasksTaskMainItem_Set](#taskstaskmainitem_set) - - [TasksTaskMainItem_Sleep](#taskstaskmainitem_sleep) - - [TasksTaskMainItem_Switch](#taskstaskmainitem_switch) - - [TasksTaskMainItem_ToolCall](#taskstaskmainitem_toolcall) - - [TasksTaskMainItem_WaitForInput](#taskstaskmainitem_waitforinput) - - [TasksTaskMainItem_Yield](#taskstaskmainitem_yield) - -## TasksTaskMainItem_Embed - -[Show source in tasks_task_main_item.py:413](../../../../../../../julep/api/types/tasks_task_main_item.py#L413) - -#### Signature - -```python -class TasksTaskMainItem_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Embed().dict - -[Show source in tasks_task_main_item.py:425](../../../../../../../julep/api/types/tasks_task_main_item.py#L425) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Embed().json - -[Show source in tasks_task_main_item.py:417](../../../../../../../julep/api/types/tasks_task_main_item.py#L417) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Error - -[Show source in tasks_task_main_item.py:185](../../../../../../../julep/api/types/tasks_task_main_item.py#L185) - -#### Signature - -```python -class TasksTaskMainItem_Error(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Error().dict - -[Show source in tasks_task_main_item.py:197](../../../../../../../julep/api/types/tasks_task_main_item.py#L197) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Error().json - -[Show source in tasks_task_main_item.py:189](../../../../../../../julep/api/types/tasks_task_main_item.py#L189) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Evaluate - -[Show source in tasks_task_main_item.py:26](../../../../../../../julep/api/types/tasks_task_main_item.py#L26) - -#### Signature - -```python -class TasksTaskMainItem_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Evaluate().dict - -[Show source in tasks_task_main_item.py:40](../../../../../../../julep/api/types/tasks_task_main_item.py#L40) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Evaluate().json - -[Show source in tasks_task_main_item.py:32](../../../../../../../julep/api/types/tasks_task_main_item.py#L32) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Foreach - -[Show source in tasks_task_main_item.py:609](../../../../../../../julep/api/types/tasks_task_main_item.py#L609) - -#### Signature - -```python -class TasksTaskMainItem_Foreach(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Foreach().dict - -[Show source in tasks_task_main_item.py:623](../../../../../../../julep/api/types/tasks_task_main_item.py#L623) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Foreach().json - -[Show source in tasks_task_main_item.py:615](../../../../../../../julep/api/types/tasks_task_main_item.py#L615) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Get - -[Show source in tasks_task_main_item.py:299](../../../../../../../julep/api/types/tasks_task_main_item.py#L299) - -#### Signature - -```python -class TasksTaskMainItem_Get(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Get().dict - -[Show source in tasks_task_main_item.py:311](../../../../../../../julep/api/types/tasks_task_main_item.py#L311) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Get().json - -[Show source in tasks_task_main_item.py:303](../../../../../../../julep/api/types/tasks_task_main_item.py#L303) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_IfElse - -[Show source in tasks_task_main_item.py:529](../../../../../../../julep/api/types/tasks_task_main_item.py#L529) - -#### Signature - -```python -class TasksTaskMainItem_IfElse(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_IfElse().dict - -[Show source in tasks_task_main_item.py:545](../../../../../../../julep/api/types/tasks_task_main_item.py#L545) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_IfElse().json - -[Show source in tasks_task_main_item.py:537](../../../../../../../julep/api/types/tasks_task_main_item.py#L537) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Log - -[Show source in tasks_task_main_item.py:375](../../../../../../../julep/api/types/tasks_task_main_item.py#L375) - -#### Signature - -```python -class TasksTaskMainItem_Log(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Log().dict - -[Show source in tasks_task_main_item.py:387](../../../../../../../julep/api/types/tasks_task_main_item.py#L387) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Log().json - -[Show source in tasks_task_main_item.py:379](../../../../../../../julep/api/types/tasks_task_main_item.py#L379) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_MapReduce - -[Show source in tasks_task_main_item.py:689](../../../../../../../julep/api/types/tasks_task_main_item.py#L689) - -#### Signature - -```python -class TasksTaskMainItem_MapReduce(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_MapReduce().dict - -[Show source in tasks_task_main_item.py:704](../../../../../../../julep/api/types/tasks_task_main_item.py#L704) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_MapReduce().json - -[Show source in tasks_task_main_item.py:696](../../../../../../../julep/api/types/tasks_task_main_item.py#L696) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Parallel - -[Show source in tasks_task_main_item.py:649](../../../../../../../julep/api/types/tasks_task_main_item.py#L649) - -#### Signature - -```python -class TasksTaskMainItem_Parallel(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Parallel().dict - -[Show source in tasks_task_main_item.py:663](../../../../../../../julep/api/types/tasks_task_main_item.py#L663) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Parallel().json - -[Show source in tasks_task_main_item.py:655](../../../../../../../julep/api/types/tasks_task_main_item.py#L655) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Prompt - -[Show source in tasks_task_main_item.py:146](../../../../../../../julep/api/types/tasks_task_main_item.py#L146) - -#### Signature - -```python -class TasksTaskMainItem_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Prompt().dict - -[Show source in tasks_task_main_item.py:159](../../../../../../../julep/api/types/tasks_task_main_item.py#L159) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Prompt().json - -[Show source in tasks_task_main_item.py:151](../../../../../../../julep/api/types/tasks_task_main_item.py#L151) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Return - -[Show source in tasks_task_main_item.py:261](../../../../../../../julep/api/types/tasks_task_main_item.py#L261) - -#### Signature - -```python -class TasksTaskMainItem_Return(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Return().dict - -[Show source in tasks_task_main_item.py:273](../../../../../../../julep/api/types/tasks_task_main_item.py#L273) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Return().json - -[Show source in tasks_task_main_item.py:265](../../../../../../../julep/api/types/tasks_task_main_item.py#L265) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Search - -[Show source in tasks_task_main_item.py:451](../../../../../../../julep/api/types/tasks_task_main_item.py#L451) - -#### Signature - -```python -class TasksTaskMainItem_Search(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Search().dict - -[Show source in tasks_task_main_item.py:463](../../../../../../../julep/api/types/tasks_task_main_item.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Search().json - -[Show source in tasks_task_main_item.py:455](../../../../../../../julep/api/types/tasks_task_main_item.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Set - -[Show source in tasks_task_main_item.py:337](../../../../../../../julep/api/types/tasks_task_main_item.py#L337) - -#### Signature - -```python -class TasksTaskMainItem_Set(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Set().dict - -[Show source in tasks_task_main_item.py:349](../../../../../../../julep/api/types/tasks_task_main_item.py#L349) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Set().json - -[Show source in tasks_task_main_item.py:341](../../../../../../../julep/api/types/tasks_task_main_item.py#L341) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Sleep - -[Show source in tasks_task_main_item.py:223](../../../../../../../julep/api/types/tasks_task_main_item.py#L223) - -#### Signature - -```python -class TasksTaskMainItem_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Sleep().dict - -[Show source in tasks_task_main_item.py:235](../../../../../../../julep/api/types/tasks_task_main_item.py#L235) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Sleep().json - -[Show source in tasks_task_main_item.py:227](../../../../../../../julep/api/types/tasks_task_main_item.py#L227) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Switch - -[Show source in tasks_task_main_item.py:571](../../../../../../../julep/api/types/tasks_task_main_item.py#L571) - -#### Signature - -```python -class TasksTaskMainItem_Switch(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Switch().dict - -[Show source in tasks_task_main_item.py:583](../../../../../../../julep/api/types/tasks_task_main_item.py#L583) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Switch().json - -[Show source in tasks_task_main_item.py:575](../../../../../../../julep/api/types/tasks_task_main_item.py#L575) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_ToolCall - -[Show source in tasks_task_main_item.py:66](../../../../../../../julep/api/types/tasks_task_main_item.py#L66) - -#### Signature - -```python -class TasksTaskMainItem_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_ToolCall().dict - -[Show source in tasks_task_main_item.py:81](../../../../../../../julep/api/types/tasks_task_main_item.py#L81) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_ToolCall().json - -[Show source in tasks_task_main_item.py:73](../../../../../../../julep/api/types/tasks_task_main_item.py#L73) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_WaitForInput - -[Show source in tasks_task_main_item.py:489](../../../../../../../julep/api/types/tasks_task_main_item.py#L489) - -#### Signature - -```python -class TasksTaskMainItem_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_WaitForInput().dict - -[Show source in tasks_task_main_item.py:503](../../../../../../../julep/api/types/tasks_task_main_item.py#L503) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_WaitForInput().json - -[Show source in tasks_task_main_item.py:495](../../../../../../../julep/api/types/tasks_task_main_item.py#L495) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksTaskMainItem_Yield - -[Show source in tasks_task_main_item.py:107](../../../../../../../julep/api/types/tasks_task_main_item.py#L107) - -#### Signature - -```python -class TasksTaskMainItem_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksTaskMainItem_Yield().dict - -[Show source in tasks_task_main_item.py:120](../../../../../../../julep/api/types/tasks_task_main_item.py#L120) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskMainItem_Yield().json - -[Show source in tasks_task_main_item.py:112](../../../../../../../julep/api/types/tasks_task_main_item.py#L112) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_task_tool.md b/docs/python-sdk-docs/julep/api/types/tasks_task_tool.md deleted file mode 100644 index 7be0648db..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_task_tool.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksTaskTool - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksTaskTool - -> Auto-generated documentation for [julep.api.types.tasks_task_tool](../../../../../../../julep/api/types/tasks_task_tool.py) module. - -- [TasksTaskTool](#taskstasktool) - - [TasksTaskTool](#taskstasktool-1) - -## TasksTaskTool - -[Show source in tasks_task_tool.py:11](../../../../../../../julep/api/types/tasks_task_tool.py#L11) - -#### Signature - -```python -class TasksTaskTool(ToolsCreateToolRequest): ... -``` - -### TasksTaskTool().dict - -[Show source in tasks_task_tool.py:25](../../../../../../../julep/api/types/tasks_task_tool.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksTaskTool().json - -[Show source in tasks_task_tool.py:17](../../../../../../../julep/api/types/tasks_task_tool.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_tool_call_step.md b/docs/python-sdk-docs/julep/api/types/tasks_tool_call_step.md deleted file mode 100644 index 871140201..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_tool_call_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksToolCallStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksToolCallStep - -> Auto-generated documentation for [julep.api.types.tasks_tool_call_step](../../../../../../../julep/api/types/tasks_tool_call_step.py) module. - -- [TasksToolCallStep](#taskstoolcallstep) - - [TasksToolCallStep](#taskstoolcallstep-1) - -## TasksToolCallStep - -[Show source in tasks_tool_call_step.py:12](../../../../../../../julep/api/types/tasks_tool_call_step.py#L12) - -#### Signature - -```python -class TasksToolCallStep(pydantic_v1.BaseModel): ... -``` - -### TasksToolCallStep().dict - -[Show source in tasks_tool_call_step.py:31](../../../../../../../julep/api/types/tasks_tool_call_step.py#L31) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksToolCallStep().json - -[Show source in tasks_tool_call_step.py:23](../../../../../../../julep/api/types/tasks_tool_call_step.py#L23) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_update_task_request_main_item.md b/docs/python-sdk-docs/julep/api/types/tasks_update_task_request_main_item.md deleted file mode 100644 index e0a8569f9..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_update_task_request_main_item.md +++ /dev/null @@ -1,599 +0,0 @@ -# Tasks Update Task Request Main Item - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tasks Update Task Request Main Item - -> Auto-generated documentation for [julep.api.types.tasks_update_task_request_main_item](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py) module. - -- [Tasks Update Task Request Main Item](#tasks-update-task-request-main-item) - - [TasksUpdateTaskRequestMainItem_Embed](#tasksupdatetaskrequestmainitem_embed) - - [TasksUpdateTaskRequestMainItem_Error](#tasksupdatetaskrequestmainitem_error) - - [TasksUpdateTaskRequestMainItem_Evaluate](#tasksupdatetaskrequestmainitem_evaluate) - - [TasksUpdateTaskRequestMainItem_Foreach](#tasksupdatetaskrequestmainitem_foreach) - - [TasksUpdateTaskRequestMainItem_Get](#tasksupdatetaskrequestmainitem_get) - - [TasksUpdateTaskRequestMainItem_IfElse](#tasksupdatetaskrequestmainitem_ifelse) - - [TasksUpdateTaskRequestMainItem_Log](#tasksupdatetaskrequestmainitem_log) - - [TasksUpdateTaskRequestMainItem_MapReduce](#tasksupdatetaskrequestmainitem_mapreduce) - - [TasksUpdateTaskRequestMainItem_Parallel](#tasksupdatetaskrequestmainitem_parallel) - - [TasksUpdateTaskRequestMainItem_Prompt](#tasksupdatetaskrequestmainitem_prompt) - - [TasksUpdateTaskRequestMainItem_Return](#tasksupdatetaskrequestmainitem_return) - - [TasksUpdateTaskRequestMainItem_Search](#tasksupdatetaskrequestmainitem_search) - - [TasksUpdateTaskRequestMainItem_Set](#tasksupdatetaskrequestmainitem_set) - - [TasksUpdateTaskRequestMainItem_Sleep](#tasksupdatetaskrequestmainitem_sleep) - - [TasksUpdateTaskRequestMainItem_Switch](#tasksupdatetaskrequestmainitem_switch) - - [TasksUpdateTaskRequestMainItem_ToolCall](#tasksupdatetaskrequestmainitem_toolcall) - - [TasksUpdateTaskRequestMainItem_WaitForInput](#tasksupdatetaskrequestmainitem_waitforinput) - - [TasksUpdateTaskRequestMainItem_Yield](#tasksupdatetaskrequestmainitem_yield) - -## TasksUpdateTaskRequestMainItem_Embed - -[Show source in tasks_update_task_request_main_item.py:413](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L413) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Embed(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Embed().dict - -[Show source in tasks_update_task_request_main_item.py:425](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L425) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Embed().json - -[Show source in tasks_update_task_request_main_item.py:417](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L417) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Error - -[Show source in tasks_update_task_request_main_item.py:185](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L185) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Error(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Error().dict - -[Show source in tasks_update_task_request_main_item.py:197](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L197) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Error().json - -[Show source in tasks_update_task_request_main_item.py:189](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L189) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Evaluate - -[Show source in tasks_update_task_request_main_item.py:26](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L26) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Evaluate(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Evaluate().dict - -[Show source in tasks_update_task_request_main_item.py:40](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L40) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Evaluate().json - -[Show source in tasks_update_task_request_main_item.py:32](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L32) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Foreach - -[Show source in tasks_update_task_request_main_item.py:609](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L609) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Foreach(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Foreach().dict - -[Show source in tasks_update_task_request_main_item.py:623](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L623) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Foreach().json - -[Show source in tasks_update_task_request_main_item.py:615](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L615) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Get - -[Show source in tasks_update_task_request_main_item.py:299](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L299) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Get(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Get().dict - -[Show source in tasks_update_task_request_main_item.py:311](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L311) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Get().json - -[Show source in tasks_update_task_request_main_item.py:303](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L303) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_IfElse - -[Show source in tasks_update_task_request_main_item.py:529](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L529) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_IfElse(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_IfElse().dict - -[Show source in tasks_update_task_request_main_item.py:545](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L545) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_IfElse().json - -[Show source in tasks_update_task_request_main_item.py:537](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L537) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Log - -[Show source in tasks_update_task_request_main_item.py:375](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L375) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Log(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Log().dict - -[Show source in tasks_update_task_request_main_item.py:387](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L387) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Log().json - -[Show source in tasks_update_task_request_main_item.py:379](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L379) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_MapReduce - -[Show source in tasks_update_task_request_main_item.py:689](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L689) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_MapReduce(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_MapReduce().dict - -[Show source in tasks_update_task_request_main_item.py:704](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L704) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_MapReduce().json - -[Show source in tasks_update_task_request_main_item.py:696](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L696) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Parallel - -[Show source in tasks_update_task_request_main_item.py:649](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L649) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Parallel(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Parallel().dict - -[Show source in tasks_update_task_request_main_item.py:663](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L663) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Parallel().json - -[Show source in tasks_update_task_request_main_item.py:655](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L655) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Prompt - -[Show source in tasks_update_task_request_main_item.py:146](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L146) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Prompt(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Prompt().dict - -[Show source in tasks_update_task_request_main_item.py:159](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L159) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Prompt().json - -[Show source in tasks_update_task_request_main_item.py:151](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L151) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Return - -[Show source in tasks_update_task_request_main_item.py:261](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L261) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Return(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Return().dict - -[Show source in tasks_update_task_request_main_item.py:273](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L273) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Return().json - -[Show source in tasks_update_task_request_main_item.py:265](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L265) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Search - -[Show source in tasks_update_task_request_main_item.py:451](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L451) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Search(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Search().dict - -[Show source in tasks_update_task_request_main_item.py:463](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L463) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Search().json - -[Show source in tasks_update_task_request_main_item.py:455](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L455) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Set - -[Show source in tasks_update_task_request_main_item.py:337](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L337) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Set(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Set().dict - -[Show source in tasks_update_task_request_main_item.py:349](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L349) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Set().json - -[Show source in tasks_update_task_request_main_item.py:341](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L341) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Sleep - -[Show source in tasks_update_task_request_main_item.py:223](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L223) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Sleep(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Sleep().dict - -[Show source in tasks_update_task_request_main_item.py:235](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L235) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Sleep().json - -[Show source in tasks_update_task_request_main_item.py:227](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L227) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Switch - -[Show source in tasks_update_task_request_main_item.py:571](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L571) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Switch(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Switch().dict - -[Show source in tasks_update_task_request_main_item.py:583](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L583) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Switch().json - -[Show source in tasks_update_task_request_main_item.py:575](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L575) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_ToolCall - -[Show source in tasks_update_task_request_main_item.py:66](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L66) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_ToolCall(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_ToolCall().dict - -[Show source in tasks_update_task_request_main_item.py:81](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L81) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_ToolCall().json - -[Show source in tasks_update_task_request_main_item.py:73](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L73) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_WaitForInput - -[Show source in tasks_update_task_request_main_item.py:489](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L489) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_WaitForInput(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_WaitForInput().dict - -[Show source in tasks_update_task_request_main_item.py:503](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L503) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_WaitForInput().json - -[Show source in tasks_update_task_request_main_item.py:495](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L495) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## TasksUpdateTaskRequestMainItem_Yield - -[Show source in tasks_update_task_request_main_item.py:107](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L107) - -#### Signature - -```python -class TasksUpdateTaskRequestMainItem_Yield(pydantic_v1.BaseModel): ... -``` - -### TasksUpdateTaskRequestMainItem_Yield().dict - -[Show source in tasks_update_task_request_main_item.py:120](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L120) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksUpdateTaskRequestMainItem_Yield().json - -[Show source in tasks_update_task_request_main_item.py:112](../../../../../../../julep/api/types/tasks_update_task_request_main_item.py#L112) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_wait_for_input_step.md b/docs/python-sdk-docs/julep/api/types/tasks_wait_for_input_step.md deleted file mode 100644 index 94949a2f6..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_wait_for_input_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksWaitForInputStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksWaitForInputStep - -> Auto-generated documentation for [julep.api.types.tasks_wait_for_input_step](../../../../../../../julep/api/types/tasks_wait_for_input_step.py) module. - -- [TasksWaitForInputStep](#taskswaitforinputstep) - - [TasksWaitForInputStep](#taskswaitforinputstep-1) - -## TasksWaitForInputStep - -[Show source in tasks_wait_for_input_step.py:11](../../../../../../../julep/api/types/tasks_wait_for_input_step.py#L11) - -#### Signature - -```python -class TasksWaitForInputStep(pydantic_v1.BaseModel): ... -``` - -### TasksWaitForInputStep().dict - -[Show source in tasks_wait_for_input_step.py:25](../../../../../../../julep/api/types/tasks_wait_for_input_step.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksWaitForInputStep().json - -[Show source in tasks_wait_for_input_step.py:17](../../../../../../../julep/api/types/tasks_wait_for_input_step.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tasks_yield_step.md b/docs/python-sdk-docs/julep/api/types/tasks_yield_step.md deleted file mode 100644 index fb4038462..000000000 --- a/docs/python-sdk-docs/julep/api/types/tasks_yield_step.md +++ /dev/null @@ -1,38 +0,0 @@ -# TasksYieldStep - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / TasksYieldStep - -> Auto-generated documentation for [julep.api.types.tasks_yield_step](../../../../../../../julep/api/types/tasks_yield_step.py) module. - -- [TasksYieldStep](#tasksyieldstep) - - [TasksYieldStep](#tasksyieldstep-1) - -## TasksYieldStep - -[Show source in tasks_yield_step.py:11](../../../../../../../julep/api/types/tasks_yield_step.py#L11) - -#### Signature - -```python -class TasksYieldStep(pydantic_v1.BaseModel): ... -``` - -### TasksYieldStep().dict - -[Show source in tasks_yield_step.py:30](../../../../../../../julep/api/types/tasks_yield_step.py#L30) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### TasksYieldStep().json - -[Show source in tasks_yield_step.py:22](../../../../../../../julep/api/types/tasks_yield_step.py#L22) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_chosen_function_call.md b/docs/python-sdk-docs/julep/api/types/tools_chosen_function_call.md deleted file mode 100644 index e07a53092..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_chosen_function_call.md +++ /dev/null @@ -1,38 +0,0 @@ -# ToolsChosenFunctionCall - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsChosenFunctionCall - -> Auto-generated documentation for [julep.api.types.tools_chosen_function_call](../../../../../../../julep/api/types/tools_chosen_function_call.py) module. - -- [ToolsChosenFunctionCall](#toolschosenfunctioncall) - - [ToolsChosenFunctionCall](#toolschosenfunctioncall-1) - -## ToolsChosenFunctionCall - -[Show source in tools_chosen_function_call.py:11](../../../../../../../julep/api/types/tools_chosen_function_call.py#L11) - -#### Signature - -```python -class ToolsChosenFunctionCall(pydantic_v1.BaseModel): ... -``` - -### ToolsChosenFunctionCall().dict - -[Show source in tools_chosen_function_call.py:25](../../../../../../../julep/api/types/tools_chosen_function_call.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsChosenFunctionCall().json - -[Show source in tools_chosen_function_call.py:17](../../../../../../../julep/api/types/tools_chosen_function_call.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_chosen_tool_call.md b/docs/python-sdk-docs/julep/api/types/tools_chosen_tool_call.md deleted file mode 100644 index 676f843f8..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_chosen_tool_call.md +++ /dev/null @@ -1,77 +0,0 @@ -# Tools Chosen Tool Call - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tools Chosen Tool Call - -> Auto-generated documentation for [julep.api.types.tools_chosen_tool_call](../../../../../../../julep/api/types/tools_chosen_tool_call.py) module. - -- [Tools Chosen Tool Call](#tools-chosen-tool-call) - - [Base](#base) - - [ToolsChosenToolCall_Function](#toolschosentoolcall_function) - -## Base - -[Show source in tools_chosen_tool_call.py:14](../../../../../../../julep/api/types/tools_chosen_tool_call.py#L14) - -#### Signature - -```python -class Base(pydantic_v1.BaseModel): ... -``` - -### Base().dict - -[Show source in tools_chosen_tool_call.py:29](../../../../../../../julep/api/types/tools_chosen_tool_call.py#L29) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### Base().json - -[Show source in tools_chosen_tool_call.py:21](../../../../../../../julep/api/types/tools_chosen_tool_call.py#L21) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## ToolsChosenToolCall_Function - -[Show source in tools_chosen_tool_call.py:53](../../../../../../../julep/api/types/tools_chosen_tool_call.py#L53) - -The response tool value generated by the model - -#### Signature - -```python -class ToolsChosenToolCall_Function(Base): ... -``` - -#### See also - -- [Base](#base) - -### ToolsChosenToolCall_Function().dict - -[Show source in tools_chosen_tool_call.py:69](../../../../../../../julep/api/types/tools_chosen_tool_call.py#L69) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsChosenToolCall_Function().json - -[Show source in tools_chosen_tool_call.py:61](../../../../../../../julep/api/types/tools_chosen_tool_call.py#L61) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_create_tool_request.md b/docs/python-sdk-docs/julep/api/types/tools_create_tool_request.md deleted file mode 100644 index 7fb2bcb10..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_create_tool_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# ToolsCreateToolRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsCreateToolRequest - -> Auto-generated documentation for [julep.api.types.tools_create_tool_request](../../../../../../../julep/api/types/tools_create_tool_request.py) module. - -- [ToolsCreateToolRequest](#toolscreatetoolrequest) - - [ToolsCreateToolRequest](#toolscreatetoolrequest-1) - -## ToolsCreateToolRequest - -[Show source in tools_create_tool_request.py:13](../../../../../../../julep/api/types/tools_create_tool_request.py#L13) - -Payload for creating a tool - -#### Signature - -```python -class ToolsCreateToolRequest(pydantic_v1.BaseModel): ... -``` - -### ToolsCreateToolRequest().dict - -[Show source in tools_create_tool_request.py:41](../../../../../../../julep/api/types/tools_create_tool_request.py#L41) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsCreateToolRequest().json - -[Show source in tools_create_tool_request.py:33](../../../../../../../julep/api/types/tools_create_tool_request.py#L33) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_function_call_option.md b/docs/python-sdk-docs/julep/api/types/tools_function_call_option.md deleted file mode 100644 index 277b38b40..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_function_call_option.md +++ /dev/null @@ -1,38 +0,0 @@ -# ToolsFunctionCallOption - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsFunctionCallOption - -> Auto-generated documentation for [julep.api.types.tools_function_call_option](../../../../../../../julep/api/types/tools_function_call_option.py) module. - -- [ToolsFunctionCallOption](#toolsfunctioncalloption) - - [ToolsFunctionCallOption](#toolsfunctioncalloption-1) - -## ToolsFunctionCallOption - -[Show source in tools_function_call_option.py:10](../../../../../../../julep/api/types/tools_function_call_option.py#L10) - -#### Signature - -```python -class ToolsFunctionCallOption(pydantic_v1.BaseModel): ... -``` - -### ToolsFunctionCallOption().dict - -[Show source in tools_function_call_option.py:24](../../../../../../../julep/api/types/tools_function_call_option.py#L24) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsFunctionCallOption().json - -[Show source in tools_function_call_option.py:16](../../../../../../../julep/api/types/tools_function_call_option.py#L16) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_function_def.md b/docs/python-sdk-docs/julep/api/types/tools_function_def.md deleted file mode 100644 index f08e87dae..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_function_def.md +++ /dev/null @@ -1,40 +0,0 @@ -# ToolsFunctionDef - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsFunctionDef - -> Auto-generated documentation for [julep.api.types.tools_function_def](../../../../../../../julep/api/types/tools_function_def.py) module. - -- [ToolsFunctionDef](#toolsfunctiondef) - - [ToolsFunctionDef](#toolsfunctiondef-1) - -## ToolsFunctionDef - -[Show source in tools_function_def.py:11](../../../../../../../julep/api/types/tools_function_def.py#L11) - -Function definition - -#### Signature - -```python -class ToolsFunctionDef(pydantic_v1.BaseModel): ... -``` - -### ToolsFunctionDef().dict - -[Show source in tools_function_def.py:39](../../../../../../../julep/api/types/tools_function_def.py#L39) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsFunctionDef().json - -[Show source in tools_function_def.py:31](../../../../../../../julep/api/types/tools_function_def.py#L31) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_function_tool.md b/docs/python-sdk-docs/julep/api/types/tools_function_tool.md deleted file mode 100644 index 5ef4f60a5..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_function_tool.md +++ /dev/null @@ -1,38 +0,0 @@ -# ToolsFunctionTool - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsFunctionTool - -> Auto-generated documentation for [julep.api.types.tools_function_tool](../../../../../../../julep/api/types/tools_function_tool.py) module. - -- [ToolsFunctionTool](#toolsfunctiontool) - - [ToolsFunctionTool](#toolsfunctiontool-1) - -## ToolsFunctionTool - -[Show source in tools_function_tool.py:11](../../../../../../../julep/api/types/tools_function_tool.py#L11) - -#### Signature - -```python -class ToolsFunctionTool(pydantic_v1.BaseModel): ... -``` - -### ToolsFunctionTool().dict - -[Show source in tools_function_tool.py:26](../../../../../../../julep/api/types/tools_function_tool.py#L26) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsFunctionTool().json - -[Show source in tools_function_tool.py:18](../../../../../../../julep/api/types/tools_function_tool.py#L18) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_named_function_choice.md b/docs/python-sdk-docs/julep/api/types/tools_named_function_choice.md deleted file mode 100644 index 388aed5dc..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_named_function_choice.md +++ /dev/null @@ -1,38 +0,0 @@ -# ToolsNamedFunctionChoice - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsNamedFunctionChoice - -> Auto-generated documentation for [julep.api.types.tools_named_function_choice](../../../../../../../julep/api/types/tools_named_function_choice.py) module. - -- [ToolsNamedFunctionChoice](#toolsnamedfunctionchoice) - - [ToolsNamedFunctionChoice](#toolsnamedfunctionchoice-1) - -## ToolsNamedFunctionChoice - -[Show source in tools_named_function_choice.py:11](../../../../../../../julep/api/types/tools_named_function_choice.py#L11) - -#### Signature - -```python -class ToolsNamedFunctionChoice(pydantic_v1.BaseModel): ... -``` - -### ToolsNamedFunctionChoice().dict - -[Show source in tools_named_function_choice.py:25](../../../../../../../julep/api/types/tools_named_function_choice.py#L25) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsNamedFunctionChoice().json - -[Show source in tools_named_function_choice.py:17](../../../../../../../julep/api/types/tools_named_function_choice.py#L17) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_named_tool_choice.md b/docs/python-sdk-docs/julep/api/types/tools_named_tool_choice.md deleted file mode 100644 index 67ac8f4c2..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_named_tool_choice.md +++ /dev/null @@ -1,75 +0,0 @@ -# Tools Named Tool Choice - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tools Named Tool Choice - -> Auto-generated documentation for [julep.api.types.tools_named_tool_choice](../../../../../../../julep/api/types/tools_named_tool_choice.py) module. - -- [Tools Named Tool Choice](#tools-named-tool-choice) - - [Base](#base) - - [ToolsNamedToolChoice_Function](#toolsnamedtoolchoice_function) - -## Base - -[Show source in tools_named_tool_choice.py:13](../../../../../../../julep/api/types/tools_named_tool_choice.py#L13) - -#### Signature - -```python -class Base(pydantic_v1.BaseModel): ... -``` - -### Base().dict - -[Show source in tools_named_tool_choice.py:27](../../../../../../../julep/api/types/tools_named_tool_choice.py#L27) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### Base().json - -[Show source in tools_named_tool_choice.py:19](../../../../../../../julep/api/types/tools_named_tool_choice.py#L19) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## ToolsNamedToolChoice_Function - -[Show source in tools_named_tool_choice.py:51](../../../../../../../julep/api/types/tools_named_tool_choice.py#L51) - -#### Signature - -```python -class ToolsNamedToolChoice_Function(Base): ... -``` - -#### See also - -- [Base](#base) - -### ToolsNamedToolChoice_Function().dict - -[Show source in tools_named_tool_choice.py:63](../../../../../../../julep/api/types/tools_named_tool_choice.py#L63) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsNamedToolChoice_Function().json - -[Show source in tools_named_tool_choice.py:55](../../../../../../../julep/api/types/tools_named_tool_choice.py#L55) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_tool.md b/docs/python-sdk-docs/julep/api/types/tools_tool.md deleted file mode 100644 index 4d33f1985..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_tool.md +++ /dev/null @@ -1,75 +0,0 @@ -# Tools Tool - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tools Tool - -> Auto-generated documentation for [julep.api.types.tools_tool](../../../../../../../julep/api/types/tools_tool.py) module. - -- [Tools Tool](#tools-tool) - - [Base](#base) - - [ToolsTool_Function](#toolstool_function) - -## Base - -[Show source in tools_tool.py:16](../../../../../../../julep/api/types/tools_tool.py#L16) - -#### Signature - -```python -class Base(pydantic_v1.BaseModel): ... -``` - -### Base().dict - -[Show source in tools_tool.py:46](../../../../../../../julep/api/types/tools_tool.py#L46) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### Base().json - -[Show source in tools_tool.py:38](../../../../../../../julep/api/types/tools_tool.py#L38) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` - - - -## ToolsTool_Function - -[Show source in tools_tool.py:70](../../../../../../../julep/api/types/tools_tool.py#L70) - -#### Signature - -```python -class ToolsTool_Function(Base): ... -``` - -#### See also - -- [Base](#base) - -### ToolsTool_Function().dict - -[Show source in tools_tool.py:83](../../../../../../../julep/api/types/tools_tool.py#L83) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsTool_Function().json - -[Show source in tools_tool.py:75](../../../../../../../julep/api/types/tools_tool.py#L75) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_tool_response.md b/docs/python-sdk-docs/julep/api/types/tools_tool_response.md deleted file mode 100644 index 7655fb126..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_tool_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# ToolsToolResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / ToolsToolResponse - -> Auto-generated documentation for [julep.api.types.tools_tool_response](../../../../../../../julep/api/types/tools_tool_response.py) module. - -- [ToolsToolResponse](#toolstoolresponse) - - [ToolsToolResponse](#toolstoolresponse-1) - -## ToolsToolResponse - -[Show source in tools_tool_response.py:11](../../../../../../../julep/api/types/tools_tool_response.py#L11) - -#### Signature - -```python -class ToolsToolResponse(pydantic_v1.BaseModel): ... -``` - -### ToolsToolResponse().dict - -[Show source in tools_tool_response.py:26](../../../../../../../julep/api/types/tools_tool_response.py#L26) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### ToolsToolResponse().json - -[Show source in tools_tool_response.py:18](../../../../../../../julep/api/types/tools_tool_response.py#L18) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/tools_tool_type.md b/docs/python-sdk-docs/julep/api/types/tools_tool_type.md deleted file mode 100644 index 704512b7d..000000000 --- a/docs/python-sdk-docs/julep/api/types/tools_tool_type.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tools Tool Type - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Tools Tool Type - -> Auto-generated documentation for [julep.api.types.tools_tool_type](../../../../../../../julep/api/types/tools_tool_type.py) module. -- [Tools Tool Type](#tools-tool-type) diff --git a/docs/python-sdk-docs/julep/api/types/user_docs_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/user_docs_route_list_request_direction.md deleted file mode 100644 index 942657be7..000000000 --- a/docs/python-sdk-docs/julep/api/types/user_docs_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# User Docs Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / User Docs Route List Request Direction - -> Auto-generated documentation for [julep.api.types.user_docs_route_list_request_direction](../../../../../../../julep/api/types/user_docs_route_list_request_direction.py) module. -- [User Docs Route List Request Direction](#user-docs-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/user_docs_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/user_docs_route_list_request_sort_by.md deleted file mode 100644 index 49add30a0..000000000 --- a/docs/python-sdk-docs/julep/api/types/user_docs_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# User Docs Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / User Docs Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.user_docs_route_list_request_sort_by](../../../../../../../julep/api/types/user_docs_route_list_request_sort_by.py) module. -- [User Docs Route List Request Sort By](#user-docs-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/user_docs_route_list_response.md b/docs/python-sdk-docs/julep/api/types/user_docs_route_list_response.md deleted file mode 100644 index 272cf8500..000000000 --- a/docs/python-sdk-docs/julep/api/types/user_docs_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# UserDocsRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / UserDocsRouteListResponse - -> Auto-generated documentation for [julep.api.types.user_docs_route_list_response](../../../../../../../julep/api/types/user_docs_route_list_response.py) module. - -- [UserDocsRouteListResponse](#userdocsroutelistresponse) - - [UserDocsRouteListResponse](#userdocsroutelistresponse-1) - -## UserDocsRouteListResponse - -[Show source in user_docs_route_list_response.py:11](../../../../../../../julep/api/types/user_docs_route_list_response.py#L11) - -#### Signature - -```python -class UserDocsRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### UserDocsRouteListResponse().dict - -[Show source in user_docs_route_list_response.py:22](../../../../../../../julep/api/types/user_docs_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### UserDocsRouteListResponse().json - -[Show source in user_docs_route_list_response.py:14](../../../../../../../julep/api/types/user_docs_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/user_docs_search_route_search_request_body.md b/docs/python-sdk-docs/julep/api/types/user_docs_search_route_search_request_body.md deleted file mode 100644 index 69e2cefff..000000000 --- a/docs/python-sdk-docs/julep/api/types/user_docs_search_route_search_request_body.md +++ /dev/null @@ -1,6 +0,0 @@ -# User Docs Search Route Search Request Body - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / User Docs Search Route Search Request Body - -> Auto-generated documentation for [julep.api.types.user_docs_search_route_search_request_body](../../../../../../../julep/api/types/user_docs_search_route_search_request_body.py) module. -- [User Docs Search Route Search Request Body](#user-docs-search-route-search-request-body) diff --git a/docs/python-sdk-docs/julep/api/types/users_create_or_update_user_request.md b/docs/python-sdk-docs/julep/api/types/users_create_or_update_user_request.md deleted file mode 100644 index 5dd9a655a..000000000 --- a/docs/python-sdk-docs/julep/api/types/users_create_or_update_user_request.md +++ /dev/null @@ -1,38 +0,0 @@ -# UsersCreateOrUpdateUserRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / UsersCreateOrUpdateUserRequest - -> Auto-generated documentation for [julep.api.types.users_create_or_update_user_request](../../../../../../../julep/api/types/users_create_or_update_user_request.py) module. - -- [UsersCreateOrUpdateUserRequest](#userscreateorupdateuserrequest) - - [UsersCreateOrUpdateUserRequest](#userscreateorupdateuserrequest-1) - -## UsersCreateOrUpdateUserRequest - -[Show source in users_create_or_update_user_request.py:12](../../../../../../../julep/api/types/users_create_or_update_user_request.py#L12) - -#### Signature - -```python -class UsersCreateOrUpdateUserRequest(UsersCreateUserRequest): ... -``` - -### UsersCreateOrUpdateUserRequest().dict - -[Show source in users_create_or_update_user_request.py:23](../../../../../../../julep/api/types/users_create_or_update_user_request.py#L23) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### UsersCreateOrUpdateUserRequest().json - -[Show source in users_create_or_update_user_request.py:15](../../../../../../../julep/api/types/users_create_or_update_user_request.py#L15) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/users_create_user_request.md b/docs/python-sdk-docs/julep/api/types/users_create_user_request.md deleted file mode 100644 index 3f765ed01..000000000 --- a/docs/python-sdk-docs/julep/api/types/users_create_user_request.md +++ /dev/null @@ -1,40 +0,0 @@ -# UsersCreateUserRequest - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / UsersCreateUserRequest - -> Auto-generated documentation for [julep.api.types.users_create_user_request](../../../../../../../julep/api/types/users_create_user_request.py) module. - -- [UsersCreateUserRequest](#userscreateuserrequest) - - [UsersCreateUserRequest](#userscreateuserrequest-1) - -## UsersCreateUserRequest - -[Show source in users_create_user_request.py:11](../../../../../../../julep/api/types/users_create_user_request.py#L11) - -Payload for creating a user (and associated documents) - -#### Signature - -```python -class UsersCreateUserRequest(pydantic_v1.BaseModel): ... -``` - -### UsersCreateUserRequest().dict - -[Show source in users_create_user_request.py:35](../../../../../../../julep/api/types/users_create_user_request.py#L35) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### UsersCreateUserRequest().json - -[Show source in users_create_user_request.py:27](../../../../../../../julep/api/types/users_create_user_request.py#L27) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/users_route_list_request_direction.md b/docs/python-sdk-docs/julep/api/types/users_route_list_request_direction.md deleted file mode 100644 index 977ec383d..000000000 --- a/docs/python-sdk-docs/julep/api/types/users_route_list_request_direction.md +++ /dev/null @@ -1,6 +0,0 @@ -# Users Route List Request Direction - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Users Route List Request Direction - -> Auto-generated documentation for [julep.api.types.users_route_list_request_direction](../../../../../../../julep/api/types/users_route_list_request_direction.py) module. -- [Users Route List Request Direction](#users-route-list-request-direction) diff --git a/docs/python-sdk-docs/julep/api/types/users_route_list_request_sort_by.md b/docs/python-sdk-docs/julep/api/types/users_route_list_request_sort_by.md deleted file mode 100644 index a155de328..000000000 --- a/docs/python-sdk-docs/julep/api/types/users_route_list_request_sort_by.md +++ /dev/null @@ -1,6 +0,0 @@ -# Users Route List Request Sort By - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / Users Route List Request Sort By - -> Auto-generated documentation for [julep.api.types.users_route_list_request_sort_by](../../../../../../../julep/api/types/users_route_list_request_sort_by.py) module. -- [Users Route List Request Sort By](#users-route-list-request-sort-by) diff --git a/docs/python-sdk-docs/julep/api/types/users_route_list_response.md b/docs/python-sdk-docs/julep/api/types/users_route_list_response.md deleted file mode 100644 index 4baec8697..000000000 --- a/docs/python-sdk-docs/julep/api/types/users_route_list_response.md +++ /dev/null @@ -1,38 +0,0 @@ -# UsersRouteListResponse - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / UsersRouteListResponse - -> Auto-generated documentation for [julep.api.types.users_route_list_response](../../../../../../../julep/api/types/users_route_list_response.py) module. - -- [UsersRouteListResponse](#usersroutelistresponse) - - [UsersRouteListResponse](#usersroutelistresponse-1) - -## UsersRouteListResponse - -[Show source in users_route_list_response.py:11](../../../../../../../julep/api/types/users_route_list_response.py#L11) - -#### Signature - -```python -class UsersRouteListResponse(pydantic_v1.BaseModel): ... -``` - -### UsersRouteListResponse().dict - -[Show source in users_route_list_response.py:22](../../../../../../../julep/api/types/users_route_list_response.py#L22) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### UsersRouteListResponse().json - -[Show source in users_route_list_response.py:14](../../../../../../../julep/api/types/users_route_list_response.py#L14) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/api/types/users_user.md b/docs/python-sdk-docs/julep/api/types/users_user.md deleted file mode 100644 index e83f75d39..000000000 --- a/docs/python-sdk-docs/julep/api/types/users_user.md +++ /dev/null @@ -1,38 +0,0 @@ -# UsersUser - -[Julep Python SDK Index](../../../README.md#julep-python-sdk-index) / [Julep](../../index.md#julep) / [Julep Python Library](../index.md#julep-python-library) / [Types](./index.md#types) / UsersUser - -> Auto-generated documentation for [julep.api.types.users_user](../../../../../../../julep/api/types/users_user.py) module. - -- [UsersUser](#usersuser) - - [UsersUser](#usersuser-1) - -## UsersUser - -[Show source in users_user.py:12](../../../../../../../julep/api/types/users_user.py#L12) - -#### Signature - -```python -class UsersUser(pydantic_v1.BaseModel): ... -``` - -### UsersUser().dict - -[Show source in users_user.py:43](../../../../../../../julep/api/types/users_user.py#L43) - -#### Signature - -```python -def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: ... -``` - -### UsersUser().json - -[Show source in users_user.py:35](../../../../../../../julep/api/types/users_user.py#L35) - -#### Signature - -```python -def json(self, **kwargs: typing.Any) -> str: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/client.md b/docs/python-sdk-docs/julep/client.md deleted file mode 100644 index 589c499ee..000000000 --- a/docs/python-sdk-docs/julep/client.md +++ /dev/null @@ -1,112 +0,0 @@ -# Client - -[Julep Python SDK Index](../README.md#julep-python-sdk-index) / [Julep](./index.md#julep) / Client - -> Auto-generated documentation for [julep.client](../../../../../julep/client.py) module. - -- [Client](#client) - - [AsyncClient](#asyncclient) - - [Client](#client-1) - -## AsyncClient - -[Show source in client.py:158](../../../../../julep/client.py#L158) - -A class representing an asynchronous client for interacting with various managers. - -This class initializes asynchronous managers for agents, users, sessions, documents, memories, -and tools. It requires an API key and a base URL to establish a connection with the backend -service. If these are not explicitly provided, it looks for them in the environment variables. - -#### Attributes - -- `agents` *AsyncAgentsManager* - Manager for handling agent-related interactions. -- `users` *AsyncUsersManager* - Manager for handling user-related interactions. -- `sessions` *AsyncSessionsManager* - Manager for handling session-related interactions. -- `docs` *AsyncDocsManager* - Manager for handling document-related interactions. -- `memories` *AsyncMemoriesManager* - Manager for handling memory-related interactions. -- `tools` *AsyncToolsManager* - Manager for handling tool-related interactions. -- `chat` *AsyncChat* - A chat manager instance for handling chat interactions (based on OpenAI client). -- `completions` *AsyncCompletions* - A manager instance for handling completions (based on OpenAI client). - -#### Raises - -- `AssertionError` - If `api_key` or `base_url` is not provided and also not set as an - environment variable. - -#### Notes - -The `api_key` and `base_url` can either be passed explicitly or set as environment -variables `JULEP_API_KEY` and `JULEP_API_URL`, respectively. - -#### Arguments - -- `api_key` *Optional[str]* - The API key required to authenticate with the service. - Defaults to the value of the `JULEP_API_KEY` environment variable. -- `base_url` *Optional[str]* - The base URL of the API service. - Defaults to the value of the `JULEP_API_URL` environment variable. -- `*args` - Variable length argument list. -- `**kwargs` - Arbitrary keyword arguments. - -#### Signature - -```python -class AsyncClient: - @beartype - def __init__( - self, - api_key: Optional[str] = JULEP_API_KEY, - base_url: Optional[str] = JULEP_API_URL, - *args, - **kwargs - ): ... -``` - - - -## Client - -[Show source in client.py:40](../../../../../julep/client.py#L40) - -A class that encapsulates managers for different aspects of a system and provides an interface for interacting with an API. - -This class initializes and makes use of various manager classes to handle agents, users, sessions, documents, memories, and tools. It requires an API key and a base URL to initialize the API client that the managers will use. - -Attributes: - agents (AgentsManager): A manager instance for handling agents. - users (UsersManager): A manager instance for handling users. - sessions (SessionsManager): A manager instance for handling sessions. - docs (DocsManager): A manager instance for handling documents. - memories (MemoriesManager): A manager instance for handling memories. - tools (ToolsManager): A manager instance for handling tools. - chat (Chat): A chat manager instance for handling chat interactions (based on OpenAI client). - completions (Completions): A manager instance for handling completions (based on OpenAI client). - -Args: - api_key (Optional[str]): The API key needed to authenticate with the API. Defaults to the JULEP_API_KEY environment variable. - base_url (Optional[str]): The base URL for the API endpoints. Defaults to the JULEP_API_URL environment variable. - *args: Variable length argument list. - **kwargs: Arbitrary keyword arguments. - -Raises: - AssertionError: If either `api_key` or `base_url` is not provided and not set as an environment variable. - -Note: - `beartype` decorator is expected to ensure type checking on the parameters during runtime. The constants `JULEP_API_KEY` and `JULEP_API_URL` should be predefined and represent default values for the API key and base URL, respectively, which can be overridden by providing a value at instantiation. - -#### Signature - -```python -class Client: - @beartype - def __init__( - self, - api_key: Optional[str] = JULEP_API_KEY, - base_url: Optional[str] = JULEP_API_URL, - timeout: int = 300, - additional_headers: Dict[str, str] = {}, - _httpx_client: Optional[httpx.Client] = None, - *args, - **kwargs - ): ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/env.md b/docs/python-sdk-docs/julep/env.md deleted file mode 100644 index b0a6fe385..000000000 --- a/docs/python-sdk-docs/julep/env.md +++ /dev/null @@ -1,14 +0,0 @@ -# Env - -[Julep Python SDK Index](../README.md#julep-python-sdk-index) / [Julep](./index.md#julep) / Env - -> Auto-generated documentation for [julep.env](../../../../../julep/env.py) module. - -#### Attributes - -- `env` - Initialize the environment variable handler.: Env() - -- `JULEP_API_KEY`: `Optional[str]` - Optional environment variable for the Julep API key. Defaults to None if not set.: env.str('JULEP_API_KEY', None) - -- `JULEP_API_URL`: `Optional[str]` - Optional environment variable for the Julep API URL. Defaults to the Julep API's default environment URL if not set.: env.str('JULEP_API_URL', JulepApiEnvironment.DEFAULT.value) -- [Env](#env) diff --git a/docs/python-sdk-docs/julep/index.md b/docs/python-sdk-docs/julep/index.md deleted file mode 100644 index 956edacf9..000000000 --- a/docs/python-sdk-docs/julep/index.md +++ /dev/null @@ -1,16 +0,0 @@ -# Julep - -[Julep Python SDK Index](../README.md#julep-python-sdk-index) / Julep - -> Auto-generated documentation for [julep](../../../../../julep/__init__.py) module. - -- [Julep](#julep) - - [Modules](#modules) - -## Modules - -- [Julep Python Library](api/index.md) -- [Client](./client.md) -- [Env](./env.md) -- [Managers](managers/index.md) -- [Utils](utils/index.md) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/agent.md b/docs/python-sdk-docs/julep/managers/agent.md deleted file mode 100644 index aaf04fd29..000000000 --- a/docs/python-sdk-docs/julep/managers/agent.md +++ /dev/null @@ -1,748 +0,0 @@ -# Agent - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Agent - -> Auto-generated documentation for [julep.managers.agent](../../../../../../julep/managers/agent.py) module. - -- [Agent](#agent) - - [AgentCreateArgs](#agentcreateargs) - - [AgentUpdateArgs](#agentupdateargs) - - [AgentsManager](#agentsmanager) - - [AsyncAgentsManager](#asyncagentsmanager) - - [BaseAgentsManager](#baseagentsmanager) - -## AgentCreateArgs - -[Show source in agent.py:41](../../../../../../julep/managers/agent.py#L41) - -#### Signature - -```python -class AgentCreateArgs(TypedDict): ... -``` - - - -## AgentUpdateArgs - -[Show source in agent.py:53](../../../../../../julep/managers/agent.py#L53) - -#### Signature - -```python -class AgentUpdateArgs(TypedDict): ... -``` - - - -## AgentsManager - -[Show source in agent.py:312](../../../../../../julep/managers/agent.py#L312) - -A class for managing agents, inheriting from [BaseAgentsManager](#baseagentsmanager). - -This class provides functionalities to interact with and manage agents, including creating, retrieving, listing, updating, and deleting agents. It utilizes type annotations to ensure type correctness at runtime using the `beartype` decorator. - -#### Methods - -- `get(id` - Union[str, UUID]) -> Agent: - Retrieves an agent by its unique identifier. - -#### Arguments - -id (Union[str, UUID]): The unique identifier of the agent, which can be either a string or a UUID. - -- `name` *str* - The name of the agent. -- `about` *str* - A description of the agent. -- `instructions` *List[str]* - A list of instructions or dictionaries defining instructions. -- `tools` *List[ToolDict], optional* - A list of dictionaries defining tools. Defaults to an empty list. -- `functions` *List[FunctionDefDict], optional* - A list of dictionaries defining functions. Defaults to an empty list. -- `default_settings` *DefaultSettingsDict, optional* - A dictionary of default settings. Defaults to an empty dictionary. -- `model` *ModelName, optional* - The model name to be used. Defaults to 'julep-ai/samantha-1-turbo'. -- `docs` *List[DocDict], optional* - A list of dictionaries defining documentation. Defaults to an empty list. -metadata (Dict[str, Any]) - -- `limit` *Optional[int], optional* - The maximum number of agents to retrieve. Defaults to None, meaning no limit. -- `offset` *Optional[int], optional* - The number of agents to skip (for pagination). Defaults to None. - -agent_id (Union[str, UUID]): The unique identifier of the agent to be deleted. - -- `update(*,` *agent_id* - Union[str, UUID], about: Optional[str]=None, instructions: Optional[List[str]]=None, name: Optional[str]=None, model: Optional[str]=None, default_settings: Optional[DefaultSettingsDict]=None) -> ResourceUpdatedResponse: - Updates an existing agent with new details. - -agent_id (Union[str, UUID]): The unique identifier of the agent to be updated. -- `about` *Optional[str], optional* - A new description of the agent. Defaults to None (no change). -- `instructions` *Optional[List[str]], optional* - A new list of instructions or dictionaries defining instructions. Defaults to None (no change). -- `name` *Optional[str], optional* - A new name for the agent. Defaults to None (no change). -- `model` *Optional[str], optional* - A new model name to be used. Defaults to None (no change). -- `default_settings` *Optional[DefaultSettingsDict], optional* - A new dictionary of default settings. Defaults to None (no change). -metadata (Dict[str, Any]) - -#### Returns - -- `Agent` - The agent with the corresponding identifier. - -- `create(*,` *name* - str, about: str, instructions: List[str], tools: List[ToolDict]=[], functions: List[FunctionDefDict]=[], default_settings: DefaultSettingsDict={}, model: ModelName='julep-ai/samantha-1-turbo', docs: List[DocDict]=[]) -> ResourceCreatedResponse: - Creates a new agent with the provided details. - -- `ResourceCreatedResponse` - The response indicating the resource (agent) was successfully created. - -- `list(*,` *limit* - Optional[int]=None, offset: Optional[int]=None) -> List[Agent]: - Lists all agents with pagination support. - -- `List[Agent]` - A list of agents, considering the pagination parameters. - -- `delete(agent_id` - Union[str, UUID]): - Deletes an agent by its unique identifier. - -- `ResourceUpdatedResponse` - The response indicating the resource (agent) was successfully updated. - -#### Signature - -```python -class AgentsManager(BaseAgentsManager): ... -``` - -#### See also - -- [BaseAgentsManager](#baseagentsmanager) - -### AgentsManager().create - -[Show source in agent.py:394](../../../../../../julep/managers/agent.py#L394) - -Creates a new resource with the specified details. - -#### Arguments - -- `name` *str* - The name of the resource. -- `about` *str* - A description of the resource. -- `instructions` *List[str]* - A list of instructions or dictionaries with instruction details. -- `tools` *List[ToolDict], optional* - A list of dictionaries with tool details. Defaults to an empty list. -- `functions` *List[FunctionDefDict], optional* - A list of dictionaries with function definition details. Defaults to an empty list. -- `default_settings` *DefaultSettingsDict, optional* - A dictionary with default settings. Defaults to an empty dictionary. -- `model` *ModelName, optional* - The name of the model to use. Defaults to 'julep-ai/samantha-1-turbo'. -- `docs` *List[DocDict], optional* - A list of dictionaries with documentation details. Defaults to an empty list. -metadata (Dict[str, Any]) - -#### Returns - -- `Agent` - An instance of the Agent with the specified details - -#### Notes - -This function is decorated with `@beartype`, which will perform runtime type checking on the arguments. - -#### Signature - -```python -@beartype -@rewrap_in_class(Agent) -def create(self, **kwargs: AgentCreateArgs) -> Agent: ... -``` - -#### See also - -- [AgentCreateArgs](#agentcreateargs) - -### AgentsManager().delete - -[Show source in agent.py:453](../../../../../../julep/managers/agent.py#L453) - -Delete the agent with the specified ID. - -Args: - agent_id (Union[str, UUID]): The identifier of the agent to be deleted. - -Returns: - The return type depends on the implementation of the `_delete` method. This will typically be `None` - if the deletion is successful, or an error may be raised if the deletion fails. - -Note: - The `@beartype` decorator is used to enforce type checking of the `agent_id` parameter. - -#### Signature - -```python -@beartype -def delete(self, agent_id: Union[str, UUID]): ... -``` - -### AgentsManager().get - -[Show source in agent.py:377](../../../../../../julep/managers/agent.py#L377) - -Retrieve an Agent object by its identifier. - -#### Arguments - -id (Union[str, UUID]): The unique identifier of the Agent to be retrieved. - -#### Returns - -- `Agent` - An instance of the Agent with the specified ID. - -#### Raises - -- `BeartypeException` - If the type of `id` is neither a string nor a UUID. -Any exception raised by the `_get` method. - -#### Signature - -```python -@beartype -def get(self, id: Union[str, UUID]) -> Agent: ... -``` - -### AgentsManager().list - -[Show source in agent.py:420](../../../../../../julep/managers/agent.py#L420) - -List the Agent objects, possibly with pagination. - -#### Arguments - -- `limit` *Optional[int], optional* - The maximum number of Agent objects to return. - Defaults to None, meaning no limit is applied. -- `offset` *Optional[int], optional* - The number of initial Agent objects to skip before - starting to collect the return list. Defaults to None, - meaning no offset is applied. - -#### Returns - -- `List[Agent]` - A list of Agent objects. - -#### Raises - -- `BeartypeDecorHintPepParamViolation` - If the function is called with incorrect types - for the `limit` or `offset` parameters. - -#### Signature - -```python -@beartype -def list( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[Agent]: ... -``` - -### AgentsManager().update - -[Show source in agent.py:470](../../../../../../julep/managers/agent.py#L470) - -Update the properties of a resource. - -This function updates various attributes of an existing resource based on the provided keyword arguments. All updates are optional and are applied only if the corresponding argument is given. - -#### Arguments - -agent_id (Union[str, UUID]): The identifier of the agent, either as a string or a UUID object. -- `about` *Optional[str], optional* - A brief description of the agent. Defaults to None. -- `instructions` *Optional[List[str]], optional* - A list of instructions or instruction dictionaries to update the agent with. Defaults to None. -- `name` *Optional[str], optional* - The new name to assign to the agent. Defaults to None. -- `model` *Optional[str], optional* - The model identifier to associate with the agent. Defaults to None. -- `default_settings` *Optional[DefaultSettingsDict], optional* - A dictionary of default settings to apply to the agent. Defaults to None. -metadata (Dict[str, Any]) -- `overwrite` *bool, optional* - Whether to overwrite the existing agent settings. Defaults to False. - -#### Returns - -- `ResourceUpdatedResponse` - An object representing the response to the update request. - -#### Notes - -This method is decorated with `beartype`, which means it enforces type annotations at runtime. - -#### Signature - -```python -@beartype -@rewrap_in_class(Agent) -def update(self, agent_id: Union[str, UUID], **kwargs: AgentUpdateArgs) -> Agent: ... -``` - -#### See also - -- [AgentUpdateArgs](#agentupdateargs) - - - -## AsyncAgentsManager - -[Show source in agent.py:499](../../../../../../julep/managers/agent.py#L499) - -A class for managing asynchronous agent operations. - -This class provides asynchronous methods for creating, retrieving, updating, -listing, and deleting agents. It is a subclass of BaseAgentsManager, which -defines the underlying functionality and structure that this class utilizes. - -#### Attributes - -None explicitly listed, as they are inherited from the [BaseAgentsManager](#baseagentsmanager) class. - -#### Methods - -get: - Retrieves a single agent by its ID. - -#### Arguments - -id (Union[UUID, str]): The unique identifier of the agent to retrieve. - -- `name` *str* - The name of the agent to create. -- `about` *str* - A description of the agent. -- `instructions` *List[str]* - The instructions for operating the agent. -- `tools` *List[ToolDict], optional* - An optional list of tools for the agent. -- `functions` *List[FunctionDefDict], optional* - An optional list of functions the agent can perform. -- `default_settings` *DefaultSettingsDict, optional* - Optional default settings for the agent. -- `model` *ModelName, optional* - The model name to associate with the agent, defaults to 'julep-ai/samantha-1-turbo'. -- `docs` *List[DocDict], optional* - An optional list of documents associated with the agent. -metadata (Dict[str, Any]) - -- `limit` *Optional[int], optional* - The maximum number of agents to retrieve. -- `offset` *Optional[int], optional* - The number of agents to skip before starting to collect the results. - -agent_id (Union[str, UUID]): The unique identifier of the agent to delete. - -agent_id (Union[str, UUID]): The unique identifier of the agent to update. -- `about` *Optional[str], optional* - An optional new description for the agent. -- `instructions` *Optional[List[str]], optional* - Optional new instructions for the agent. -- `name` *Optional[str], optional* - An optional new name for the agent. -- `model` *Optional[str], optional* - Optional new model associated with the agent. -- `default_settings` *Optional[DefaultSettingsDict], optional* - Optional new default settings for the agent. -metadata (Dict[str, Any]) - -#### Returns - -- `Agent` - The requested agent. - -create: - Creates a new agent with the provided specifications. - -- `ResourceCreatedResponse` - A response indicating the agent was created successfully. - -list: - Asynchronously lists agents with optional pagination and returns an awaitable object. - -- `List[Agent]` - A list of agents. - -delete: - Asynchronously deletes an agent by its ID and returns an awaitable object. - -The response from the delete operation (specific return type may vary). - -update: - Asynchronously updates the specified fields of an agent by its ID and returns an awaitable object. - -- `ResourceUpdatedResponse` - A response indicating the agent was updated successfully. - -#### Signature - -```python -class AsyncAgentsManager(BaseAgentsManager): ... -``` - -#### See also - -- [BaseAgentsManager](#baseagentsmanager) - -### AsyncAgentsManager().create - -[Show source in agent.py:591](../../../../../../julep/managers/agent.py#L591) - -Create a new resource asynchronously with specified details. - -This function is decorated with `beartype` to ensure that arguments conform to specified types. - -#### Arguments - -- `name` *str* - The name of the resource to create. -- `about` *str* - Information or description about the resource. -- `instructions` *List[str]* - A list of strings or dictionaries detailing the instructions for the resource. -- `tools` *List[ToolDict], optional* - A list of dictionaries representing the tools associated with the resource. Defaults to an empty list. -- `functions` *List[FunctionDefDict], optional* - A list of dictionaries defining functions that can be performed with the resource. Defaults to an empty list. -- `default_settings` *DefaultSettingsDict, optional* - A dictionary with default settings for the resource. Defaults to an empty dictionary. -- `model` *ModelName, optional* - The model identifier to use for the resource. Defaults to 'julep-ai/samantha-1-turbo'. -- `docs` *List[DocDict], optional* - A list of dictionaries containing documentation for the resource. Defaults to an empty list. -metadata (Dict[str, Any]) - -#### Returns - -- `Agent` - An instance of the Agent with the specified details - -#### Raises - -The exceptions that may be raised are not specified in the signature and depend on the implementation of the _create method. - -#### Signature - -```python -@beartype -@rewrap_in_class(Agent) -async def create(self, **kwargs: AgentCreateArgs) -> Agent: ... -``` - -#### See also - -- [AgentCreateArgs](#agentcreateargs) - -### AsyncAgentsManager().delete - -[Show source in agent.py:650](../../../../../../julep/managers/agent.py#L650) - -Asynchronously deletes an agent given its identifier. - -This function is decorated with @beartype to ensure type checking of the input argument at runtime. - -#### Arguments - -agent_id (Union[str, UUID]): The identifier of the agent to be deleted. Can be a string or a UUID object. - -#### Returns - -The result of the asynchronous deletion operation, which is implementation-dependent. - -#### Signature - -```python -@beartype -async def delete(self, agent_id: Union[str, UUID]): ... -``` - -### AsyncAgentsManager().get - -[Show source in agent.py:572](../../../../../../julep/managers/agent.py#L572) - -Asynchronously retrieve an Agent object by its ID. - -The `id` parameter can be either a UUID or a string representation of a UUID. - -#### Arguments - -id (Union[UUID, str]): The unique identifier of the Agent to retrieve. - -#### Returns - -- `Agent` - The Agent object associated with the given id. - -#### Raises - -- `Beartype` *exceptions* - If the input id does not conform to the specified types. -- `Other` *exceptions* - Depending on the implementation of the `_get` method. - -#### Signature - -```python -@beartype -async def get(self, id: Union[UUID, str]) -> Agent: ... -``` - -### AsyncAgentsManager().list - -[Show source in agent.py:619](../../../../../../julep/managers/agent.py#L619) - -Asynchronously lists agents with optional limit and offset. - -This method wraps the call to a private method '_list_items' which performs the actual listing -of agent items. It uses the 'beartype' decorator for runtime type checking. - -#### Arguments - -- `limit` *Optional[int], optional* - The maximum number of agent items to return. Defaults to None, which means no limit. -- `offset` *Optional[int], optional* - The offset from where to start the listing. Defaults to None, which means start from the beginning. - -#### Returns - -- `List[Agent]` - A list of agent items collected based on the provided 'limit' and 'offset' parameters. - -#### Signature - -```python -@beartype -async def list( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[Agent]: ... -``` - -### AsyncAgentsManager().update - -[Show source in agent.py:665](../../../../../../julep/managers/agent.py#L665) - -Asynchronously update an agent's details. - -This function is decorated with `beartype` to enforce the type checking of parameters. It updates the properties of the agent identified by `agent_id`. - -#### Arguments - -agent_id (Union[str, UUID]): Unique identifier for the agent. It can be a string or a UUID object. -- `about` *Optional[str]* - Additional information about the agent. Default is None. -- `instructions` *Optional[List[str]]* - A list of instructions or instruction dictionaries. Default is None. -- `name` *Optional[str]* - The name of the agent. Default is None. -- `model` *Optional[str]* - The model identifier or name. Default is None. -- `default_settings` *Optional[DefaultSettingsDict]* - Dictionary with default settings for the agent. Default is None. -metadata (Dict[str, Any]) -- `overwrite` *bool* - Whether to overwrite the existing agent settings. Default is False. - -#### Returns - -- `ResourceUpdatedResponse` - An object containing the details of the update response. - -#### Signature - -```python -@beartype -@rewrap_in_class(Agent) -async def update( - self, agent_id: Union[str, UUID], **kwargs: AgentUpdateArgs -) -> Agent: ... -``` - -#### See also - -- [AgentUpdateArgs](#agentupdateargs) - - - -## BaseAgentsManager - -[Show source in agent.py:63](../../../../../../julep/managers/agent.py#L63) - -A class responsible for managing agent entities. - -This manager handles CRUD operations for agents including retrieving, creating, listing, deleting, and updating agents using an API client. - -#### Attributes - -- `api_client` *ApiClientType* - The client responsible for API interactions. - -#### Methods - -- `_get(self,` *id* - Union[str, UUID]) -> Union[Agent, Awaitable[Agent]]: - Retrieves a single agent by its UUID. - -#### Arguments - -id (Union[str, UUID]): The UUID of the agent to retrieve. -- `name` *str* - The name of the new agent. -- `about` *str* - Description about the new agent. -- `instructions` *List[str]* - List of instructions or instruction dictionaries for the new agent. -- `tools` *List[ToolDict], optional* - List of tool dictionaries. Defaults to an empty list. -- `functions` *List[FunctionDefDict], optional* - List of function definition dictionaries. Defaults to an empty list. -- `default_settings` *DefaultSettingsDict, optional* - Dictionary of default settings for the new agent. Defaults to an empty dictionary. -- `model` *ModelName, optional* - The model name for the new agent. Defaults to 'julep-ai/samantha-1-turbo'. -- `docs` *List[DocDict], optional* - List of document dictionaries for the new agent. Defaults to an empty list. -metadata (Dict[str, Any], optional): Dictionary of metadata for the new agent. Defaults to an empty dictionary. -- `limit` *Optional[int], optional* - The maximum number of agents to list. Defaults to None. -- `offset` *Optional[int], optional* - The number of agents to skip (for pagination). Defaults to None. -metadata_filter (Dict[str, Any], optional): Filters for querying agents based on metadata. Defaults to an empty dictionary. -agent_id (Union[str, UUID]): The UUID of the agent to delete. -agent_id (Union[str, UUID]): The UUID of the agent to update. -- `about` *Optional[str], optional* - The new description about the agent. -- `instructions` *Optional[List[str]], optional* - The new list of instructions or instruction dictionaries. -- `name` *Optional[str], optional* - The new name for the agent. -- `model` *Optional[str], optional* - The new model name for the agent. -- `default_settings` *Optional[DefaultSettingsDict], optional* - The new default settings dictionary for the agent. -metadata (Dict[str, Any]) - -#### Returns - -The agent object or an awaitable that resolves to the agent object. - -- `_create(self,` *name* - str, about: str, instructions: List[str], tools: List[ToolDict] = [], functions: List[FunctionDefDict] = [], default_settings: DefaultSettingsDict = {}, model: ModelName = 'julep-ai/samantha-1-turbo', docs: List[DocDict] = [], metadata: Dict[str, Any] = {}) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: - Creates an agent with the given specifications. - The response indicating creation or an awaitable that resolves to the creation response. - -- `_list_items(self,` *limit* - Optional[int] = None, offset: Optional[int] = None, metadata_filter: Dict[str, Any] = {}) -> Union[ListAgentsResponse, Awaitable[ListAgentsResponse]]: - Lists agents with pagination support and optional metadata filtering. - The list of agents or an awaitable that resolves to the list of agents. - -- `_delete(self,` *agent_id* - Union[str, UUID]) -> Union[None, Awaitable[None]]: - Deletes an agent with the specified UUID. - None or an awaitable that resolves to None. - -- `_update(self,` *agent_id* - Union[str, UUID], about: Optional[str] = None, instructions: Optional[List[str]] = None, name: Optional[str] = None, model: Optional[str] = None, default_settings: Optional[DefaultSettingsDict] = None, metadata: Dict[str, Any] = {}) -> Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: - Updates the specified fields of an agent. - The response indicating successful update or an awaitable that resolves to the update response. - -#### Signature - -```python -class BaseAgentsManager(BaseManager): ... -``` - -### BaseAgentsManager()._create - -[Show source in agent.py:141](../../../../../../julep/managers/agent.py#L141) - -Create a new agent with the specified configuration. - -#### Arguments - -- `name` *str* - Name of the agent. -- `about` *str* - Information about the agent. -- `instructions` *List[str]* - List of instructions as either string or dictionaries for the agent. -- `tools` *List[ToolDict], optional* - List of tool configurations for the agent. Defaults to an empty list. -- `functions` *List[FunctionDefDict], optional* - List of function definitions for the agent. Defaults to an empty list. -- `default_settings` *DefaultSettingsDict, optional* - Dictionary of default settings for the agent. Defaults to an empty dict. -- `model` *ModelName, optional* - The model name identifier. Defaults to 'julep-ai/samantha-1-turbo'. -- `docs` *List[DocDict], optional* - List of document configurations for the agent. Defaults to an empty list. -metadata (Dict[str, Any]) - -#### Returns - -- `Union[ResourceCreatedResponse,` *Awaitable[ResourceCreatedResponse]]* - The response object indicating the resource has been created or a future of the response object if the creation is being awaited. - -#### Raises - -- `AssertionError` - If both functions and tools are provided. - -#### Notes - -The `_create` method is meant to be used internally and should be considered private. -It assumes the input data for instructions, tools, and docs will have the proper format, -and items in the 'instructions' list will be converted to Instruction instances. - -#### Signature - -```python -def _create( - self, - name: str, - about: str = "", - instructions: List[str] = [], - tools: List[ToolDict] = [], - functions: List[FunctionDefDict] = [], - default_settings: DefaultSettingsDict = {}, - model: ModelName = "julep-ai/samantha-1-turbo", - docs: List[DocDict] = [], - metadata: Dict[str, Any] = {}, -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - -#### See also - -- [ModelName](#modelname) - -### BaseAgentsManager()._delete - -[Show source in agent.py:235](../../../../../../julep/managers/agent.py#L235) - -Delete an agent by its ID. - -#### Arguments - -agent_id (Union[str, UUID]): The UUID v4 of the agent to be deleted. - -#### Returns - -- `Union[None,` *Awaitable[None]]* - A future that resolves to None if the -operation is asynchronous, or None immediately if the operation is -synchronous. - -#### Raises - -- `AssertionError` - If `agent_id` is not a valid UUID v4. - -#### Signature - -```python -def _delete(self, agent_id: Union[str, UUID]) -> Union[None, Awaitable[None]]: ... -``` - -### BaseAgentsManager()._get - -[Show source in agent.py:125](../../../../../../julep/managers/agent.py#L125) - -Retrieves an agent based on the provided identifier. - -#### Arguments - -id (Union[str, UUID]): The identifier of the agent, which can be a string or UUID object. - -#### Returns - -- `Union[Agent,` *Awaitable[Agent]]* - The agent object or an awaitable yielding the agent object, depending on the API client. - -#### Raises - -- `AssertionError` - If the provided id is not a valid UUID v4. - -#### Signature - -```python -def _get(self, id: Union[str, UUID]) -> Union[Agent, Awaitable[Agent]]: ... -``` - -### BaseAgentsManager()._list_items - -[Show source in agent.py:211](../../../../../../julep/managers/agent.py#L211) - -Lists items with optional pagination. - -This method wraps the `list_agents` API call and includes optional limit and offset parameters for pagination. - -Args: - limit (Optional[int], optional): The maximum number of items to return. Defaults to None, which means no limit. - offset (Optional[int], optional): The index of the first item to return. Defaults to None, which means no offset. - -Returns: - Union[ListAgentsResponse, Awaitable[ListAgentsResponse]]: A ListAgentsResponse object, or an awaitable that resolves to a ListAgentsResponse object. - -#### Signature - -```python -def _list_items( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: str = "{}", -) -> Union[ListAgentsResponse, Awaitable[ListAgentsResponse]]: ... -``` - -### BaseAgentsManager()._update - -[Show source in agent.py:253](../../../../../../julep/managers/agent.py#L253) - -Update the agent's properties. - -Args: - agent_id (Union[str, UUID]): The unique identifier for the agent, which can be a string or UUID object. - about (Optional[str], optional): A brief description of the agent. Defaults to None. - instructions (Optional[List[str]], optional): A list of either strings or instruction dictionaries that will be converted into Instruction objects. Defaults to None. - name (Optional[str], optional): The name of the agent. Defaults to None. - model (Optional[str], optional): The model identifier for the agent. Defaults to None. - default_settings (Optional[DefaultSettingsDict], optional): A dictionary of default settings to apply to the agent. Defaults to None. - metadata (Dict[str, Any]) - overwrite (bool, optional): Whether to overwrite the existing agent settings. Defaults to False. - -Returns: - Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: An object representing the response for the resource updated, which can also be an awaitable in asynchronous contexts. - -Raises: - AssertionError: If the provided agent_id is not validated by the is_valid_uuid4 function. - -Note: - This method asserts that the agent_id must be a valid UUID v4. The instructions and default_settings, if provided, are converted into their respective object types before making the update API call. - -#### Signature - -```python -def _update( - self, - agent_id: Union[str, UUID], - about: Optional[str] = NotSet, - instructions: List[str] = NotSet, - name: Optional[str] = NotSet, - model: Optional[str] = NotSet, - default_settings: Optional[DefaultSettingsDict] = NotSet, - metadata: Dict[str, Any] = NotSet, - overwrite: bool = False, -) -> Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/base.md b/docs/python-sdk-docs/julep/managers/base.md deleted file mode 100644 index 242176b4f..000000000 --- a/docs/python-sdk-docs/julep/managers/base.md +++ /dev/null @@ -1,27 +0,0 @@ -# Base - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Base - -> Auto-generated documentation for [julep.managers.base](../../../../../../julep/managers/base.py) module. - -- [Base](#base) - - [BaseManager](#basemanager) - -## BaseManager - -[Show source in base.py:7](../../../../../../julep/managers/base.py#L7) - -A class that serves as a base manager for working with different API clients. This class is responsible for abstracting the complexities of interacting with various API clients, providing a unified interface for higher-level components. - -Attributes: - api_client (Union[JulepApi, AsyncJulepApi]): A client instance for communicating with an API. This attribute is essential for enabling the class to perform API operations, whether they are synchronous or asynchronous. - -Args: - api_client (Union[JulepApi, AsyncJulepApi]): The API client that is used for making API calls. It is crucial for the operation of this class, allowing it to interact with the API effectively. - -#### Signature - -```python -class BaseManager: - def __init__(self, api_client: Union[JulepApi, AsyncJulepApi]): ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/doc.md b/docs/python-sdk-docs/julep/managers/doc.md deleted file mode 100644 index d25537089..000000000 --- a/docs/python-sdk-docs/julep/managers/doc.md +++ /dev/null @@ -1,501 +0,0 @@ -# Doc - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Doc - -> Auto-generated documentation for [julep.managers.doc](../../../../../../julep/managers/doc.py) module. - -- [Doc](#doc) - - [AsyncDocsManager](#asyncdocsmanager) - - [BaseDocsManager](#basedocsmanager) - - [DocsCreateArgs](#docscreateargs) - - [DocsManager](#docsmanager) - -## AsyncDocsManager - -[Show source in doc.py:342](../../../../../../julep/managers/doc.py#L342) - -A class for managing asynchronous operations on documents. - -Inherits from BaseDocsManager to provide async document retrieval, creation, and deletion. - -#### Attributes - -Inherited from BaseDocsManager. - -#### Methods - -async list(self, *, agent_id: Optional[Union[str, UUID]] = None, user_id: Optional[Union[str, UUID]] = None, limit: Optional[int] = None, offset: Optional[int] = None) -> List[Doc]: - Asynchronously get a list of documents, with optional filtering based on agent_id, user_id, and pagination options limit and offset. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The agent's identifier to filter documents. -user_id (Optional[Union[str, UUID]]): The user's identifier to filter documents. -- `limit` *Optional[int]* - The maximum number of documents to return. -- `offset` *Optional[int]* - The offset from where to start returning documents. -agent_id (Optional[Union[str, UUID]]): The agent's identifier associated with the document. -user_id (Optional[Union[str, UUID]]): The user's identifier associated with the document. -- `doc` *DocDict* - The document data to be created. -doc_id (Union[str, UUID]): The unique identifier of the document to be deleted. -agent_id (Optional[Union[str, UUID]]): The agent's identifier associated with the document, if applicable. -user_id (Optional[Union[str, UUID]]): The user's identifier associated with the document, if applicable. - -#### Returns - -- `List[Doc]` - A list of documents. - -async create(self, *, agent_id: Optional[Union[str, UUID]] = None, user_id: Optional[Union[str, UUID]] = None, doc: DocDict) -> ResourceCreatedResponse: - Asynchronously create a new document with the given document information, and optional agent_id and user_id. - - `ResourceCreatedResponse` - A response object indicating successful creation of the document. - -async delete(self, *, doc_id: Union[str, UUID], agent_id: Optional[Union[str, UUID]] = None, user_id: Optional[Union[str, UUID]] = None): - Asynchronously delete a document by its id, with optional association to a specific agent_id or user_id. - -#### Notes - -The `@beartype` decorator is being used to perform runtime type checking on the function arguments. - -#### Signature - -```python -class AsyncDocsManager(BaseDocsManager): ... -``` - -#### See also - -- [BaseDocsManager](#basedocsmanager) - -### AsyncDocsManager().create - -[Show source in doc.py:423](../../../../../../julep/managers/doc.py#L423) - -Create a new resource asynchronously. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The ID of the agent. Default is None. -user_id (Optional[Union[str, UUID]]): The ID of the user. Default is None. -- `doc` *DocDict* - A dictionary containing document data. - -#### Returns - -- `ResourceCreatedResponse` - An object representing the response for a resource created. - -#### Raises - -- `BeartypeException` - If any of the input arguments do not match their expected types. This is implicitly raised due to the use of the beartype decorator. - -#### Signature - -```python -@beartype -@rewrap_in_class(Doc) -async def create(self, **kwargs: DocsCreateArgs) -> Doc: ... -``` - -#### See also - -- [DocsCreateArgs](#docscreateargs) - -### AsyncDocsManager().delete - -[Show source in doc.py:443](../../../../../../julep/managers/doc.py#L443) - -Asynchronously deletes a document by its ID. - -This function is a coroutine and must be awaited. - -#### Arguments - -doc_id (Union[str, UUID]): The unique identifier of the document to delete. -agent_id (Optional[Union[str, UUID]]): The unique identifier of the agent, if any. -user_id (Optional[Union[str, UUID]]): The unique identifier of the user, if any. - -#### Returns - -- `Coroutine[Any]` - A coroutine that, when awaited, returns the result of the document deletion process. - -#### Notes - -The `@beartype` decorator is used to enforce type checking on the function arguments. - -#### Signature - -```python -@beartype -async def delete( - self, - doc_id: Union[str, UUID], - agent_id: Optional[Union[str, UUID]] = None, - user_id: Optional[Union[str, UUID]] = None, -): ... -``` - -### AsyncDocsManager().list - -[Show source in doc.py:382](../../../../../../julep/managers/doc.py#L382) - -Asynchronously get a list of documents. - -This function fetches documents based on the provided filtering criteria such as `agent_id`, `user_id`, -and supports pagination through `limit` and `offset`. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The ID of the agent to filter documents by. Default is None. -user_id (Optional[Union[str, UUID]]): The ID of the user to filter documents by. Default is None. -- `limit` *Optional[int]* - The maximum number of documents to return. Default is None. -- `offset` *Optional[int]* - The offset from where to start the document retrieval. Default is None. - -#### Returns - -- `List[Doc]` - A list of document objects. - -#### Notes - -The `@beartype` decorator is used to ensure that arguments conform to the expected types. - -#### Raises - -- `BeartypeDecorHintPepParamException` - If any of the parameters do not adhere to the declared types. - -#### Signature - -```python -@beartype -async def list( - self, - agent_id: Optional[Union[str, UUID]] = None, - user_id: Optional[Union[str, UUID]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[Doc]: ... -``` - - - -## BaseDocsManager - -[Show source in doc.py:30](../../../../../../julep/managers/doc.py#L30) - -Manages documents for agents or users by providing internal methods to list, create, and delete documents. - -The class utilizes an API client to interact with a back-end service that handles the document management operations. - -Typical usage example: - -docs_manager = BaseDocsManager(api_client) -agent_docs = docs_manager._list(agent_id="some-agent-uuid") -user_docs = docs_manager._list(user_id="some-user-uuid") -created_doc = docs_manager._create(agent_id="some-agent-uuid", doc={"key": "value"}) -docs_manager._delete(user_id="some-user-uuid", doc_id="some-doc-uuid") - -#### Attributes - -- `api_client` - A client instance used to make API calls to the document management system. - -#### Methods - -- `_list(agent_id` - Optional[Union[str, UUID]], user_id: Optional[Union[str, UUID]], - - `limit` - Optional[int]=None, offset: Optional[int]=None) -> Union[GetAgentDocsResponse, Awaitable[GetAgentDocsResponse]] - Retrieves docsrmation for either an agent or user. - Must provide exactly one valid UUID v4 for either `agent_id` or `user_id`. - -- `_create(agent_id` - Optional[Union[str, UUID]], user_id: Optional[Union[str, UUID]], doc: DocDict) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]] - Creates docsrmation for either an agent or user. - Must provide exactly one valid UUID v4 for either `agent_id` or `user_id`. - The `doc` parameter contains the document information to be created. - -- `_delete(agent_id` - Optional[Union[str, UUID]], user_id: Optional[Union[str, UUID]], doc_id: Union[str, UUID]): - Deletes docsrmation for either an agent or user. - Must provide exactly one valid UUID v4 for either `agent_id` or `user_id`, and a valid UUID for `doc_id`. - -#### Signature - -```python -class BaseDocsManager(BaseManager): ... -``` - -### BaseDocsManager()._create - -[Show source in doc.py:115](../../../../../../julep/managers/doc.py#L115) - -Create a new resource with docsrmation for either an agent or a user, but not both. - -This function asserts that exactly one of `agent_id` or `user_id` is provided and is a valid UUID v4. -It then creates the appropriate docsrmation based on which ID was provided. - -Args: - agent_id (Optional[Union[str, UUID]]): The UUID of the agent or None. - user_id (Optional[Union[str, UUID]]): The UUID of the user or None. - doc (DocDict): A dictionary containing the document data for the resource being created. - metadata (Dict[str, Any]): Optional metadata for the document. Defaults to an empty dictionary. - -Returns: - Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: The response after creating the resource, which could be immediate or an awaitable for asynchronous execution. - -Raises: - AssertionError: If both `agent_id` and `user_id` are provided, neither are provided, or if the provided IDs are not valid UUID v4 strings. - -Note: - One and only one of `agent_id` or `user_id` must be provided and must be a valid UUID v4. - The `DocDict` type should be a dictionary compatible with the `CreateDoc` schema. - -#### Signature - -```python -def _create( - self, - doc: DocDict, - agent_id: Optional[Union[str, UUID]] = None, - user_id: Optional[Union[str, UUID]] = None, - metadata: Dict[str, Any] = {}, -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - -### BaseDocsManager()._delete - -[Show source in doc.py:164](../../../../../../julep/managers/doc.py#L164) - -Delete docs based on either an agent_id or a user_id. - -This method selects the appropriate deletion operation (agent or user) based on whether an `agent_id` or `user_id` is provided. Only one of these ID types should be valid and provided. - -Args: - agent_id (Optional[Union[str, UUID]]): A unique identifier of an agent. Either a string or UUID v4, but not both `agent_id` and `user_id`. - user_id (Optional[Union[str, UUID]]): A unique identifier of a user. Either a string or UUID v4, but not both `agent_id` and `user_id`. - doc_id (Union[str, UUID]): A unique identifier for docsrmation to be deleted, as a string or UUID v4. - -Returns: - The result of the API deletion request. This can be the response object from the client's delete operation. - -Raises: - AssertionError: If both `agent_id` and `user_id` are provided, neither are provided, or if the provided IDs are not valid UUID v4 strings. - Other exceptions related to the `api_client` operations could potentially be raised and depend on its implementation. - -#### Signature - -```python -def _delete( - self, - agent_id: Optional[Union[str, UUID]], - user_id: Optional[Union[str, UUID]], - doc_id: Union[str, UUID], -) -> Union[ResourceDeletedResponse, Awaitable[ResourceDeletedResponse]]: ... -``` - -### BaseDocsManager()._list - -[Show source in doc.py:63](../../../../../../julep/managers/doc.py#L63) - -Retrieve docsrmation for an agent or user based on their ID. - -This internal method fetches docsrmation for either an agent or a user, -but not both. If both or neither `agent_id` and `user_id` are provided, it will -assert an error. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The UUID v4 of the agent for whom docs is requested, exclusive with `user_id`. -user_id (Optional[Union[str, UUID]]): The UUID v4 of the user for whom docs is requested, exclusive with `agent_id`. -- `limit` *Optional[int]* - The maximum number of records to return. Defaults to None. -- `offset` *Optional[int]* - The number of records to skip before starting to collect the response set. Defaults to None. -metadata_filter (Dict[str, Any]): A dictionary used for filtering documents based on metadata criteria. Defaults to an empty dictionary. - -#### Returns - -- `Union[GetAgentDocsResponse,` *Awaitable[GetAgentDocsResponse]]* - The response object containing docsrmation about the agent or user, or a promise of such an object if the call is asynchronous. - -#### Raises - -- `AssertionError` - If both `agent_id` and `user_id` are provided or neither is provided, or if the provided IDs are not valid UUID v4. - -#### Signature - -```python -def _list( - self, - agent_id: Optional[Union[str, UUID]], - user_id: Optional[Union[str, UUID]], - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> Union[GetAgentDocsResponse, Awaitable[GetAgentDocsResponse]]: ... -``` - - - -## DocsCreateArgs - -[Show source in doc.py:23](../../../../../../julep/managers/doc.py#L23) - -#### Signature - -```python -class DocsCreateArgs(TypedDict): ... -``` - - - -## DocsManager - -[Show source in doc.py:208](../../../../../../julep/managers/doc.py#L208) - -A class responsible for managing documents. - -This class provides methods for retrieving, creating, and deleting documents. It uses a base document management system to perform operations. - -#### Attributes - -None specific to this class, as all are inherited from BaseDocsManager. - -#### Methods - -get: - Retrieves a list of documents according to specified filters. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The agent's identifier to filter documents by, if any. -user_id (Optional[Union[str, UUID]]): The user's identifier to filter documents by, if any. -- `limit` *Optional[int]* - The maximum number of documents to be retrieved. -- `offset` *Optional[int]* - The number of documents to skip before starting to collect the document output list. - -agent_id (Optional[Union[str, UUID]]): The agent's identifier associated with the document, if any. -user_id (Optional[Union[str, UUID]]): The user's identifier associated with the document, if any. -- `doc` *DocDict* - The document to be created represented as a dictionary of document metadata. - -doc_id (Union[str, UUID]): The identifier of the document to be deleted. -agent_id (Optional[Union[str, UUID]]): The agent's identifier associated with the document, if any. -user_id (Optional[Union[str, UUID]]): The user's identifier associated with the document, if any. - -#### Returns - -- `List[Doc]` - A list of documents matching the provided filters. - -create: - Creates a new document. - -- `ResourceCreatedResponse` - An object representing the creation response, typically containing the ID of the created document. - -delete: - Deletes a document by its document identifier. - -None, but the method may raise exceptions on failure. - -#### Signature - -```python -class DocsManager(BaseDocsManager): ... -``` - -#### See also - -- [BaseDocsManager](#basedocsmanager) - -### DocsManager().create - -[Show source in doc.py:288](../../../../../../julep/managers/doc.py#L288) - -Create a new resource with the specified document. - -This method wraps a call to an internal '_create' method, passing along any -specified agent or user identifiers, along with the document data. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The agent identifier associated with the resource creation. -user_id (Optional[Union[str, UUID]]): The user identifier associated with the resource creation. -- `doc` *DocDict* - A dictionary containing the document data. - -#### Returns - -- `ResourceCreatedResponse` - An object representing the response for the resource creation operation. - -#### Raises - -- `BeartypeException` - If any input parameters are of incorrect type, due to type enforcement by the @beartype decorator. - -#### Signature - -```python -@beartype -@rewrap_in_class(Doc) -def create(self, **kwargs: DocsCreateArgs) -> Doc: ... -``` - -#### See also - -- [DocsCreateArgs](#docscreateargs) - -### DocsManager().delete - -[Show source in doc.py:311](../../../../../../julep/managers/doc.py#L311) - -Deletes a document by its identifier. - -This function wraps the internal _delete method, providing an interface to delete documents by their ID while optionally specifying the agent ID and user ID. - -#### Arguments - -doc_id (Union[str, UUID]): The unique identifier of the document to be deleted. -agent_id (Optional[Union[str, UUID]]): The unique identifier of the agent performing the delete operation, if any. -user_id (Optional[Union[str, UUID]]): The unique identifier of the user performing the delete operation, if any. - -#### Returns - -The return type depends on the implementation of the `_delete` method. - -#### Raises - -The exceptions raised depend on the implementation of the `_delete` method. - -#### Signature - -```python -@beartype -def delete( - self, - doc_id: Union[str, UUID], - agent_id: Optional[Union[str, UUID]] = None, - user_id: Optional[Union[str, UUID]] = None, -): ... -``` - -### DocsManager().list - -[Show source in doc.py:253](../../../../../../julep/managers/doc.py#L253) - -Retrieve a list of documents based on specified criteria. - -This method supports filtering the documents by agent_id or user_id, and also supports pagination through the limit and offset parameters. - -#### Arguments - -agent_id (Optional[Union[str, UUID]]): The unique identifier for the agent. Can be a string or a UUID object. Default is None, which means no filtering by agent_id is applied. -user_id (Optional[Union[str, UUID]]): The unique identifier for the user. Can be a string or a UUID object. Default is None, which means no filtering by user_id is applied. -- `limit` *Optional[int]* - The maximum number of documents to retrieve. Default is None, which means no limit is applied. -- `offset` *Optional[int]* - The number of documents to skip before starting to collect the document list. Default is None, which means no offset is applied. - -#### Returns - -- `List[Doc]` - A list of documents that match the provided criteria. - -#### Notes - -The `@beartype` decorator is used to ensure that the input arguments are of the expected types. If an argument is passed that does not match the expected type, a type error will be raised. - -#### Signature - -```python -@beartype -def list( - self, - agent_id: Optional[Union[str, UUID]] = None, - user_id: Optional[Union[str, UUID]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[Doc]: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/index.md b/docs/python-sdk-docs/julep/managers/index.md deleted file mode 100644 index 94775758f..000000000 --- a/docs/python-sdk-docs/julep/managers/index.md +++ /dev/null @@ -1,20 +0,0 @@ -# Managers - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / Managers - -> Auto-generated documentation for [julep.managers](../../../../../../julep/managers/__init__.py) module. - -- [Managers](#managers) - - [Modules](#modules) - -## Modules - -- [Agent](./agent.md) -- [Base](./base.md) -- [Doc](./doc.md) -- [Memory](./memory.md) -- [Session](./session.md) -- [Task](./task.md) -- [Tool](./tool.md) -- [Types](./types.md) -- [User](./user.md) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/memory.md b/docs/python-sdk-docs/julep/managers/memory.md deleted file mode 100644 index 11b7d9dc8..000000000 --- a/docs/python-sdk-docs/julep/managers/memory.md +++ /dev/null @@ -1,219 +0,0 @@ -# Memory - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Memory - -> Auto-generated documentation for [julep.managers.memory](../../../../../../julep/managers/memory.py) module. - -- [Memory](#memory) - - [AsyncMemoriesManager](#asyncmemoriesmanager) - - [BaseMemoriesManager](#basememoriesmanager) - - [MemoriesManager](#memoriesmanager) - -## AsyncMemoriesManager - -[Show source in memory.py:134](../../../../../../julep/managers/memory.py#L134) - -Asynchronously lists memories based on various filter parameters. - -Args: - agent_id (Union[str, UUID]): The unique identifier of the agent. - query (str): The search query string to filter memories. - types (Optional[Union[str, List[str]]], optional): The types of memories to filter by. Defaults to None. - user_id (Optional[str], optional): The unique identifier of the user. Defaults to None. - limit (Optional[int], optional): The maximum number of memories to return. Defaults to None. - offset (Optional[int], optional): The number of memories to skip before starting to collect the result set. Defaults to None. - -Returns: - List[Memory]: A list of Memory objects that match the given filters. - -Raises: - ValidationError: If the input validation fails. - DatabaseError: If there is a problem accessing the database. - -#### Signature - -```python -class AsyncMemoriesManager(BaseMemoriesManager): ... -``` - -#### See also - -- [BaseMemoriesManager](#basememoriesmanager) - -### AsyncMemoriesManager().list - -[Show source in memory.py:154](../../../../../../julep/managers/memory.py#L154) - -Asynchronously list memories based on query parameters. - -#### Arguments - -agent_id (Union[str, UUID]): The ID of the agent to list memories for. -- `query` *str* - The query string to filter memories. -types (Optional[Union[str, List[str]]], optional): The types of memories to retrieve. Defaults to None. -- `user_id` *Optional[str], optional* - The ID of the user to list memories for. Defaults to None. -- `limit` *Optional[int], optional* - The maximum number of memories to return. Defaults to None. -- `offset` *Optional[int], optional* - The offset to start listing memories from. Defaults to None. - -#### Returns - -- `List[Memory]` - A list of Memory objects that match the query. - -#### Notes - -`@beartype` decorator is used for runtime type checking. - -#### Signature - -```python -@beartype -async def list( - self, - agent_id: Union[str, UUID], - query: str, - types: Optional[Union[str, List[str]]] = None, - user_id: Optional[str] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[Memory]: ... -``` - - - -## BaseMemoriesManager - -[Show source in memory.py:16](../../../../../../julep/managers/memory.py#L16) - -A base manager class for handling agent memories. - -This manager provides an interface to interact with agent memories, facilitating -operations such as listing and retrieving memories based on various criteria. - -Methods: - _list(agent_id, query, types=None, user_id=None, limit=None, offset=None): - Retrieves a list of memories for a given agent. - -Args: - agent_id (str): A valid UUID v4 string identifying the agent. - query (str): The query string to search memories. - types (Optional[Union[str, List[str]]]): The type(s) of memories to retrieve. - user_id (Optional[str]): The user identifier associated with the memories. - limit (Optional[int]): The maximum number of memories to retrieve. - offset (Optional[int]): The number of initial memories to skip in the result set. - -Returns: - Union[GetAgentMemoriesResponse, Awaitable[GetAgentMemoriesResponse]]: - A synchronous or asynchronous response object containing the list of agent memories. - -Raises: - AssertionError: If `agent_id` is not a valid UUID v4. - -#### Signature - -```python -class BaseMemoriesManager(BaseManager): ... -``` - -### BaseMemoriesManager()._list - -[Show source in memory.py:43](../../../../../../julep/managers/memory.py#L43) - -List memories from a given agent based on a query and further filtering options. - -#### Arguments - -- `agent_id` *str* - A valid UUID v4 representing the agent ID. -- `query` *str* - Query string to filter memories. -types (Optional[Union[str, List[str]]], optional): The types of memories to filter. -- `user_id` *Optional[str], optional* - The user ID to filter memories. -- `limit` *Optional[int], optional* - The maximum number of memories to return. -- `offset` *Optional[int], optional* - The number of memories to skip before starting to collect the result set. - -#### Returns - -- `Union[GetAgentMemoriesResponse,` *Awaitable[GetAgentMemoriesResponse]]* - Returns a synchronous or asynchronous response with the agent memories. - -#### Raises - -- `AssertionError` - If `agent_id` is not a valid UUID v4. - -#### Signature - -```python -def _list( - self, - agent_id: str, - query: str, - types: Optional[Union[str, List[str]]] = None, - user_id: Optional[str] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> Union[GetAgentMemoriesResponse, Awaitable[GetAgentMemoriesResponse]]: ... -``` - - - -## MemoriesManager - -[Show source in memory.py:80](../../../../../../julep/managers/memory.py#L80) - -A class for managing memory entities associated with agents. - -Inherits from [BaseMemoriesManager](#basememoriesmanager) and extends its functionality to specifically -manage and retrieve memory entities for agents based on query parameters. - -Attributes: - Inherited from [BaseMemoriesManager](#basememoriesmanager). - -Methods: - list: Retrieves a list of memory entities based on query parameters. - -#### Signature - -```python -class MemoriesManager(BaseMemoriesManager): ... -``` - -#### See also - -- [BaseMemoriesManager](#basememoriesmanager) - -### MemoriesManager().list - -[Show source in memory.py:94](../../../../../../julep/managers/memory.py#L94) - -List memories meeting specified criteria. - -This function fetches a list of Memory objects based on various filters and parameters such as agent_id, query, types, user_id, limit, and offset. - -#### Arguments - -agent_id (Union[str, UUID]): The unique identifier for the agent. -- `query` *str* - The search term used to filter memories. -types (Optional[Union[str, List[str]]], optional): The types of memories to retrieve. Can be a single type as a string or a list of types. Default is None, which does not filter by type. -- `user_id` *Optional[str], optional* - The unique identifier for the user. If provided, only memories associated with this user will be retrieved. Default is None. -- `limit` *Optional[int], optional* - The maximum number of memories to return. Default is None, which means no limit. -- `offset` *Optional[int], optional* - The number of memories to skip before starting to return the results. Default is None. - -#### Returns - -- `List[Memory]` - A list of Memory objects that match the given criteria. - -#### Notes - -The `@beartype` decorator is used to ensure that arguments conform to the expected types at runtime. - -#### Signature - -```python -@beartype -def list( - self, - agent_id: Union[str, UUID], - query: str, - types: Optional[Union[str, List[str]]] = None, - user_id: Optional[str] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[Memory]: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/session.md b/docs/python-sdk-docs/julep/managers/session.md deleted file mode 100644 index 96a40a6de..000000000 --- a/docs/python-sdk-docs/julep/managers/session.md +++ /dev/null @@ -1,1226 +0,0 @@ -# Session - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Session - -> Auto-generated documentation for [julep.managers.session](../../../../../../julep/managers/session.py) module. - -- [Session](#session) - - [AsyncSessionsManager](#asyncsessionsmanager) - - [BaseSessionsManager](#basesessionsmanager) - - [SessionCreateArgs](#sessioncreateargs) - - [SessionUpdateArgs](#sessionupdateargs) - - [SessionsManager](#sessionsmanager) - -## AsyncSessionsManager - -[Show source in session.py:800](../../../../../../julep/managers/session.py#L800) - -A class for managing asynchronous sessions. - -This class handles operations related to creating, retrieving, updating, -deleting, and interacting with sessions asynchronously. It extends the -functionality of BaseSessionsManager with asynchronous behavior. - -#### Attributes - -Inherits attributes from the BaseSessionsManager class. - -#### Methods - -- `async` *get(id* - Union[UUID, str]) -> Session: - Retrieves a session by its ID. - -async create(*, user_id: Union[str, UUID], agent_id: Union[str, UUID], situation: Optional[str]=None) -> ResourceCreatedResponse: - Creates a new session with the specified user and agent IDs, and an optional situation. - -async list(*, limit: Optional[int]=None, offset: Optional[int]=None) -> List[Session]: - Lists sessions with an optional limit and offset for pagination. - -- `async` *delete(session_id* - Union[str, UUID]): - Deletes a session by its ID. - -async update(*, session_id: Union[str, UUID], situation: str) -> ResourceUpdatedResponse: - Updates the situation for a session by its ID. - -async chat(*, session_id: str, messages: List[InputChatMlMessage], tools: Optional[List[Tool]]=None, tool_choice: Optional[ToolChoiceOption]=None, frequency_penalty: Optional[float]=None, length_penalty: Optional[float]=None, logit_bias: Optional[Dict[str, Optional[int]]]=None, max_tokens: Optional[int]=None, presence_penalty: Optional[float]=None, repetition_penalty: Optional[float]=None, response_format: Optional[ChatSettingsResponseFormat]=None, seed: Optional[int]=None, stop: Optional[ChatSettingsStop]=None, stream: Optional[bool]=None, temperature: Optional[float]=None, top_p: Optional[float]=None, recall: Optional[bool]=None, remember: Optional[bool]=None) -> ChatResponse: - Initiates a chat session with given messages and optional parameters for the chat behavior and output. - -async suggestions(*, session_id: Union[str, UUID], limit: Optional[int]=None, offset: Optional[int]=None) -> List[Suggestion]: - Retrieves suggestions related to a session optionally limited and paginated. - -async history(*, session_id: Union[str, UUID], limit: Optional[int]=None, offset: Optional[int]=None) -> List[ChatMlMessage]: - Retrieves the history of messages in a session, optionally limited and paginated. - -- `async` *delete_history(session_id* - Union[str, UUID]) -> None: - -#### Notes - -The `@beartype` decorator is used for runtime type checking of the arguments. - -Additional methods may be provided by the BaseSessionsManager. - -#### Signature - -```python -class AsyncSessionsManager(BaseSessionsManager): ... -``` - -#### See also - -- [BaseSessionsManager](#basesessionsmanager) - -### AsyncSessionsManager().chat - -[Show source in session.py:975](../../../../../../julep/managers/session.py#L975) - -Sends a message in an asynchronous chat session and retrieves the response. - -This method leverages the messaging interface with various options to adjust the behavior of the chat bot. - -#### Arguments - -- `session_id` *str* - The unique identifier for the chat session. -- `messages` *List[InputChatMlMessage]* - A list of chat messages in the session's context. -- `tools` *Optional[List[Tool]]* - A list of tools, if provided, to enhance the chat capabilities. -- `tool_choice` *Optional[ToolChoiceOption]* - A preference for tool selection during the chat. -- `frequency_penalty` *Optional[float]* - Adjusts how much the model should avoid repeating the same line of thought. -- `length_penalty` *Optional[float]* - Penalizes longer responses. -logit_bias (Optional[Dict[str, Optional[int]]]): Biases the model's prediction towards or away from certain tokens. -- `max_tokens` *Optional[int]* - The maximum length of the generated response. -- `presence_penalty` *Optional[float]* - Adjusts how much the model should consider new concepts. -- `repetition_penalty` *Optional[float]* - Adjusts how much the model should avoid repeating previous input. -- `response_format` *Optional[ChatSettingsResponseFormat]* - The desired format for the response. -- `seed` *Optional[int]* - A seed used to initialize the model's random number generator. -- `stop` *Optional[ChatSettingsStop]* - Tokens that signify the end of the response. -- `stream` *Optional[bool]* - Whether or not to stream the responses. -- `temperature` *Optional[float]* - Controls randomness in the response generation. -- `top_p` *Optional[float]* - Controls diversity via nucleus sampling. -- `recall` *Optional[bool]* - If true, the model recalls previous messages within the same session. -- `remember` *Optional[bool]* - If true, the model incorporates the context from the previous conversations in the session. - -#### Returns - -- `ChatResponse` - The response from the chat bot, encapsulating the result of the chat action. - -#### Notes - -This function is decorated with `@beartype`, which enforces type annotations at runtime. - -#### Examples - -```python ->>> response = await chat(...) ->>> print(response) -``` - -#### Signature - -```python -@beartype -async def chat( - self, - session_id: str, - messages: List[Union[InputChatMlMessageDict, InputChatMlMessage]], - tools: Optional[List[Union[ToolDict, Tool]]] = None, - tool_choice: Optional[ToolChoiceOption] = None, - frequency_penalty: Optional[float] = None, - length_penalty: Optional[float] = None, - logit_bias: Optional[Dict[str, Optional[int]]] = None, - max_tokens: Optional[int] = None, - presence_penalty: Optional[float] = None, - repetition_penalty: Optional[float] = None, - response_format: Optional[ - Union[ChatSettingsResponseFormatDict, ChatSettingsResponseFormat] - ] = None, - seed: Optional[int] = None, - stop: Optional[ChatSettingsStop] = None, - stream: Optional[bool] = None, - temperature: Optional[float] = None, - top_p: Optional[float] = None, - recall: Optional[bool] = None, - remember: Optional[bool] = None, -) -> ChatResponse: ... -``` - -### AsyncSessionsManager().create - -[Show source in session.py:872](../../../../../../julep/managers/session.py#L872) - -Asynchronously create a resource with the specified user and agent identifiers. - -This function wraps an internal _create method and is decorated with `beartype` for run-time type checking. - -#### Arguments - -user_id (Union[str, UUID]): Unique identifier for the user. -agent_id (Union[str, UUID]): Unique identifier for the agent. -- `situation` *Optional[str], optional* - Description of the situation, defaults to None. - -#### Returns - -- `Session` - The created Session object - -#### Raises - -- `BeartypeException` - If any of the input arguments do not match their expected types. -Any exception raised by the internal _create method. - -#### Signature - -```python -@beartype -@rewrap_in_class(Session) -async def create(self, **kwargs: SessionCreateArgs) -> Session: ... -``` - -#### See also - -- [SessionCreateArgs](#sessioncreateargs) - -### AsyncSessionsManager().delete - -[Show source in session.py:925](../../../../../../julep/managers/session.py#L925) - -Asynchronously delete a session given its ID. - -#### Arguments - -session_id (Union[str, UUID]): The unique identifier for the session, which can - be either a string or a UUID. - -#### Returns - -Coroutine[Any, Any, Any]: A coroutine that, when awaited, completes the deletion process. - -#### Raises - -The decorators or the body of the '_delete' method may define specific exceptions that -could be raised during the execution. Generally, include any exceptions that are raised -by the '_delete' method or by the 'beartype' decorator in this section. - -#### Signature - -```python -@beartype -async def delete(self, session_id: Union[str, UUID]): ... -``` - -### AsyncSessionsManager().delete_history - -[Show source in session.py:1120](../../../../../../julep/managers/session.py#L1120) - -Delete the history of a session asynchronously. - -#### Arguments - -session_id (Union[str, UUID]): The unique identifier for the session. - -#### Returns - -- `None` - The result of the delete operation. - -#### Raises - -- `AssertionError` - If the `session_id` is not a valid UUID v4. - -#### Signature - -```python -@beartype -async def delete_history(self, session_id: Union[str, UUID]) -> None: ... -``` - -### AsyncSessionsManager().get - -[Show source in session.py:844](../../../../../../julep/managers/session.py#L844) - -Asynchronously get a Session object by its identifier. - -This method retrieves a Session based on the provided `id`. It uses an underlying -asynchronous '_get' method to perform the operation. - -#### Arguments - -id (Union[UUID, str]): The unique identifier of the Session to retrieve. It can be - either a string representation or a UUID object. - -#### Returns - -- `Session` - The retrieved Session object associated with the given id. - -#### Raises - -- `TypeError` - If the `id` is not of type UUID or str. -- `ValueError` - If the `id` is not a valid UUID or an invalid string is provided. -- `AnyExceptionRaisedBy_get` - Descriptive name of specific exceptions that '_get' - might raise, if any. Replace this with the actual exceptions. - -#### Notes - -The `@beartype` decorator is being used to enforce type checking at runtime. -This ensures that the argument `id` is of the correct type (UUID or str) and -that the return value is a Session object. - -#### Signature - -```python -@beartype -async def get(self, id: Union[UUID, str]) -> Session: ... -``` - -### AsyncSessionsManager().history - -[Show source in session.py:1088](../../../../../../julep/managers/session.py#L1088) - -Retrieve a history of chat messages based on the session ID, with optional limit and offset. - -This function is decorated with 'beartype' for runtime type checking. - -#### Arguments - -session_id (Union[str, UUID]): The unique identifier for the chat session. -- `limit` *Optional[int], optional* - The maximum number of chat messages to return. Defaults to None. -- `offset` *Optional[int], optional* - The number of chat messages to skip before starting to collect the history slice. Defaults to None. - -#### Returns - -- `List[ChatMlMessage]` - A list of chat messages from the history that match the criteria. - -#### Raises - -Any exceptions that may be raised by the underlying '_history' method or 'beartype' decorator. - -#### Signature - -```python -@beartype -async def history( - self, - session_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[ChatMlMessage]: ... -``` - -### AsyncSessionsManager().list - -[Show source in session.py:895](../../../../../../julep/managers/session.py#L895) - -Asynchronously retrieves a list of sessions with optional pagination. - -This method utilizes `_list_items` internally to obtain session data with support for limit and offset parameters. The `beartype` decorator is used to ensure that the function parameters match the expected types. - -#### Arguments - -- `limit` *Optional[int], optional* - The maximum number of sessions to retrieve. Default is None, which retrieves all available sessions. -- `offset` *Optional[int], optional* - The number to skip before starting to collect the response set. Default is None. - -#### Returns - -- `List[Session]` - A list of `Session` objects containing session data. - -#### Signature - -```python -@beartype -async def list( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[Session]: ... -``` - -### AsyncSessionsManager().suggestions - -[Show source in session.py:1056](../../../../../../julep/managers/session.py#L1056) - -Retrieve a list of suggestions asynchronously. - -This function asynchronously fetches suggestions based on the provided session ID, with optional limit and offset parameters for pagination. - -#### Arguments - -session_id (Union[str, UUID]): The session identifier for which suggestions are to be retrieved. -- `limit` *Optional[int]* - The maximum number of suggestions to return. Defaults to None, which means no limit. -- `offset` *Optional[int]* - The number of suggestions to skip before starting to return results. Defaults to None, which means no offset. - -#### Returns - -- `List[Suggestion]` - A list of Suggestion objects. - -#### Raises - -- `Exception` - Raises an exception if the underlying _suggestions call fails. - -#### Signature - -```python -@beartype -async def suggestions( - self, - session_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[Suggestion]: ... -``` - -### AsyncSessionsManager().update - -[Show source in session.py:944](../../../../../../julep/managers/session.py#L944) - -Asynchronously update a resource with the given situation. - -This method wraps the private `_update` method which performs the actual update -operation asynchronously. - -#### Arguments - -session_id (Union[str, UUID]): The session ID of the resource to update. - It can be either a `str` or a `UUID` object. -- `situation` *str* - Description of the situation to update the resource with. - -#### Returns - -- `Session` - The updated Session object - -#### Notes - -This function is decorated with `@beartype`, which will perform runtime type -checking on the arguments. - -#### Raises - -- `BeartypeCallHintParamViolation` - If the `session_id` or `situation` - arguments do not match their annotated types. - -#### Signature - -```python -@beartype -@rewrap_in_class(Session) -async def update(self, **kwargs: SessionUpdateArgs) -> Session: ... -``` - -#### See also - -- [SessionUpdateArgs](#sessionupdateargs) - - - -## BaseSessionsManager - -[Show source in session.py:57](../../../../../../julep/managers/session.py#L57) - -A class to manage sessions using base API client methods. - -This manager handles CRUD operations and additional actions on the session data, -such as chatting and retrieving history or suggestions. - -#### Attributes - -- `api_client` - The client used for communicating with an API. - -#### Methods - -_get(id): - Retrieve a specific session by its identifier. - -#### Arguments - -id (Union[str, UUID]): The unique identifier for the session. - -agent_id (Union[str, UUID]): The unique identifier for the agent. -user_id (Optional[Union[str, UUID]]): The unique identifier for the user. -- `situation` *Optional[str]* - An optional description of the situation for the session. - -- `limit` *Optional[int]* - The limit on the number of items to be retrieved. -- `offset` *Optional[int]* - The number of items to be skipped before starting to collect the result set. - -session_id (Union[str, UUID]): The unique identifier for the session to be deleted. - -session_id (Union[str, UUID]): The unique identifier for the session to be updated. -- `situation` *str* - The new situation description for the session. - -- `session_id` *str* - The unique identifier for the session. -- `messages` *List[InputChatMlMessage]* - The list of input chat messages to be sent. -- `tools` *Optional[List[Tool]]* - ... -- `tool_choice` *Optional[ToolChoiceOption]* - ... -- `...` - Other optional parameters for chat settings and modifiers. - -session_id (Union[str, UUID]): The unique identifier for the session. -- `limit` *Optional[int]* - The limit on the number of suggestions to be retrieved. -- `offset` *Optional[int]* - The number of suggestions to be skipped before starting to collect the result set. - -session_id (Union[str, UUID]): The unique identifier for the session. -- `limit` *Optional[int]* - The limit on the number of history entries to be retrieved. -- `offset` *Optional[int]* - The number of history entries to be skipped before starting to collect the result set. - -session_id (Union[str, UUID]): The unique identifier for the session. - -#### Returns - -- `Union[Session,` *Awaitable[Session]]* - The session object or an awaitable yielding it. - -- `Union[ResourceCreatedResponse,` *Awaitable[ResourceCreatedResponse]]* - The response for the created session or an awaitable yielding it. - -_list_items(limit, offset): - List multiple session items with optional pagination. - -- `Union[ListSessionsResponse,` *Awaitable[ListSessionsResponse]]* - The list of sessions or an awaitable yielding it. - -_delete(session_id): - Delete a session by its identifier. - -- `Union[None,` *Awaitable[None]]* - None or an awaitable yielding None if the operation is successful. - -_update(session_id, situation): - Update the situation for an existing session. - -- `Union[ResourceUpdatedResponse,` *Awaitable[ResourceUpdatedResponse]]* - The response for the updated session or an awaitable yielding it. - -_chat(session_id, messages, ...): - Send chat messages and get responses during a session. - -- `Union[ChatResponse,` *Awaitable[ChatResponse]]* - The chat response for the session or an awaitable yielding it. - -_suggestions(session_id, limit, offset): - Get suggestions for a session. - -- `Union[GetSuggestionsResponse,` *Awaitable[GetSuggestionsResponse]]* - The suggestions response for the session or an awaitable yielding it. - -_history(session_id, limit, offset): - Get the history for a session. - -- `Union[GetHistoryResponse,` *Awaitable[GetHistoryResponse]]* - The history response for the session or an awaitable yielding it. - -_delete_history(session_id): - Delete the history of a session. - -- `Union[None,` *Awaitable[None]]* - None or an awaitable yielding None if the operation is successful. - -#### Raises - -- `ValueError` - If the `id` is not a valid UUID. -- `NetworkError` - If there is an issue communicating with the API. - -_create(user_id, agent_id, situation): - Create a new session with specified user and agent identifiers. - -#### Signature - -```python -class BaseSessionsManager(BaseManager): ... -``` - -### BaseSessionsManager()._chat - -[Show source in session.py:310](../../../../../../julep/managers/session.py#L310) - -Conducts a chat conversation with an AI model using specific parameters. - -#### Arguments - -- `session_id` *str* - A unique identifier for the chat session. -- `messages` *List[InputChatMlMessage]* - A list of input messages for the AI to respond to. -- `tools` *Optional[List[Tool]]* - A list of tools to be used during the chat session. -- `tool_choice` *Optional[ToolChoiceOption]* - A method for choosing which tools to apply. -- `frequency_penalty` *Optional[float]* - A modifier to decrease the likelihood of frequency-based repetitions. -- `length_penalty` *Optional[float]* - A modifier to control the length of the generated responses. -logit_bias (Optional[Dict[str, Optional[int]]]): Adjustments to the likelihood of specific tokens appearing. -- `max_tokens` *Optional[int]* - The maximum number of tokens to generate in the output. -- `presence_penalty` *Optional[float]* - A modifier to control for new concepts' appearance. -- `repetition_penalty` *Optional[float]* - A modifier to discourage repetitive responses. -- `response_format` *Optional[ChatSettingsResponseFormat]* - The format in which the response is to be delivered. -- `seed` *Optional[int]* - An integer to seed the random number generator for reproducibility. -- `stop` *Optional[ChatSettingsStop]* - Tokens at which to stop generating further tokens. -- `stream` *Optional[bool]* - Whether to stream the response or deliver it when it's complete. -- `temperature` *Optional[float]* - A value to control the randomness of the output. -- `top_p` *Optional[float]* - A value to control the nucleus sampling, i.e., the cumulative probability cutoff. -- `recall` *Optional[bool]* - A flag to control the recall capability of the AI model. -- `remember` *Optional[bool]* - A flag to control the persistence of the chat history in the AI's memory. - -#### Returns - -- `Union[ChatResponse,` *Awaitable[ChatResponse]]* - The response from the AI given the input messages and parameters. This could be a synchronous `ChatResponse` object or an asynchronous `Awaitable[ChatResponse]` if the `stream` parameter is True. - -#### Notes - -The precise types of some arguments, like `Tool`, `ToolChoiceOption`, `ChatSettingsResponseFormat`, and `ChatSettingsStop`, are not defined within the given context. It's assumed that these types have been defined elsewhere in the code base. - -#### Raises - -It is not specified what exceptions this function might raise. Typically, one would expect potential exceptions to be associated with the underlying API client's `chat` method failure modes, such as network issues, invalid parameters, etc. - -#### Signature - -```python -def _chat( - self, - session_id: str, - messages: List[Union[InputChatMlMessageDict, InputChatMlMessage]], - tools: Optional[List[Union[ToolDict, Tool]]] = None, - tool_choice: Optional[ToolChoiceOption] = None, - frequency_penalty: Optional[float] = None, - length_penalty: Optional[float] = None, - logit_bias: Optional[Dict[str, Optional[int]]] = None, - max_tokens: Optional[int] = None, - presence_penalty: Optional[float] = None, - repetition_penalty: Optional[float] = None, - response_format: Optional[ - Union[ChatSettingsResponseFormatDict, ChatSettingsResponseFormat] - ] = None, - seed: Optional[int] = None, - stop: Optional[ChatSettingsStop] = None, - stream: Optional[bool] = None, - temperature: Optional[float] = None, - top_p: Optional[float] = None, - recall: Optional[bool] = None, - remember: Optional[bool] = None, -) -> Union[ChatResponse, Awaitable[ChatResponse]]: ... -``` - -### BaseSessionsManager()._create - -[Show source in session.py:182](../../../../../../julep/managers/session.py#L182) - -Creates a session for a specified user and agent. - -This internal method is responsible for creating a session using the API client. It validates that both the user and agent IDs are valid UUID v4 strings before proceeding with session creation. - -#### Arguments - -agent_id (Union[str, UUID]): The agent's identifier which could be a string or a UUID object. -user_id (Optional[Union[str, UUID]]): The user's identifier which could be a string or a UUID object. -- `situation` *Optional[str], optional* - An optional description of the situation. -metadata (Dict[str, Any]) -- `render_templates` *bool, optional* - Whether to render templates in the metadata. Defaults to False. - -#### Returns - -- `Union[ResourceCreatedResponse,` *Awaitable[ResourceCreatedResponse]]* - The response from the API client upon successful session creation, which can be a synchronous `ResourceCreatedResponse` or an asynchronous `Awaitable` of it. - -#### Raises - -- `AssertionError` - If either `user_id` or `agent_id` is not a valid UUID v4. - -#### Signature - -```python -def _create( - self, - agent_id: Union[str, UUID], - user_id: Optional[Union[str, UUID]] = None, - situation: Optional[str] = None, - metadata: Dict[str, Any] = {}, - render_templates: bool = False, - token_budget: Optional[int] = None, - context_overflow: Optional[str] = None, -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - -### BaseSessionsManager()._delete - -[Show source in session.py:251](../../../../../../julep/managers/session.py#L251) - -Delete a session given its session ID. - -This is an internal method that asserts the provided session_id is a valid UUID v4 -before making the delete request through the API client. - -Args: - session_id (Union[str, UUID]): The session identifier, which should be a valid UUID v4. - -Returns: - Union[None, Awaitable[None]]: The result of the delete operation, which can be either - None or an Awaitable that resolves to None, depending on whether this is a synchronous - or asynchronous call. - -Raises: - AssertionError: If the `session_id` is not a valid UUID v4. - -#### Signature - -```python -def _delete(self, session_id: Union[str, UUID]) -> Union[None, Awaitable[None]]: ... -``` - -### BaseSessionsManager()._delete_history - -[Show source in session.py:444](../../../../../../julep/managers/session.py#L444) - -Delete the history of a session. - -#### Arguments - -session_id (Union[str, UUID]): The unique identifier for the session. - -#### Returns - -- `Union[None,` *Awaitable[None]]* - The result of the delete operation, which can be either -None or an Awaitable that resolves to None, depending on whether this is a synchronous -or asynchronous call. - -#### Raises - -- `AssertionError` - If the `session_id` is not a valid UUID v4. - -#### Signature - -```python -def _delete_history( - self, session_id: Union[str, UUID] -) -> Union[None, Awaitable[None]]: ... -``` - -### BaseSessionsManager()._get - -[Show source in session.py:166](../../../../../../julep/managers/session.py#L166) - -Get a session by its ID. - -#### Arguments - -id (Union[str, UUID]): A string or UUID representing the session ID. - -#### Returns - -- `Union[Session,` *Awaitable[Session]]* - The session object associated with the given ID, which can be either a `Session` instance or an `Awaitable` that resolves to a `Session`. - -#### Raises - -- `AssertionError` - If the id is not a valid UUID v4. - -#### Signature - -```python -def _get(self, id: Union[str, UUID]) -> Union[Session, Awaitable[Session]]: ... -``` - -### BaseSessionsManager()._history - -[Show source in session.py:416](../../../../../../julep/managers/session.py#L416) - -Retrieve a session's history with optional pagination controls. - -Args: - session_id (Union[str, UUID]): Unique identifier for the session - whose history is being queried. Can be a string or a UUID object. - limit (Optional[int], optional): The maximum number of history - entries to retrieve. Defaults to None, which uses the API's default setting. - offset (Optional[int], optional): The number of initial history - entries to skip. Defaults to None, which means no offset is applied. - -Returns: - Union[GetHistoryResponse, Awaitable[GetHistoryResponse]]: - The history response object, which may be either synchronous or - asynchronous (awaitable), depending on the API client configuration. - -#### Signature - -```python -def _history( - self, - session_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> Union[GetHistoryResponse, Awaitable[GetHistoryResponse]]: ... -``` - -### BaseSessionsManager()._list_items - -[Show source in session.py:226](../../../../../../julep/managers/session.py#L226) - -List items with optional pagination. - -#### Arguments - -- `limit` *Optional[int]* - The maximum number of items to return. Defaults to None. -- `offset` *Optional[int]* - The number of items to skip before starting to collect the result set. Defaults to None. - -#### Returns - -- `Union[ListSessionsResponse,` *Awaitable[ListSessionsResponse]]* - The response object containing the list of items or an awaitable response object if called asynchronously. - -#### Notes - -The '_list_items' function is assumed to be a method of a class that has an 'api_client' attribute capable of listing sessions. - -#### Signature - -```python -def _list_items( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: str = "{}", -) -> Union[ListSessionsResponse, Awaitable[ListSessionsResponse]]: ... -``` - -### BaseSessionsManager()._suggestions - -[Show source in session.py:393](../../../../../../julep/managers/session.py#L393) - -Retrieve a list of suggestions for a given session. - -Args: - session_id (Union[str, UUID]): The ID of the session for which to get suggestions. - limit (Optional[int], optional): The maximum number of suggestions to retrieve. Defaults to None. - offset (Optional[int], optional): The offset from where to start retrieving suggestions. Defaults to None. - -Returns: - Union[GetSuggestionsResponse, Awaitable[GetSuggestionsResponse]]: The response containing the list of suggestions synchronously or asynchronously, depending on the API client. - -#### Signature - -```python -def _suggestions( - self, - session_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> Union[GetSuggestionsResponse, Awaitable[GetSuggestionsResponse]]: ... -``` - -### BaseSessionsManager()._update - -[Show source in session.py:272](../../../../../../julep/managers/session.py#L272) - -Update a session with a given situation. - -#### Arguments - -session_id (Union[str, UUID]): The session identifier, which can be a string-formatted UUID or an actual UUID object. -- `situation` *str* - A string describing the current situation. -- `overwrite` *bool, optional* - Whether to overwrite the existing situation. Defaults to False. - -#### Returns - -- `Union[ResourceUpdatedResponse,` *Awaitable[ResourceUpdatedResponse]]* - The response from the update operation, which can be either synchronous or asynchronous. - -#### Raises - -- `AssertionError` - If `session_id` is not a valid UUID v4. - -#### Signature - -```python -def _update( - self, - session_id: Union[str, UUID], - situation: Optional[str] = None, - metadata: Optional[Dict[str, Any]] = None, - overwrite: bool = False, - token_budget: Optional[int] = None, - context_overflow: Optional[str] = None, -) -> Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: ... -``` - - - -## SessionCreateArgs - -[Show source in session.py:37](../../../../../../julep/managers/session.py#L37) - -#### Signature - -```python -class SessionCreateArgs(TypedDict): ... -``` - - - -## SessionUpdateArgs - -[Show source in session.py:47](../../../../../../julep/managers/session.py#L47) - -#### Signature - -```python -class SessionUpdateArgs(TypedDict): ... -``` - - - -## SessionsManager - -[Show source in session.py:466](../../../../../../julep/managers/session.py#L466) - -A class responsible for managing session interactions. - -This class extends [BaseSessionsManager](#basesessionsmanager) and provides methods to get, create, -list, delete, and update sessions, as well as to initiate a chat within a session, -request suggestions, and access session history. - -#### Methods - -- `get` *(id* - Union[str, UUID]) -> Session: - Retrieves a session by its identifier. - -create ( - *, - - `user_id` - Union[str, UUID], - - `agent_id` - Union[str, UUID], - - `situation` - Optional[str]=None -) -> ResourceCreatedResponse: - Creates a new session given a user ID and an agent ID, and optionally - a description of the situation. - -list ( - *, - - `limit` - Optional[int]=None, - - `offset` - Optional[int]=None -) -> List[Session]: - Lists sessions with optional pagination via limit and offset. - -- `delete` *(session_id* - Union[str, UUID]): - Deletes a session identified by the given session ID. - -update ( - *, - - `session_id` - Union[str, UUID], - - `situation` - str -) -> ResourceUpdatedResponse: - Updates the situation of a specific session by its ID. - -chat ( - *args - see full method signature for detailed arguments -) -> ChatResponse: - Initiates a chat in the given session with messages and various settings, - including tools, penalties, biases, tokens, response format, etc. - -suggestions ( - *, - - `session_id` - Union[str, UUID], - - `limit` - Optional[int]=None, - - `offset` - Optional[int]=None -) -> List[Suggestion]: - Retrieves a list of suggestions for a given session, supported by - optional pagination parameters. - -history ( - *, - - `session_id` - Union[str, UUID], - - `limit` - Optional[int]=None, - - `offset` - Optional[int]=None -) -> List[ChatMlMessage]: - Retrieves the chat history for a given session, supported by - optional pagination parameters. - -- `delete_history` *(session_id* - Union[str, UUID]) -> None: - -Each method is decorated with `@beartype` for runtime type enforcement. - -#### Signature - -```python -class SessionsManager(BaseSessionsManager): ... -``` - -#### See also - -- [BaseSessionsManager](#basesessionsmanager) - -### SessionsManager().chat - -[Show source in session.py:647](../../../../../../julep/managers/session.py#L647) - -Initiate a chat session with the provided inputs and configurations. - -#### Arguments - -- `session_id` *str* - Unique identifier for the chat session. -- `messages` *List[InputChatMlMessage]* - List of messages to send in the chat session. -- `tools` *Optional[List[Tool]], optional* - List of tools to be used in the session. Defaults to None. -- `tool_choice` *Optional[ToolChoiceOption], optional* - The choice of tool to optimize response for. Defaults to None. -- `frequency_penalty` *Optional[float], optional* - Penalty for frequent tokens to control repetition. Defaults to None. -- `length_penalty` *Optional[float], optional* - Penalty for longer responses to control verbosity. Defaults to None. -logit_bias (Optional[Dict[str, Optional[int]]], optional): Bias for or against specific tokens. Defaults to None. -- `max_tokens` *Optional[int], optional* - Maximum number of tokens to generate in the response. Defaults to None. -- `presence_penalty` *Optional[float], optional* - Penalty for new tokens to control topic introduction. Defaults to None. -- `repetition_penalty` *Optional[float], optional* - Penalty to discourage repetition. Defaults to None. -- `response_format` *Optional[ChatSettingsResponseFormat], optional* - Format of the response. Defaults to None. -- `seed` *Optional[int], optional* - Random seed for deterministic responses. Defaults to None. -- `stop` *Optional[ChatSettingsStop], optional* - Sequence at which to stop generating further tokens. Defaults to None. -- `stream` *Optional[bool], optional* - Whether to stream responses or not. Defaults to None. -- `temperature` *Optional[float], optional* - Sampling temperature for randomness in the response. Defaults to None. -- `top_p` *Optional[float], optional* - Nucleus sampling parameter to control diversity. Defaults to None. -- `recall` *Optional[bool], optional* - Whether to allow recalling previous parts of the chat. Defaults to None. -- `remember` *Optional[bool], optional* - Whether to allow the model to remember previous chats. Defaults to None. - -#### Returns - -- `ChatResponse` - The response object after processing chat messages. - -#### Notes - -The 'beartype' decorator is used for runtime type checking. - -#### Signature - -```python -@beartype -def chat( - self, - session_id: str, - messages: List[Union[InputChatMlMessageDict, InputChatMlMessage]], - tools: Optional[List[Union[ToolDict, Tool]]] = None, - tool_choice: Optional[ToolChoiceOption] = None, - frequency_penalty: Optional[float] = None, - length_penalty: Optional[float] = None, - logit_bias: Optional[Dict[str, Optional[int]]] = None, - max_tokens: Optional[int] = None, - presence_penalty: Optional[float] = None, - repetition_penalty: Optional[float] = None, - response_format: Optional[ - Union[ChatSettingsResponseFormatDict, ChatSettingsResponseFormat] - ] = None, - seed: Optional[int] = None, - stop: Optional[ChatSettingsStop] = None, - stream: Optional[bool] = None, - temperature: Optional[float] = None, - top_p: Optional[float] = None, - recall: Optional[bool] = None, - remember: Optional[bool] = None, -) -> ChatResponse: ... -``` - -### SessionsManager().create - -[Show source in session.py:551](../../../../../../julep/managers/session.py#L551) - -Create a new resource with a user ID and an agent ID, optionally including a situation description. - -#### Arguments - -user_id (Union[str, UUID]): The unique identifier for the user. -agent_id (Union[str, UUID]): The unique identifier for the agent. -- `situation` *Optional[str]* - An optional description of the situation. - -#### Returns - -- `Session` - The created Session object. - -#### Raises - -- `BeartypeException` - If the provided `user_id` or `agent_id` do not match the required type. -Any other exception that `_create` might raise. - -#### Signature - -```python -@beartype -@rewrap_in_class(Session) -def create(self, **kwargs: SessionCreateArgs) -> Session: ... -``` - -#### See also - -- [SessionCreateArgs](#sessioncreateargs) - -### SessionsManager().delete - -[Show source in session.py:603](../../../../../../julep/managers/session.py#L603) - -Deletes a session based on its session ID. - -#### Arguments - -session_id (Union[str, UUID]): The session ID to be deleted, which can be a string or a UUID object. - -#### Returns - -The result from the internal `_delete` method call. - -#### Raises - -The specific exceptions that `self._delete` might raise, which should be documented in its docstring. - -#### Signature - -```python -@beartype -def delete(self, session_id: Union[str, UUID]): ... -``` - -### SessionsManager().delete_history - -[Show source in session.py:783](../../../../../../julep/managers/session.py#L783) - -Delete the history of a session. - -#### Arguments - -session_id (Union[str, UUID]): The unique identifier for the session. - -#### Returns - -- `None` - The result of the delete operation. - -#### Raises - -- `AssertionError` - If the `session_id` is not a valid UUID v4. - -#### Signature - -```python -@beartype -def delete_history(self, session_id: Union[str, UUID]) -> None: ... -``` - -### SessionsManager().get - -[Show source in session.py:534](../../../../../../julep/managers/session.py#L534) - -Retrieve a Session object based on a given identifier. - -Args: - id (Union[str, UUID]): The identifier of the session, which can be either a string or a UUID. - -Returns: - Session: The session object associated with the given id. - -Raises: - TypeError: If the id is neither a string nor a UUID. - KeyError: If the session with the given id does not exist. - -#### Signature - -```python -@beartype -def get(self, id: Union[str, UUID]) -> Session: ... -``` - -### SessionsManager().history - -[Show source in session.py:756](../../../../../../julep/managers/session.py#L756) - -Retrieve a history of ChatMl messages for a given session. - -This method uses the private method `_history` to fetch the message history and returns a list of ChatMlMessage objects. - -Args: - session_id (Union[str, UUID]): The session identifier to fetch the chat history for. - limit (Optional[int], optional): The maximum number of messages to return. If None, no limit is applied. Defaults to None. - offset (Optional[int], optional): The offset from where to start fetching messages. If None, no offset is applied. Defaults to None. - -Returns: - List[ChatMlMessage]: A list of ChatMlMessage objects representing the history of messages for the session. - -#### Signature - -```python -@beartype -def history( - self, - session_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[ChatMlMessage]: ... -``` - -### SessionsManager().list - -[Show source in session.py:572](../../../../../../julep/managers/session.py#L572) - -Retrieve a list of Session objects with optional pagination. - -Args: - limit (Optional[int]): The maximum number of Session objects to return. - Defaults to None, which indicates no limit. - offset (Optional[int]): The number of items to skip before starting to return the results. - Defaults to None, which indicates no offset. - -Returns: - List[Session]: A list of Session objects meeting the criteria. - -Raises: - BeartypeException: If the input arguments do not match their annotated types. - -#### Signature - -```python -@beartype -def list( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[Session]: ... -``` - -### SessionsManager().suggestions - -[Show source in session.py:722](../../../../../../julep/managers/session.py#L722) - -Provides a list of suggestion objects based on the given session ID. - -This method retrieves suggestions and is decorated with `beartype` for runtime type -checking of the passed arguments. - -#### Arguments - -session_id (Union[str, UUID]): The ID of the session to retrieve suggestions for. -- `limit` *Optional[int], optional* - The maximum number of suggestions to return. - Defaults to None, which means no limit. -- `offset` *Optional[int], optional* - The number to offset the list of returned - suggestions by. Defaults to None, which means no offset. - -#### Returns - -- `List[Suggestion]` - A list of suggestion objects. - -#### Raises - -Any exceptions that `_suggestions` might raise, for example, if the method is unable -to retrieve suggestions based on the provided session ID. - -#### Signature - -```python -@beartype -def suggestions( - self, - session_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[Suggestion]: ... -``` - -### SessionsManager().update - -[Show source in session.py:619](../../../../../../julep/managers/session.py#L619) - -Updates the state of a resource based on a given situation. - -This function is type-checked using beartype to ensure that the `session_id` parameter -is either a string or a UUID and that the `situation` parameter is a string. It delegates -the actual update process to an internal method '_update'. - -#### Arguments - -session_id (Union[str, UUID]): The session identifier, which can be a UUID or a - string that uniquely identifies the session. -- `situation` *str* - A string that represents the new situation for the resource update. -- `overwrite` *bool, optional* - A flag to indicate whether to overwrite the existing - -#### Returns - -- `Session` - The updated Session object. - -#### Notes - -The `@beartype` decorator is used for runtime type checking of the function arguments. - -#### Signature - -```python -@beartype -@rewrap_in_class(Session) -def update(self, **kwargs: SessionUpdateArgs) -> Session: ... -``` - -#### See also - -- [SessionUpdateArgs](#sessionupdateargs) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/task.md b/docs/python-sdk-docs/julep/managers/task.md deleted file mode 100644 index e295f2d5f..000000000 --- a/docs/python-sdk-docs/julep/managers/task.md +++ /dev/null @@ -1,608 +0,0 @@ -# Task - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Task - -> Auto-generated documentation for [julep.managers.task](../../../../../../julep/managers/task.py) module. - -- [Task](#task) - - [AsyncTasksManager](#asynctasksmanager) - - [BaseTasksManager](#basetasksmanager) - - [StartTaskExecutionArgs](#starttaskexecutionargs) - - [TaskCreateArgs](#taskcreateargs) - - [TasksManager](#tasksmanager) - -## AsyncTasksManager - -[Show source in task.py:348](../../../../../../julep/managers/task.py#L348) - -A class for managing tasks, inheriting from [BaseTasksManager](#basetasksmanager). - -This class provides asynchronous functionalities to interact with and manage tasks, including creating, retrieving, start execution and get execution of tasks. It utilizes type annotations to ensure type correctness at runtime using the `beartype` decorator. - -#### Methods - -- `get(self,` *agent_id* - Union[UUID, str], task_id: Union[UUID, str]) -> Task: - Asynchronously retrieves a single task given agent and task IDs. - -#### Arguments - -agent_id (Union[UUID, str]): The UUID of the agent -task_id (Union[UUID, str]): The UUID of the task -agent_id (Union[UUID, str]): Agent ID -- `name` *str* - Task name -- `description` *Optional[str]* - Task description -- `tools_available` *Optional[List[str]]* - A list of available tools -input_schema (Optional[Dict[str, Any]]): Input schema -- `main` *List[WorkflowStep]* - A list of workflow steps -task_id Union[UUID, str]: Task ID -execution_id (Union[UUID, str]): Execution ID -agent_id (Union[UUID, str]): Agent ID -task_id (Union[UUID, str]): Task ID -arguments (Dict[str, Any]): Task arguments -- `status` *ExecutionStatus* - Task execution status -agent_id (Union[UUID, str]): Agent ID - -#### Returns - -- `Task` - The task object with the corresponding identifier. - -- `create(self,` *agent_id* - Union[UUID, str], name: str, description: Optional[str] = None, tools_available: Optional[List[str]] = None, input_schema: Optional[Dict[str, Any]] = None, main: List[WorkflowStep]) -> Task: - Asynchronously creates a task with the given specifications. - - `Task` - A newly created task object. - -- `get_task_execution(self,` *task_id* - Union[UUID, str], execution_id: Union[UUID, str]) -> List[Execution]: - Asynchronously retrieves task execution objects given a task and execution IDs - - `List[Execution]` - A list of Execution objects - -- `start_task_execution(self,` *agent_id* - Union[UUID, str], task_id: Union[UUID, str], arguments: Dict[str, Any], status: ExecutionStatus) -> Execution: - Asynchronously starts task execution given agent and task IDs and all the required parameters - - `Execution` - A newly created execution object - -- `list(self,` *agent_id* - Union[UUID, str]) -> List[Task]: - Asynchronously retrieves a list of tasks. - -- `List[Task]` - A list of Task objects. - -#### Signature - -```python -class AsyncTasksManager(BaseTasksManager): ... -``` - -#### See also - -- [BaseTasksManager](#basetasksmanager) - -### AsyncTasksManager().create - -[Show source in task.py:418](../../../../../../julep/managers/task.py#L418) - -Asynchronously creates a task with the given specifications. - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID -- `name` *str* - Task name -- `description` *Optional[str]* - Task description -- `tools_available` *Optional[List[str]]* - A list of available tools -input_schema (Optional[Dict[str, Any]]): Input schema -- `main` *List[WorkflowStep]* - A list of workflow steps - -#### Returns - -- `Task` - A newly created task object. - -#### Signature - -```python -@beartype -@rewrap_in_class(Task) -async def create(self, **kwargs: TaskCreateArgs) -> Task: ... -``` - -#### See also - -- [TaskCreateArgs](#taskcreateargs) - -### AsyncTasksManager().get - -[Show source in task.py:436](../../../../../../julep/managers/task.py#L436) - -Asynchronously retrieves a single task given agent and task IDs. - -#### Arguments - -agent_id (Union[UUID, str]): The UUID of the agent -task_id (Union[UUID, str]): The UUID of the task - -#### Returns - -- `Task` - The task object with the corresponding identifier. - -#### Signature - -```python -@beartype -async def get(self, agent_id: Union[UUID, str], task_id: Union[UUID, str]) -> Task: ... -``` - -### AsyncTasksManager().get_task_execution - -[Show source in task.py:449](../../../../../../julep/managers/task.py#L449) - -Asynchronously retrieves task execution objects given a task and execution IDs - -#### Arguments - -task_id Union[UUID, str]: Task ID -execution_id (Union[UUID, str]): Execution ID - -#### Returns - -- `List[Execution]` - A list of Execution objects - -#### Signature - -```python -@beartype -async def get_task_execution( - self, task_id: Union[UUID, str], execution_id: Union[UUID, str] -) -> List[Execution]: ... -``` - -### AsyncTasksManager().list - -[Show source in task.py:402](../../../../../../julep/managers/task.py#L402) - -Asynchronously retrieves a list of tasks. - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID - -#### Returns - -- `List[Task]` - A list of Task objects. - -#### Signature - -```python -@beartype -async def list(self, agent_id: Union[UUID, str]) -> List[Task]: ... -``` - -### AsyncTasksManager().start_task_execution - -[Show source in task.py:466](../../../../../../julep/managers/task.py#L466) - -Asynchronously starts task execution given agent and task IDs and all the required parameters - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID -task_id (Union[UUID, str]): Task ID -arguments (Dict[str, Any]): Task arguments -- `status` *ExecutionStatus* - Task execution status - -#### Returns - -- `Execution` - A newly created execution object - -#### Signature - -```python -@beartype -@rewrap_in_class(Execution) -async def start_task_execution(self, **kwargs: StartTaskExecutionArgs) -> Execution: ... -``` - -#### See also - -- [StartTaskExecutionArgs](#starttaskexecutionargs) - - - -## BaseTasksManager - -[Show source in task.py:32](../../../../../../julep/managers/task.py#L32) - -A class responsible for managing task entities. - -This manager handles CRUD operations for tasks including retrieving, creating, starting execution, getting execution of tasks using an API client. - -#### Attributes - -- `api_client` *ApiClientType* - The client responsible for API interactions. - -#### Methods - -- `_get(self,` *agent_id* - Union[UUID, str], task_id: Union[UUID, str]) -> Union[Task, Awaitable[Task]]: - Retrieves a single task given agent and task IDs. - -#### Arguments - - agent_id (Union[UUID, str]): The UUID of the agent - task_id (Union[UUID, str]): The UUID of the task - agent_id (Union[UUID, str]): Agent ID - - `name` *str* - Task name - - `description` *Optional[str]* - Task description - - `tools_available` *Optional[List[str]]* - A list of available tools - input_schema (Optional[Dict[str, Any]]): Input schema - - `main` *List[WorkflowStep]* - A list of workflow steps - task_id Union[UUID, str]: Task ID - execution_id (Union[UUID, str]): Execution ID - agent_id (Union[UUID, str]): Agent ID - task_id (Union[UUID, str]): Task ID - arguments (Dict[str, Any]): Task arguments - - `status` *ExecutionStatus* - Task execution status -agent_id (Union[UUID, str]): Agent ID - -#### Returns - -The task object or an awaitable that resolves to the task object. - -- `_create(self,` *agent_id* - Union[UUID, str], name: str, description: Optional[str] = None, tools_available: Optional[List[str]] = None, input_schema: Optional[Dict[str, Any]] = None, main: List[WorkflowStep]) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: - Creates a task with the given specifications. - The response indicating creation or an awaitable that resolves to the creation response. - -- `_get_task_execution(self,` *task_id* - Union[UUID, str], execution_id: Union[UUID, str]) -> Union[List[Execution], Awaitable[List[Execution]]]: - Retrieves task execution objects given a task and execution IDs - A list of Execution objects - -- `_start_task_execution(self,` *agent_id* - Union[UUID, str], task_id: Union[UUID, str], arguments: Dict[str, Any], status: ExecutionStatus) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: - Starts task execution given agent and task IDs and all the required parameters - The response indicating creation or an awaitable that resolves to the creation response. - -- `_list(self,` *agent_id* - Union[UUID, str]) -> Union[List[Task], Awaitable[List[Task]]]: -Retrieves a list of tasks. - - `List[Task]` - A list of Task objects. - -#### Signature - -```python -class BaseTasksManager(BaseManager): ... -``` - -### BaseTasksManager()._create - -[Show source in task.py:105](../../../../../../julep/managers/task.py#L105) - -Creates a task with the given specifications. - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID -- `name` *str* - Task name -- `description` *Optional[str]* - Task description -- `tools_available` *Optional[List[str]]* - A list of available tools -input_schema (Optional[Dict[str, Any]]): Input schema -- `main` *List[WorkflowStep]* - A list of workflow steps - -#### Returns - -The response indicating creation or an awaitable that resolves to the creation response. - -#### Signature - -```python -def _create( - self, - agent_id: Union[UUID, str], - name: str, - description: Optional[str] = None, - tools_available: Optional[List[str]] = None, - input_schema: Optional[Dict[str, Any]] = None, - main: List[WorkflowStep], -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - -### BaseTasksManager()._get - -[Show source in task.py:139](../../../../../../julep/managers/task.py#L139) - -Retrieves a single task given agent and task IDs. - -#### Arguments - -agent_id (Union[UUID, str]): The UUID of the agent -task_id (Union[UUID, str]): The UUID of the task - -#### Returns - -The task object or an awaitable that resolves to the task object. - -#### Signature - -```python -def _get( - self, agent_id: Union[UUID, str], task_id: Union[UUID, str] -) -> Union[Task, Awaitable[Task]]: ... -``` - -### BaseTasksManager()._get_task_execution - -[Show source in task.py:159](../../../../../../julep/managers/task.py#L159) - -Retrieves task execution objects given a task and execution IDs - -#### Arguments - -task_id Union[UUID, str]: Task ID -execution_id (Union[UUID, str]): Execution ID - -#### Returns - -A list of Execution objects - -#### Signature - -```python -def _get_task_execution( - self, task_id: Union[UUID, str], execution_id: Union[UUID, str] -) -> Union[List[Execution], Awaitable[List[Execution]]]: ... -``` - -### BaseTasksManager()._list - -[Show source in task.py:88](../../../../../../julep/managers/task.py#L88) - -Retrieves a list of tasks. - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID - -#### Returns - -- `List[Task]` - A list of Task objects. - -#### Signature - -```python -def _list( - self, agent_id: Union[UUID, str] -) -> Union[List[Task], Awaitable[List[Task]]]: ... -``` - -### BaseTasksManager()._start_task_execution - -[Show source in task.py:179](../../../../../../julep/managers/task.py#L179) - -Starts task execution given agent and task IDs and all the required parameters - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID -task_id (Union[UUID, str]): Task ID -arguments (Dict[str, Any]): Task arguments -- `status` *ExecutionStatus* - Task execution status - -#### Returns - -The response indicating creation or an awaitable that resolves to the creation response. - -#### Signature - -```python -def _start_task_execution( - self, - agent_id: Union[UUID, str], - task_id: Union[UUID, str], - arguments: Dict[str, Any], - status: ExecutionStatus, -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - - - -## StartTaskExecutionArgs - -[Show source in task.py:25](../../../../../../julep/managers/task.py#L25) - -#### Signature - -```python -class StartTaskExecutionArgs(TypedDict): ... -``` - - - -## TaskCreateArgs - -[Show source in task.py:16](../../../../../../julep/managers/task.py#L16) - -#### Signature - -```python -class TaskCreateArgs(TypedDict): ... -``` - - - -## TasksManager - -[Show source in task.py:210](../../../../../../julep/managers/task.py#L210) - -A class for managing tasks, inheriting from [BaseTasksManager](#basetasksmanager). - -This class provides functionalities to interact with and manage tasks, including creating, retrieving, start execution and get execution of tasks. It utilizes type annotations to ensure type correctness at runtime using the `beartype` decorator. - -#### Methods - -- `get(self,` *agent_id* - Union[UUID, str], task_id: Union[UUID, str]) -> Task: - Retrieves a single task given agent and task IDs. - -#### Arguments - -agent_id (Union[UUID, str]): The UUID of the agent -task_id (Union[UUID, str]): The UUID of the task -agent_id (Union[UUID, str]): Agent ID -- `name` *str* - Task name -- `description` *Optional[str]* - Task description -- `tools_available` *Optional[List[str]]* - A list of available tools -input_schema (Optional[Dict[str, Any]]): Input schema -- `main` *List[WorkflowStep]* - A list of workflow steps -task_id Union[UUID, str]: Task ID -execution_id (Union[UUID, str]): Execution ID -agent_id (Union[UUID, str]): Agent ID -task_id (Union[UUID, str]): Task ID -arguments (Dict[str, Any]): Task arguments -- `status` *ExecutionStatus* - Task execution status -agent_id (Union[UUID, str]): Agent ID - -#### Returns - -- `Task` - The task object with the corresponding identifier. - -- `create(self,` *agent_id* - Union[UUID, str], name: str, description: Optional[str] = None, tools_available: Optional[List[str]] = None, input_schema: Optional[Dict[str, Any]] = None, main: List[WorkflowStep]) -> Task: - Creates a task with the given specifications. - - `Task` - A newly created task object. - -- `get_task_execution(self,` *task_id* - Union[UUID, str], execution_id: Union[UUID, str]) -> List[Execution]: - Retrieves task execution objects given a task and execution IDs - - `List[Execution]` - A list of Execution objects - -- `start_task_execution(self,` *agent_id* - Union[UUID, str], task_id: Union[UUID, str], arguments: Dict[str, Any], status: ExecutionStatus) -> Execution: - Starts task execution given agent and task IDs and all the required parameters - - `Execution` - A newly created execution object - -- `list(self,` *agent_id* - Union[UUID, str]) -> List[Task]: - Retrieves a list of tasks. - - `List[Task]` - A list of Task objects. - -#### Signature - -```python -class TasksManager(BaseTasksManager): ... -``` - -#### See also - -- [BaseTasksManager](#basetasksmanager) - -### TasksManager().create - -[Show source in task.py:282](../../../../../../julep/managers/task.py#L282) - -Creates a task with the given specifications. - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID -- `name` *str* - Task name -- `description` *Optional[str]* - Task description -- `tools_available` *Optional[List[str]]* - A list of available tools -input_schema (Optional[Dict[str, Any]]): Input schema -- `main` *List[WorkflowStep]* - A list of workflow steps - -#### Returns - -- `Task` - A newly created task object. - -#### Signature - -```python -@beartype -@rewrap_in_class(Task) -def create(self, **kwargs: TaskCreateArgs) -> Task: ... -``` - -#### See also - -- [TaskCreateArgs](#taskcreateargs) - -### TasksManager().get - -[Show source in task.py:300](../../../../../../julep/managers/task.py#L300) - -Retrieves a single task given agent and task IDs. - -#### Arguments - -agent_id (Union[UUID, str]): The UUID of the agent -task_id (Union[UUID, str]): The UUID of the task - -#### Returns - -- `Task` - The task object with the corresponding identifier. - -#### Signature - -```python -@beartype -def get(self, agent_id: Union[UUID, str], task_id: Union[UUID, str]) -> Task: ... -``` - -### TasksManager().get_task_execution - -[Show source in task.py:313](../../../../../../julep/managers/task.py#L313) - -Retrieves task execution objects given a task and execution IDs - -#### Arguments - -task_id Union[UUID, str]: Task ID -execution_id (Union[UUID, str]): Execution ID - -#### Returns - -- `List[Execution]` - A list of Execution objects - -#### Signature - -```python -@beartype -def get_task_execution( - self, task_id: Union[UUID, str], execution_id: Union[UUID, str] -) -> List[Execution]: ... -``` - -### TasksManager().list - -[Show source in task.py:263](../../../../../../julep/managers/task.py#L263) - -Retrieves a list of tasks. - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID - -#### Returns - -- `List[Task]` - A list of Task objects. - -#### Signature - -```python -@beartype -def list(self, agent_id: Union[UUID, str]) -> List[Task]: ... -``` - -### TasksManager().start_task_execution - -[Show source in task.py:331](../../../../../../julep/managers/task.py#L331) - -Starts task execution given agent and task IDs and all the required parameters - -#### Arguments - -agent_id (Union[UUID, str]): Agent ID -task_id (Union[UUID, str]): Task ID -arguments (Dict[str, Any]): Task arguments -- `status` *ExecutionStatus* - Task execution status - -#### Returns - -- `Execution` - A newly created execution object - -#### Signature - -```python -@beartype -@rewrap_in_class(Execution) -def start_task_execution(self, **kwargs: StartTaskExecutionArgs) -> Execution: ... -``` - -#### See also - -- [StartTaskExecutionArgs](#starttaskexecutionargs) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/tool.md b/docs/python-sdk-docs/julep/managers/tool.md deleted file mode 100644 index 73889b87a..000000000 --- a/docs/python-sdk-docs/julep/managers/tool.md +++ /dev/null @@ -1,521 +0,0 @@ -# Tool - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Tool - -> Auto-generated documentation for [julep.managers.tool](../../../../../../julep/managers/tool.py) module. - -- [Tool](#tool) - - [AsyncToolsManager](#asynctoolsmanager) - - [BaseToolsManager](#basetoolsmanager) - - [ToolsManager](#toolsmanager) - -## AsyncToolsManager - -[Show source in tool.py:352](../../../../../../julep/managers/tool.py#L352) - -A manager for asynchronous tools handling. - -This class provides async methods to manage tools, allowing create, retrieve, update, and delete operations. - -Methods: - get: Asynchronously retrieves tools associated with an agent. - create: Asynchronously creates a new tool associated with an agent. - delete: Asynchronously deletes a tool associated with an agent. - update: Asynchronously updates a tool associated with an agent. - -Attributes: - Inherited from BaseToolsManager. - -#### Signature - -```python -class AsyncToolsManager(BaseToolsManager): ... -``` - -#### See also - -- [BaseToolsManager](#basetoolsmanager) - -### AsyncToolsManager().create - -[Show source in tool.py:403](../../../../../../julep/managers/tool.py#L403) - -Create a new resource asynchronously. - -This method creates a new resource using the provided `agent_id` and `tool` information. - -#### Arguments - -agent_id (Union[str, UUID]): The identifier of the agent, which can be a string or a UUID object. -- `tool` *ToolDict* - A dictionary containing tool-specific data. - -#### Returns - -- `ResourceCreatedResponse` - An object representing the response received after creating the resource. - -#### Raises - -- `BeartypeException` - If the type of any argument does not match the expected type. - -#### Signature - -```python -@beartype -async def create( - self, agent_id: Union[str, UUID], tool: ToolDict -) -> ResourceCreatedResponse: ... -``` - -### AsyncToolsManager().delete - -[Show source in tool.py:430](../../../../../../julep/managers/tool.py#L430) - -Asynchronously delete a specified agent-tool association. - -This function is a high-level asynchronous API that delegates to a -private coroutinal method `_delete` to perform the actual deletion based on -the provided `agent_id` and `tool_id`. - -Args: - agent_id (Union[str, UUID]): The unique identifier of the agent. - tool_id (Union[str, UUID]): The unique identifier of the tool. - -Returns: - The return type is not explicitly stated in the function signature. - Typically, the returned value would be documented here, but you may need - to investigate the implementation of `_delete` to determine what it - returns. - -Raises: - The exceptions that this function might raise are not stated in the - snippet provided. If the private method `_delete` raises any exceptions, - they should be documented here. Depending on the implementation, common - exceptions might include `ValueError` if identifiers are invalid or - `RuntimeError` if deletion fails. - -#### Signature - -```python -@beartype -async def delete( - self, agent_id: Union[str, UUID], tool_id: Union[str, UUID] -) -> Awaitable[ResourceDeletedResponse]: ... -``` - -### AsyncToolsManager().get - -[Show source in tool.py:368](../../../../../../julep/managers/tool.py#L368) - -Asynchronously get a list of Tool objects based on provided filters. - -This method fetches Tool objects with the option to limit the results and -offset them, to allow for pagination. - -#### Arguments - -agent_id (Union[str, UUID]): The unique identifier of the agent for which to fetch tools. -- `limit` *Optional[int], optional* - The maximum number of tools to return. Defaults to None, which implies no limit. -- `offset` *Optional[int], optional* - The number of tools to skip before starting to return the tools. Defaults to None, which means start from the beginning. - -#### Returns - -- `List[Tool]` - A list of Tool objects that match the criteria. - -#### Notes - -This function is decorated with beartype, which assures that the input -arguments adhere to the specified types at runtime. It is an asynchronous -function and should be called with `await`. - -#### Signature - -```python -@beartype -async def get( - self, - agent_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[Tool]: ... -``` - -### AsyncToolsManager().update - -[Show source in tool.py:466](../../../../../../julep/managers/tool.py#L466) - -Asynchronously updates a resource identified by the agent_id and tool_id with a new definition. - -This function is type-enforced using the `beartype` decorator. - -#### Arguments - -agent_id (Union[str, UUID]): The unique identifier for the agent. -tool_id (Union[str, UUID]): The unique identifier for the tool. -- `function` *FunctionDefDict* - A dictionary containing the function definition which needs to be updated. - -#### Returns - -- `ResourceUpdatedResponse` - An object representing the response received after updating the resource. - -#### Raises - -This will depend on the implementation of the `_update` method and any exceptions that it raises. - -#### Signature - -```python -@beartype -async def update( - self, - agent_id: Union[str, UUID], - tool_id: Union[str, UUID], - function: FunctionDefDict, -) -> ResourceUpdatedResponse: ... -``` - - - -## BaseToolsManager - -[Show source in tool.py:22](../../../../../../julep/managers/tool.py#L22) - -A class to manage tools by interacting with an API client. - -This class provides methods for creating, reading, updating, and deleting tools associated with agents. It ensures the validity of UUIDs for agent_id and tool_id where applicable and handles both synchronous and asynchronous operations. - -#### Attributes - -- `api_client` - The API client used to send requests to the service. - -#### Methods - -- `_get(self,` *agent_id* - Union[str, UUID], limit: Optional[int]=None, offset: Optional[int]=None) -> Union[GetAgentToolsResponse, Awaitable[GetAgentToolsResponse]]: - Retrieves a list of tools associated with the specified agent. Supports pagination through limit and offset parameters. - -- `_create(self,` *agent_id* - Union[str, UUID], tool: ToolDict) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: - Creates a new tool associated with the specified agent. - -- `_update(self,` *agent_id* - Union[str, UUID], tool_id: Union[str, UUID], function: FunctionDefDict) -> Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: - Updates the definition of an existing tool associated with the specified agent. - -- `_delete(self,` *agent_id* - Union[str, UUID], tool_id: Union[str, UUID]): - Deletes a tool associated with the specified agent. - -#### Signature - -```python -class BaseToolsManager(BaseManager): ... -``` - -### BaseToolsManager()._create - -[Show source in tool.py:77](../../../../../../julep/managers/tool.py#L77) - -Create a new tool associated with a given agent. - -Args: - agent_id (Union[str, UUID]): The ID of the agent for which to create the tool. Must be a valid UUID v4. - tool (ToolDict): A dictionary with tool data conforming to the CreateToolRequest structure. - -Returns: - Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: The response object indicating the newly created tool, - either as a direct response or as an awaitable if it's an asynchronous operation. - -#### Signature - -```python -def _create( - self, agent_id: Union[str, UUID], tool: ToolDict -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - -### BaseToolsManager()._delete - -[Show source in tool.py:142](../../../../../../julep/managers/tool.py#L142) - -Delete a tool associated with an agent. - -Args: - agent_id (Union[str, UUID]): The UUID of the agent. - tool_id (Union[str, UUID]): The UUID of the tool to be deleted. - -Returns: - The response from the API client's delete_agent_tool method. - -Raises: - AssertionError: If either `agent_id` or `tool_id` is not a valid UUID v4. - -#### Signature - -```python -def _delete( - self, agent_id: Union[str, UUID], tool_id: Union[str, UUID] -) -> Union[ResourceDeletedResponse, Awaitable[ResourceDeletedResponse]]: ... -``` - -### BaseToolsManager()._get - -[Show source in tool.py:45](../../../../../../julep/managers/tool.py#L45) - -Retrieve tools associated with the given agent. - -This is a private method that fetches tools for the provided agent ID, with optional -limit and offset parameters for pagination. - -#### Arguments - -agent_id (Union[str, UUID]): The unique identifier for the agent, which can be a - string or UUID object. -- `limit` *Optional[int], optional* - The maximum number of tools to retrieve. Defaults to None. -- `offset` *Optional[int], optional* - The number of tools to skip before starting to collect - the result set. Defaults to None. - -#### Returns - -- `Union[GetAgentToolsResponse,` *Awaitable[GetAgentToolsResponse]]* - The response object which -contains the list of tools, or an awaitable response object for asynchronous operations. - -#### Raises - -- `AssertionError` - If the agent_id is not a valid UUID v4. - -#### Signature - -```python -def _get( - self, - agent_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> Union[GetAgentToolsResponse, Awaitable[GetAgentToolsResponse]]: ... -``` - -### BaseToolsManager()._update - -[Show source in tool.py:102](../../../../../../julep/managers/tool.py#L102) - -Update the tool definition for a given agent. - -Args: - agent_id (Union[str, UUID]): The unique identifier for the agent, either in string or UUID format. - tool_id (Union[str, UUID]): The unique identifier for the tool, either in string or UUID format. - function (FunctionDefDict): A dictionary containing the function definition that conforms with the required API schema. - overwrite (bool): A flag to indicate whether to overwrite the existing function definition. Defaults to False. - -Returns: - Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: The updated resource response sync or async. - -Raises: - AssertionError: If the `agent_id` or `tool_id` is not a valid UUID v4. - -#### Signature - -```python -def _update( - self, - agent_id: Union[str, UUID], - tool_id: Union[str, UUID], - function: FunctionDefDict, - overwrite: bool = False, -) -> Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: ... -``` - - - -## ToolsManager - -[Show source in tool.py:170](../../../../../../julep/managers/tool.py#L170) - -A manager class for handling tools related to agents. - -This class provides an interface to manage tools, including their retrieval, creation, -deletion, and updating. It extends the functionalities of the BaseToolsManager. - -#### Methods - -get: - Retrieves a list of tools for the given agent. - -#### Arguments - -agent_id (Union[str, UUID]): The identifier of the agent whose tools are being retrieved. -- `limit` *Optional[int], optional* - The maximum number of tools to retrieve. -- `offset` *Optional[int], optional* - The index from which to start the retrieval. - -agent_id (Union[str, UUID]): The identifier of the agent for whom the tool is being created. -- `tool` *ToolDict* - A dictionary of tool attributes. - -agent_id (Union[str, UUID]): The identifier of the agent whose tool is being deleted. -tool_id (Union[str, UUID]): The unique identifier of the tool to be deleted. - -update: - Updates the definition of an existing tool for the given agent. - -agent_id (Union[str, UUID]): The identifier of the agent whose tool is being updated. -tool_id (Union[str, UUID]): The unique identifier of the tool to be updated. -- `function` *FunctionDefDict* - A dictionary representing the definition of the tool to be updated. - -#### Returns - -- `List[Tool]` - A list of Tool objects. - -create: - Creates a new tool for the given agent. - -- `ResourceCreatedResponse` - An object indicating the successful creation of the tool. - -delete: - Deletes a tool for the given agent. - -- `ResourceUpdatedResponse` - An object indicating the successful update of the tool. - -Inherits: - - [BaseToolsManager](#basetoolsmanager) - A base class that defines the basic operations for tool management. - -#### Signature - -```python -class ToolsManager(BaseToolsManager): ... -``` - -#### See also - -- [BaseToolsManager](#basetoolsmanager) - -### ToolsManager().create - -[Show source in tool.py:252](../../../../../../julep/managers/tool.py#L252) - -Create a new resource with the provided agent identifier and tool information. - -This method wraps the internal `_create` method to construct and return a ResourceCreatedResponse. - -Args: - agent_id (Union[str, UUID]): The unique identifier for the agent. Can be a string or a UUID object. - tool (ToolDict): A dictionary containing tool-specific configuration or information. - -Returns: - ResourceCreatedResponse: An object representing the successfully created resource, including metadata like creation timestamps and resource identifiers. - -Raises: - TypeError: If the `agent_id` or `tool` arguments are not of the expected type. - ValueError: If any values within the `tool` dictionary are invalid or out of accepted range. - RuntimeError: If the creation process encounters an unexpected error. - -Note: - The `@beartype` decorator is used to enforce type checking of the arguments at runtime. - -Example usage: - -```python ->>> response = instance.create(agent_id="123e4567-e89b-12d3-a456-426614174000", tool={"type": "screwdriver", "size": "M4"}) ->>> print(response) -ResourceCreatedResponse(resource_id='abcde-12345', created_at='2021-01-01T12:00:00Z') -``` - -#### Signature - -```python -@beartype -def create( - self, agent_id: Union[str, UUID], tool: ToolDict -) -> ResourceCreatedResponse: ... -``` - -### ToolsManager().delete - -[Show source in tool.py:290](../../../../../../julep/managers/tool.py#L290) - -Deletes an agent's access to a specific tool. - -#### Arguments - -agent_id (Union[str, UUID]): The unique identifier of the agent. -tool_id (Union[str, UUID]): The unique identifier of the tool. - -#### Returns - -The result of the delete operation, the specific type of which may depend on the implementation of `_delete`. - -#### Raises - -- `Beartype` *exceptions* - If `agent_id` or `tool_id` are of the wrong type. - -#### Signature - -```python -@beartype -def delete(self, agent_id: Union[str, UUID], tool_id: Union[str, UUID]): ... -``` - -### ToolsManager().get - -[Show source in tool.py:221](../../../../../../julep/managers/tool.py#L221) - -Retrieve a list of Tool objects for the specified agent. - -This method wraps the internal _get method and returns the 'items' property -from the result, which contains a list of Tool instances. - -Args: - agent_id (Union[str, UUID]): The ID of the agent to retrieve Tool objects for. - limit (Optional[int]): The maximum number of Tool objects to return. Defaults to None, implying no limit. - offset (Optional[int]): The number to skip before starting to collect the result set. Defaults to None, implying no offset. - -Returns: - List[Tool]: A list of Tool instances associated with the specified agent ID. - -Raises: - BeartypeException: If the input argument types do not match the expected types. - -#### Signature - -```python -@beartype -def get( - self, - agent_id: Union[str, UUID], - limit: Optional[int] = None, - offset: Optional[int] = None, -) -> List[Tool]: ... -``` - -### ToolsManager().update - -[Show source in tool.py:315](../../../../../../julep/managers/tool.py#L315) - -Update a specific tool definition for an agent. - -#### Arguments - -agent_id (Union[str, UUID]): The unique identifier of the agent. -tool_id (Union[str, UUID]): The unique identifier of the tool to be updated. -- `function` *FunctionDefDict* - A dictionary containing the new definition of the tool. -- `overwrite` *bool* - A flag indicating whether to overwrite the existing definition. - -#### Returns - -- `ResourceUpdatedResponse` - An object representing the update operation response. - -#### Notes - -This function is decorated with `beartype` which ensures that the arguments provided -match the expected types at runtime. - -#### Raises - -- `BeartypeDecorHintPepParamException` - If the type of any parameter does not match the expected type. -Any exceptions that `self._update` method might raise. - -#### Signature - -```python -@beartype -def update( - self, - agent_id: Union[str, UUID], - tool_id: Union[str, UUID], - function: FunctionDefDict, - overwrite: bool = False, -) -> ResourceUpdatedResponse: ... -``` \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/managers/types.md b/docs/python-sdk-docs/julep/managers/types.md deleted file mode 100644 index 03813b1c6..000000000 --- a/docs/python-sdk-docs/julep/managers/types.md +++ /dev/null @@ -1,22 +0,0 @@ -# Types - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / Types - -> Auto-generated documentation for [julep.managers.types](../../../../../../julep/managers/types.py) module. - -#### Attributes - -- `ChatSettingsResponseFormatDict` - Represents the settings for chat response formatting, used in configuring agent chat behavior.: TypedDict('ChatSettingsResponseFormat', **{k: v.outer_type_ for (k, v) in ChatSettingsResponseFormat.__fields__.items()}) - -- `InputChatMlMessageDict` - Represents an input message for chat in ML format, used for processing chat inputs.: TypedDict('InputChatMlMessage', **{k: v.outer_type_ for (k, v) in InputChatMlMessage.__fields__.items()}) - -- `ToolDict` - Represents the structure of a tool, used for defining tools within the system.: TypedDict('Tool', **{k: v.outer_type_ for (k, v) in Tool.__fields__.items()}) - -- `DocDict` - Represents the serialized form of a document, used for API communication.: TypedDict('DocDict', **{k: v.outer_type_ for (k, v) in CreateDoc.__fields__.items()}) - -- `DefaultSettingsDict` - Represents the default settings for an agent, used in agent configuration.: TypedDict('DefaultSettingsDict', **{k: v.outer_type_ for (k, v) in AgentDefaultSettings.__fields__.items()}) - -- `FunctionDefDict` - Represents the definition of a function, used for defining functions within the system.: TypedDict('FunctionDefDict', **{k: v.outer_type_ for (k, v) in FunctionDef.__fields__.items()}) - -- `ToolDict` - Represents the request structure for creating a tool, used in tool creation API calls.: TypedDict('ToolDict', **{k: v.outer_type_ for (k, v) in CreateToolRequest.__fields__.items()}) -- [Types](#types) diff --git a/docs/python-sdk-docs/julep/managers/user.md b/docs/python-sdk-docs/julep/managers/user.md deleted file mode 100644 index 606b2f5c9..000000000 --- a/docs/python-sdk-docs/julep/managers/user.md +++ /dev/null @@ -1,621 +0,0 @@ -# User - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Managers](./index.md#managers) / User - -> Auto-generated documentation for [julep.managers.user](../../../../../../julep/managers/user.py) module. - -- [User](#user) - - [AsyncUsersManager](#asyncusersmanager) - - [BaseUsersManager](#baseusersmanager) - - [UserCreateArgs](#usercreateargs) - - [UserUpdateArgs](#userupdateargs) - - [UsersManager](#usersmanager) - -## AsyncUsersManager - -[Show source in user.py:358](../../../../../../julep/managers/user.py#L358) - -A class that provides asynchronous management of users extending BaseUsersManager. - -Attributes are inherited from BaseUsersManager. - -#### Methods - -get (Union[UUID, str]) -> User: - Asynchronously retrieves a user by their unique identifier (either a UUID or a string). - -create (*, name: str, about: str, docs: List[DocDict]=[]) -> ResourceCreatedResponse: - Asynchronously creates a new user with the given name, about description, and optional list of documents. - -list (*, limit: Optional[int]=None, offset: Optional[int]=None) -> List[User]: - Asynchronously retrieves a list of users with an optional limit and offset for pagination. - -delete (*, user_id: Union[str, UUID]) -> None: - Asynchronously deletes a user identified by their unique ID (either a string or a UUID). - -update (*, user_id: Union[str, UUID], about: Optional[str]=None, name: Optional[str]=None) -> ResourceUpdatedResponse: - Asynchronously updates a user's information identified by their unique ID with optional new about description and name. - -#### Notes - -The beartype decorator is used for runtime type checking of the parameters passed to the methods. - -#### Signature - -```python -class AsyncUsersManager(BaseUsersManager): ... -``` - -#### See also - -- [BaseUsersManager](#baseusersmanager) - -### AsyncUsersManager().create - -[Show source in user.py:402](../../../../../../julep/managers/user.py#L402) - -Asynchronously create a new resource with the provided name, description, and documents. - -This function is decorated with `@beartype` to ensure type checking at runtime. - -#### Arguments - -- `name` *str* - The name of the resource to be created. -- `about` *str* - Brief information about the resource. -- `docs` *List[DocDict], optional* - A list of document dictionaries with structure defined by DocDict type. - -#### Returns - -- `ResourceCreatedResponse` - An instance representing the response after resource creation. - -#### Raises - -- `BeartypeException` - If any of the parameters do not match their annotated types. - -#### Signature - -```python -@beartype -@rewrap_in_class(User) -async def create(self, **kwargs: UserCreateArgs) -> User: ... -``` - -#### See also - -- [UserCreateArgs](#usercreateargs) - -### AsyncUsersManager().delete - -[Show source in user.py:461](../../../../../../julep/managers/user.py#L461) - -Asynchronously deletes a user by their user ID. - -#### Arguments - -user_id (Union[str, UUID]): The unique identifier of the user to delete, which can be a string or a UUID. - -#### Returns - -- `None` - This function does not return anything. - -#### Notes - -- The function is decorated with `@beartype` for runtime type checking. -- This function is a coroutine, it should be called with `await`. - -#### Raises - -- The raised exceptions depend on the implementation of the underlying `_delete` coroutine. - -#### Signature - -```python -@beartype -async def delete(self, user_id: Union[str, UUID]) -> None: ... -``` - -### AsyncUsersManager().get - -[Show source in user.py:384](../../../../../../julep/managers/user.py#L384) - -Fetch a User object asynchronously by its identifier. - -This method retrieves a User object from some data storage asynchronously based on the provided identifier, which can be either a UUID or a string. - -#### Arguments - -id (Union[UUID, str]): The unique identifier of the User to be retrieved. - -#### Returns - -- `User` - An instance of the User class corresponding to the given id. - -#### Raises - -- `Exception` - If the retrieval fails or the user cannot be found. - -#### Signature - -```python -@beartype -async def get(self, id: Union[UUID, str]) -> User: ... -``` - -### AsyncUsersManager().list - -[Show source in user.py:424](../../../../../../julep/managers/user.py#L424) - -Asynchronously lists users with optional limits and offsets. - -This function applies the `beartype` decorator for runtime type checking. - -#### Arguments - -- `limit` *Optional[int], optional* - The maximum number of users to be returned. Defaults to None, which means no limit. -- `offset` *Optional[int], optional* - The number to offset the list of returned users by. Defaults to None, which means no offset. - -#### Returns - -- `List[User]` - A list of user objects. - -#### Raises - -- `TypeError` - If any input arguments are not of the expected type. -Any other exception that might be raised during the retrieval of users from the data source. - -#### Notes - -The actual exception raised by the `beartype` decorator or during the users' retrieval will depend on the implementation detail of the `self._list_items` method and the `beartype` configuration. - -#### Signature - -```python -@beartype -async def list( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[User]: ... -``` - -### AsyncUsersManager().update - -[Show source in user.py:486](../../../../../../julep/managers/user.py#L486) - -Asynchronously updates user details. - -This function updates user details such as 'about' and 'name'. It uses type annotations to enforce the types of the parameters and an asynchronous call to '_update' method to perform the actual update operation. - -#### Arguments - -user_id (Union[str, UUID]): The unique identifier of the user, which can be either a string or a UUID. -- `about` *Optional[str], optional* - A description of the user. Default is None, indicating no update. -- `name` *Optional[str], optional* - The name of the user. Default is None, indicating no update. - -#### Returns - -- `ResourceUpdatedResponse` - An object representing the update status. - -#### Notes - -This function is decorated with @beartype to perform runtime type checking. - -#### Signature - -```python -@beartype -@rewrap_in_class(User) -async def update(self, user_id: Union[str, UUID], **kwargs: UserUpdateArgs) -> User: ... -``` - -#### See also - -- [UserUpdateArgs](#userupdateargs) - - - -## BaseUsersManager - -[Show source in user.py:36](../../../../../../julep/managers/user.py#L36) - -A manager class for handling user-related operations through an API client. - -This class provides high-level methods to interact with user records, -such as retrieving a user by ID, creating a new user, listing all users, -deleting a user, and updating a user's details. - -Attributes: - api_client: The API client instance to communicate with the user service. - -Methods: - _get: Retrieve a user by a unique UUID. - _create: Create a new user with the specified name and about fields, and optionally additional documents. - _list_items: List users with optional pagination through limit and offset parameters. - _delete: Delete a user by UUID. - _update: Update user details such as the 'about' description and name by UUID. - -Raises: - AssertionError: If the provided ID for the user operations is not a valid UUID v4. - -#### Signature - -```python -class BaseUsersManager(BaseManager): ... -``` - -### BaseUsersManager()._create - -[Show source in user.py:79](../../../../../../julep/managers/user.py#L79) - -Create a new resource with the given name and about information, optionally including additional docs. - -This internal method allows for creating a new resource with optional docsrmation. - -#### Arguments - -- `name` *str* - The name of the new resource. -- `about` *str* - A brief description about the new resource. -- `docs` *List[DocDict], optional* - A list of dictionaries with documentation-related information. Each dictionary - must conform to the structure expected by CreateDoc. Defaults to an empty list. -metadata (Dict[str, Any]) - -#### Returns - -- `Union[ResourceCreatedResponse,` *Awaitable[ResourceCreatedResponse]]* - The response indicating the resource has been -created successfully. It can be either a synchronous ResourceCreatedResponse or an asynchronous Awaitable object -containing a ResourceCreatedResponse. - -#### Notes - -This method is an internal API implementation detail and should not be used directly outside the defining class -or module. - -Side effects: - Modifies internal state by converting each doc dict to an instance of CreateDoc and uses the - internal API client to create a new user resource. - -#### Signature - -```python -def _create( - self, name: str, about: str, docs: List[DocDict] = [], metadata: Dict[str, Any] = {} -) -> Union[ResourceCreatedResponse, Awaitable[ResourceCreatedResponse]]: ... -``` - -### BaseUsersManager()._delete - -[Show source in user.py:144](../../../../../../julep/managers/user.py#L144) - -Delete a user given their user ID. - -Args: - user_id (Union[str, UUID]): The identifier of the user. Must be a valid UUID version 4. - -Returns: - Union[None, Awaitable[None]]: None if the deletion is synchronous, or an Awaitable - that resolves to None if the deletion is asynchronous. - -Raises: - AssertionError: If the user_id is not a valid UUID v4. - -#### Signature - -```python -def _delete(self, user_id: Union[str, UUID]) -> Union[None, Awaitable[None]]: ... -``` - -### BaseUsersManager()._get - -[Show source in user.py:58](../../../../../../julep/managers/user.py#L58) - -Get the user by their ID. - -This method is intended to retrieve a User object or an Awaitable User object by the user's unique identifier. The identifier can be a string representation of a UUID or a UUID object itself. - -#### Arguments - -id (Union[str, UUID]): The unique identifier of the user to retrieve. It must be a valid UUID v4. - -#### Returns - -- `Union[User,` *Awaitable[User]]* - The retrieved User instance or an Awaitable that resolves to a User instance. - -#### Raises - -- `AssertionError` - If the `id` is not a valid UUID v4. - -#### Notes - -The leading underscore in the method name suggests that this method is intended for internal use and should not be a part of the public interface of the class. - -#### Signature - -```python -def _get(self, id: Union[str, UUID]) -> Union[User, Awaitable[User]]: ... -``` - -### BaseUsersManager()._list_items - -[Show source in user.py:121](../../../../../../julep/managers/user.py#L121) - -Fetch a list of users, with optional pagination parameters. - -Args: - limit (Optional[int], optional): The maximum number of users to return. Defaults to None. - offset (Optional[int], optional): The offset from the start of the list to begin returning users. Defaults to None. - -Returns: - Union[ListUsersResponse, Awaitable[ListUsersResponse]]: An instance of ListUsersResponse, - or an awaitable that will resolve to it, depending on the API client implementation. - -#### Signature - -```python -def _list_items( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: str = "{}", -) -> Union[ListUsersResponse, Awaitable[ListUsersResponse]]: ... -``` - -### BaseUsersManager()._update - -[Show source in user.py:161](../../../../../../julep/managers/user.py#L161) - -Update user details for a given user ID. - -This method updates the 'about' and/or 'name' fields for the user identified by user_id. - -#### Arguments - -user_id (Union[str, UUID]): The ID of the user to be updated. Must be a valid UUID v4. -- `about` *Optional[str], optional* - The new information about the user. Defaults to None. -- `name` *Optional[str], optional* - The new name for the user. Defaults to None. -metadata (Dict[str, Any]) -- `overwrite` *bool, optional* - Whether to overwrite the existing user data. Defaults to False. - -#### Returns - -- `Union[ResourceUpdatedResponse,` *Awaitable[ResourceUpdatedResponse]]* - The response indicating successful update or an Awaitable that resolves to such a response. - -#### Raises - -- `AssertionError` - If `user_id` is not a valid UUID v4. - -#### Signature - -```python -def _update( - self, - user_id: Union[str, UUID], - about: Optional[str] = NotSet, - name: Optional[str] = NotSet, - metadata: Dict[str, Any] = NotSet, - overwrite: bool = False, -) -> Union[ResourceUpdatedResponse, Awaitable[ResourceUpdatedResponse]]: ... -``` - - - -## UserCreateArgs - -[Show source in user.py:22](../../../../../../julep/managers/user.py#L22) - -#### Signature - -```python -class UserCreateArgs(TypedDict): ... -``` - - - -## UserUpdateArgs - -[Show source in user.py:29](../../../../../../julep/managers/user.py#L29) - -#### Signature - -```python -class UserUpdateArgs(TypedDict): ... -``` - - - -## UsersManager - -[Show source in user.py:208](../../../../../../julep/managers/user.py#L208) - -A class responsible for managing users in a system. - -This class is a specialized version of the BaseUsersManager and provides -methods for retrieving, creating, listing, deleting, and updating users within -the system. - -#### Methods - -- `get(id` - Union[str, UUID]) -> User: - Retrieves a user based on their unique identifier (either a string or UUID). - -- `create(*,` *name* - str, about: str, docs: List[DocDict]=[]) -> ResourceCreatedResponse: - Creates a new user with the specified name, description about the user, - and an optional list of documents associated with the user. - -- `list(*,` *limit* - Optional[int]=None, offset: Optional[int]=None) -> List[User]: - Lists users in the system, with optional limit and offset for pagination. - -- `delete(*,` *user_id* - Union[str, UUID]) -> None: - Deletes a user from the system based on their unique identifier. - -- `update(*,` *user_id* - Union[str, UUID], about: Optional[str]=None, name: Optional[str]=None) -> ResourceUpdatedResponse: - Updates an existing user's information with optional new about and name - fields. - -#### Signature - -```python -class UsersManager(BaseUsersManager): ... -``` - -#### See also - -- [BaseUsersManager](#baseusersmanager) - -### UsersManager().create - -[Show source in user.py:255](../../../../../../julep/managers/user.py#L255) - -Create a new resource with the specified name, about text, and associated docs. - -Args: - name (str): The name of the resource to create. - about (str): A brief description of the resource. - docs (List[DocDict], optional): A list of dictionaries representing the documents associated with the resource. Defaults to an empty list. - -Returns: - ResourceCreatedResponse: An object representing the response received upon the successful creation of the resource. - -Note: - Using mutable types like list as default argument values in Python is risky because if the list is modified, - those changes will persist across subsequent calls to the function which use the default value. It is - generally safer to use `None` as a default value and then set the default inside the function if needed. - -Raises: - BeartypeException: If the input types do not match the specified function annotations. - -#### Signature - -```python -@beartype -@rewrap_in_class(User) -def create(self, **kwargs: UserCreateArgs) -> User: ... -``` - -#### See also - -- [UserCreateArgs](#usercreateargs) - -### UsersManager().delete - -[Show source in user.py:311](../../../../../../julep/managers/user.py#L311) - -Deletes a user based on the provided user ID. - -#### Arguments - -user_id (Union[str, UUID]): Unique identifier of the user. - -#### Returns - -None - -#### Notes - -This function is type-checked with `beartype` to ensure that the `user_id` -parameter matches either a string or a UUID type. - -#### Raises - -The specific exceptions raised depend on the implementation of the `_delete` -method this function proxies to. - -#### Signature - -```python -@beartype -def delete(self, user_id: Union[str, UUID]) -> None: ... -``` - -### UsersManager().get - -[Show source in user.py:235](../../../../../../julep/managers/user.py#L235) - -Retrieve a User object by its identifier. - -The method supports retrieval by both string representations of a UUID and -UUID objects directly. - -#### Arguments - -id (Union[str, UUID]): The identifier of the User, can be a string or UUID. - -#### Returns - -- `User` - The User object associated with the provided id. - -#### Raises - -- `ValueError` - If 'id' is neither a string nor a UUID. -- `NotFoundError` - If a User with the given 'id' does not exist. - -#### Signature - -```python -@beartype -def get(self, id: Union[str, UUID]) -> User: ... -``` - -### UsersManager().list - -[Show source in user.py:280](../../../../../../julep/managers/user.py#L280) - -Lists the users optionally applying limit and offset. - -#### Arguments - -- `limit` *Optional[int], optional* - The maximum number of users to return. - None means no limit. Defaults to None. -- `offset` *Optional[int], optional* - The index of the first user to return. - None means start from the beginning. Defaults to None. - -#### Returns - -- `List[User]` - A list of user objects. - -#### Raises - -- `BeartypeException` - If the type of `limit` or `offset` is not as expected. - -#### Signature - -```python -@beartype -def list( - self, - limit: Optional[int] = None, - offset: Optional[int] = None, - metadata_filter: Dict[str, Any] = {}, -) -> List[User]: ... -``` - -### UsersManager().update - -[Show source in user.py:337](../../../../../../julep/managers/user.py#L337) - -Update user information. - -This method updates user details such as the `about` text and user's `name` for a given `user_id`. - -#### Arguments - -user_id (Union[str, UUID]): The unique identifier for the user, which can be a string or a UUID object. -- `about(Optional[str],` *optional)* - The descriptive information about the user. Defaults to None, indicating that `about` should not be updated if not provided. -- `name(Optional[str],` *optional)* - The name of the user. Defaults to None, indicating that `name` should not be updated if not provided. -- `overwrite(bool,` *optional)* - Whether to overwrite the existing user data. Defaults to False. - -#### Returns - -- `ResourceUpdatedResponse` - An object indicating the outcome of the update operation, which typically includes the status of the operation and possibly the updated resource data. - -#### Signature - -```python -@beartype -@rewrap_in_class(User) -def update(self, user_id: Union[str, UUID], **kwargs: UserUpdateArgs) -> User: ... -``` - -#### See also - -- [UserUpdateArgs](#userupdateargs) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/utils/index.md b/docs/python-sdk-docs/julep/utils/index.md deleted file mode 100644 index 5a2c64b61..000000000 --- a/docs/python-sdk-docs/julep/utils/index.md +++ /dev/null @@ -1,12 +0,0 @@ -# Utils - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / Utils - -> Auto-generated documentation for [julep.utils](../../../../../../julep/utils/__init__.py) module. - -- [Utils](#utils) - - [Modules](#modules) - -## Modules - -- [Openai Patch](./openai_patch.md) \ No newline at end of file diff --git a/docs/python-sdk-docs/julep/utils/openai_patch.md b/docs/python-sdk-docs/julep/utils/openai_patch.md deleted file mode 100644 index e1aa0323e..000000000 --- a/docs/python-sdk-docs/julep/utils/openai_patch.md +++ /dev/null @@ -1,93 +0,0 @@ -# Openai Patch - -[Julep Python SDK Index](../../README.md#julep-python-sdk-index) / [Julep](../index.md#julep) / [Utils](./index.md#utils) / Openai Patch - -> Auto-generated documentation for [julep.utils.openai_patch](../../../../../../julep/utils/openai_patch.py) module. - -- [Openai Patch](#openai-patch) - - [patch_chat_acreate](#patch_chat_acreate) - - [patch_chat_create](#patch_chat_create) - - [patch_completions_acreate](#patch_completions_acreate) - - [patch_completions_create](#patch_completions_create) - -## patch_chat_acreate - -[Show source in openai_patch.py:95](../../../../../../julep/utils/openai_patch.py#L95) - -Asynchronously patches the `chat.completions.create` method of the OpenAI client. - -This function updates the `chat.completions.create` method to an asynchronous version, enabling the inclusion of additional parameters and adjustments to its behavior. - -#### Arguments - -- client (OpenAI): The OpenAI client instance to be patched. - -#### Returns - -- `-` *OpenAI* - The patched OpenAI client instance with the updated `chat.completions.create` method. - -#### Signature - -```python -def patch_chat_acreate(client: OpenAI): ... -``` - - - -## patch_chat_create - -[Show source in openai_patch.py:270](../../../../../../julep/utils/openai_patch.py#L270) - -#### Signature - -```python -def patch_chat_create(client: OpenAI): ... -``` - - - -## patch_completions_acreate - -[Show source in openai_patch.py:20](../../../../../../julep/utils/openai_patch.py#L20) - -Asynchronously patches the `completions.create` method of the OpenAI client. - -This function replaces the original `completions.create` method with a custom asynchronous version that allows for additional parameters and custom behavior. - -#### Arguments - -- client (OpenAI): The OpenAI client instance to be patched. - -#### Returns - -- `-` *OpenAI* - The patched OpenAI client instance with the modified `completions.create` method. - -#### Signature - -```python -def patch_completions_acreate(client: OpenAI): ... -``` - - - -## patch_completions_create - -[Show source in openai_patch.py:195](../../../../../../julep/utils/openai_patch.py#L195) - -Patches the `completions.create` method (non-async version) of the OpenAI client. - -This function replaces the original `completions.create` method with a custom version that supports additional parameters and custom behavior, without changing it to an asynchronous function. - -#### Arguments - -- client (OpenAI): The OpenAI client instance to be patched. - -#### Returns - -- `-` *OpenAI* - The patched OpenAI client instance with the modified `completions.create` method. - -#### Signature - -```python -def patch_completions_create(client: OpenAI): ... -``` \ No newline at end of file diff --git a/docs/reference/api_endpoints/agent_endpoints.md b/docs/reference/api_endpoints/agent_endpoints.md new file mode 100644 index 000000000..8634b2098 --- /dev/null +++ b/docs/reference/api_endpoints/agent_endpoints.md @@ -0,0 +1,81 @@ +# Agent Endpoints + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This document provides a reference for all Agent API endpoints in Julep. + +## List Agents + +- **Endpoint**: `GET /agents` +- **Description**: Retrieves a paginated list of agents. +- **Query Parameters**: + - `limit` (optional): Number of agents to return per page. + - `offset` (optional): Number of agents to skip. + +## Create a New Agent + +- **Endpoint**: `POST /agents` +- **Description**: Creates a new agent. +- **Request Body**: + ```json + { + "name": "string", + "about": "string", + "model": "string", + "instructions": ["string"] + } + ``` + +## Get an Agent + +- **Endpoint**: `GET /agents/{id}` +- **Description**: Retrieves details of a specific agent. + +## Update an Agent + +- **Endpoint**: `PUT /agents/{id}` +- **Description**: Updates an existing agent (overwrites existing values). +- **Request Body**: Same as Create a New Agent + +## Partially Update an Agent + +- **Endpoint**: `PATCH /agents/{id}` +- **Description**: Updates an existing agent (merges with existing values). +- **Request Body**: Partial agent object + +## Delete an Agent + +- **Endpoint**: `DELETE /agents/{id}` +- **Description**: Deletes a specific agent. + +## Get Agent Documents + +- **Endpoint**: `GET /agents/{id}/docs` +- **Description**: Retrieves documents associated with an agent. + +## Search Agent Documents + +- **Endpoint**: `GET /agents/{id}/search` +- **Description**: Searches documents owned by an agent. + +## Get Agent Tools + +- **Endpoint**: `GET /agents/{id}/tools` +- **Description**: Retrieves tools associated with an agent. + +## Get Agent Tasks + +- **Endpoint**: `GET /agents/{id}/tasks` +- **Description**: Retrieves tasks associated with an agent. + +## Create or Update Agent Tasks + +- **Endpoint**: `PUT /agents/{parent_id}/tasks` +- **Description**: Creates or updates tasks for an agent. + +For all endpoints, replace `{id}` or `{parent_id}` with the actual agent ID. \ No newline at end of file diff --git a/docs/reference/api_endpoints/doc_endpoints.md b/docs/reference/api_endpoints/doc_endpoints.md new file mode 100644 index 000000000..2971c1b50 --- /dev/null +++ b/docs/reference/api_endpoints/doc_endpoints.md @@ -0,0 +1,43 @@ +# Doc Endpoints + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This document provides a reference for all Doc API endpoints in Julep. + +## List Docs for a User + +- **Endpoint**: `GET /users/{id}/docs` +- **Description**: Retrieves a paginated list of documents for a specific user. +- **Query Parameters**: + - `limit` (optional): Number of documents to return per page. + - `offset` (optional): Number of documents to skip. + +## Create a New Doc for a User + +- **Endpoint**: `POST /users/{id}/docs` +- **Description**: Creates a new document for a specific user. +- **Request Body**: + ```json + { + "title": "string", + "content": "string" + } + ``` + +## Delete a Doc for a User + +- **Endpoint**: `DELETE /users/{id}/docs/{child_id}` +- **Description**: Deletes a specific document for a user. + +## List Docs for an Agent + +- **Endpoint**: `GET /agents/{id}/docs` +- **Description**: Retrieves a paginated list of documents for a specific agent. +- **Query Parameters**: + - `limit` (optional): Number of documents to return per page. + - `offset` (optional): Number of documents to skip. \ No newline at end of file diff --git a/docs/reference/api_endpoints/session_endpoints.md b/docs/reference/api_endpoints/session_endpoints.md new file mode 100644 index 000000000..03bd7559d --- /dev/null +++ b/docs/reference/api_endpoints/session_endpoints.md @@ -0,0 +1,91 @@ +# Session Endpoints + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This document provides a reference for all Session API endpoints in Julep. + +## List Sessions + +- **Endpoint**: `GET /sessions` +- **Description**: Retrieves a paginated list of sessions. +- **Query Parameters**: + - `limit` (optional): Number of sessions to return per page. + - `offset` (optional): Number of sessions to skip. + +## Create a New Session + +- **Endpoint**: `POST /sessions` +- **Description**: Creates a new session. +- **Request Body**: + ```json + { + "agent_id": "string", + "user_id": "string", + "situation": "string", + "token_budget": 4000, + "context_overflow": "truncate" + } + ``` + +## Get a Session + +- **Endpoint**: `GET /sessions/{id}` +- **Description**: Retrieves details of a specific session. + +## Update a Session + +- **Endpoint**: `PUT /sessions/{id}` +- **Description**: Updates an existing session. +- **Request Body**: Partial session object + +## Delete a Session + +- **Endpoint**: `DELETE /sessions/{id}` +- **Description**: Deletes a specific session. + +## Get Session Messages + +- **Endpoint**: `GET /sessions/{id}/messages` +- **Description**: Retrieves messages in a session. + +## Create a New Message in a Session + +- **Endpoint**: `POST /sessions/{id}/messages` +- **Description**: Adds a new message to a session. +- **Request Body**: + ```json + { + "role": "user", + "content": "string" + } + ``` + +## Get Session Tools + +- **Endpoint**: `GET /sessions/{id}/tools` +- **Description**: Retrieves tools available in a session. + +## Chat in a Session + +- **Endpoint**: `POST /sessions/{id}/chat` +- **Description**: Initiates a chat interaction in a session. +- **Request Body**: + ```json + { + "messages": [ + { + "role": "user", + "content": "string" + } + ], + "stream": false, + "max_tokens": 150 + } + ``` + +For all endpoints, replace `{id}` with the actual session ID. \ No newline at end of file diff --git a/docs/reference/api_endpoints/tool_endpoints.md b/docs/reference/api_endpoints/tool_endpoints.md new file mode 100644 index 000000000..194713f1f --- /dev/null +++ b/docs/reference/api_endpoints/tool_endpoints.md @@ -0,0 +1,62 @@ +# Tool Endpoints + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This document provides a reference for all Tool API endpoints in Julep. + +## List Tools for an Agent + +- **Endpoint**: `GET /agents/{id}/tools` +- **Description**: Retrieves a paginated list of tools for a specific agent. +- **Query Parameters**: + - `limit` (optional): Number of tools to return per page. + - `offset` (optional): Number of tools to skip. + +## Create a New Tool for an Agent + +- **Endpoint**: `POST /agents/{id}/tools` +- **Description**: Creates a new tool for a specific agent. +- **Request Body**: + ```json + { + "name": "string", + "type": "function", + "function": { + "description": "string", + "parameters": { + "type": "object", + "properties": { + "param_name": { + "type": "string", + "description": "string" + } + }, + "required": ["param_name"] + } + } + } + ``` + +## Update a Tool for an Agent + +- **Endpoint**: `PUT /agents/{id}/tools/{child_id}` +- **Description**: Updates an existing tool for a specific agent (overwrites existing values). +- **Request Body**: Same as Create a New Tool + +## Partially Update a Tool for an Agent + +- **Endpoint**: `PATCH /agents/{id}/tools/{child_id}` +- **Description**: Updates an existing tool for a specific agent (merges with existing values). +- **Request Body**: Partial tool object + +## Delete a Tool for an Agent + +- **Endpoint**: `DELETE /agents/{id}/tools/{child_id}` +- **Description**: Deletes a specific tool for an agent. + +For all endpoints, replace `{id}` with the actual agent ID and `{child_id}` with the actual tool ID. \ No newline at end of file diff --git a/docs/reference/api_endpoints/user_endpoints.md b/docs/reference/api_endpoints/user_endpoints.md new file mode 100644 index 000000000..ac2578907 --- /dev/null +++ b/docs/reference/api_endpoints/user_endpoints.md @@ -0,0 +1,64 @@ +# User Endpoints + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This document provides a reference for all User API endpoints in Julep. + +## List Users + +- **Endpoint**: `GET /users` +- **Description**: Retrieves a paginated list of users. +- **Query Parameters**: + - `limit` (optional): Number of users to return per page. + - `offset` (optional): Number of users to skip. + +## Create a New User + +- **Endpoint**: `POST /users` +- **Description**: Creates a new user. +- **Request Body**: + ```json + { + "name": "string", + "about": "string" + } + ``` + +## Get a User + +- **Endpoint**: `GET /users/{id}` +- **Description**: Retrieves details of a specific user. + +## Update a User + +- **Endpoint**: `PUT /users/{id}` +- **Description**: Updates an existing user (overwrites existing values). +- **Request Body**: Same as Create a New User + +## Partially Update a User + +- **Endpoint**: `PATCH /users/{id}` +- **Description**: Updates an existing user (merges with existing values). +- **Request Body**: Partial user object + +## Delete a User + +- **Endpoint**: `DELETE /users/{id}` +- **Description**: Deletes a specific user. + +## Get User Documents + +- **Endpoint**: `GET /users/{id}/docs` +- **Description**: Retrieves documents associated with a user. + +## Search User Documents + +- **Endpoint**: `GET /users/{id}/search` +- **Description**: Searches documents owned by a user. + +For all endpoints, replace `{id}` with the actual user ID. \ No newline at end of file diff --git a/docs/s1-model/capabilities/README.md b/docs/s1-model/capabilities/README.md deleted file mode 100644 index 9fc323294..000000000 --- a/docs/s1-model/capabilities/README.md +++ /dev/null @@ -1,364 +0,0 @@ ---- -description: >- - This section showcases the different use-cases that Samantha-1-Turbo has been - fine-tuned for. ---- - -# Capabilities - -The [Julep Playground](https://playground.julep.ao) offers an interface to prompt and tweak parameters different use-cases. - -## **Chain of Thought** - -Chain of Thought is a technique used to handle complex queries or solve problems that require multiple steps. It's a way to prompt the model to "think out loud" before arriving at a final solution. - -CoT can be executed by prompting some information or structure in the `thought` section and then [continuing the generation](../context-sections.md#continue-inline) inline. - -### Prompt Example - -[Model Playground Example](https://platform.julep.ai/short/XtrQd8) - -**Situation** - -
Your name is Albert.
-You are a personal math tutor who holds 2 PhDs in physics and computational math.
-You are talking to your student.
-Answer with vigour and interest.
-Explain your answers thoroughly.
-
- -**User** - -``` -Please solve for the equation `3x + 11 = 14`. I need the solution only. -``` - -**Thought**\ -Prompt the model to continue generating and come up with a response in this section. The `continue` flag has to be set to **True** with or without a prompt. - -{% hint style="info" %} -The `continue` flag is what aids generation in the final section and allows the model to "think" in the thought section before it speaks. -{% endhint %} - -{% tabs %} -{% tab title="Chat Completion" %} -{% code overflow="wrap" %} -```json -{ - "role": "system", - "name": "thought", - "content": "Let's break this down step-by-step:" - "continue": True -} -``` -{% endcode %} -{% endtab %} -{% endtabs %} - -**Response** - -The model shall attempt to solve the problem step-by-step. - -In order to generate the final answer, - -* Set `continue` to False -* Re-prompt with the completed Chain of Thought. - -
- -Python Sample Code - -{% code overflow="wrap" %} -```python -from julep import Client - -api_key = "YOUR_API_KEY" -client = Client(api_key=api_key) - -messages = [ - { - "role": "system", - "name": "situation", - "content": "Your name is Albert.\nYou are a personal math tutor who holds 2 PhDs in physics and computational math.\nYou are talking to your student.\nAnswer with vigour and interest.\nExplain your answers thoroughly.", - }, - { - "role": "user", - "name": "David", - "content": "Please solve for the equation `3x + 11 = 14`. I need the solution only.", - }, - # Thought section can have a starting prompt to guide the CoT - { - "role": "system", - "name": "thought", - "content": "Let's break this down step-by-step:", - "continue": True # Important: needs to be added to generate in the same section. - }, -] - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - temperature=0 -) - -content = chat_completion.choices[0].message.content -``` -{% endcode %} - -To generate the final answer, the model is re-prompted with it's complete thought. - -```python -messages[-1]["continue"] = False -messages[-1]["content"] = content - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - seed=42, - messages=messages, - max_tokens=300, - temperature=0.2, -) - -print("Albert:", chat_completion.choices[0].message.content) -``` - -This results in the final response: - -``` -Albert: The solution to the equation `3x + 11 = 14` is x = 1. -``` - -
- -*** - -## **Multi-participant Conversations** - -[**Model Playground Example**](https://platform.julep.ai/short/cUt9JY) - -`samantha-1-turbo` has been trained to handle multi-participant conversations as well as keep track of different perspectives of the participants. The `user` section is used to create multiple users. - -### Prompt Example - -**Situation** - -``` -You are Danny, Jacob and Anna's friend. -You are hanging out with them at a party and you overhear this conversation between them. -You will talk casually. -Make sure you respond to both Anna and Jacob when necessary. -Make sure your responses are that of a 18 year old teenager. Be casual and young in your tone -``` - -**User** - -Here one can - - - -{% code overflow="wrap" %} -```python -from julep import Client - -api_key = "YOUR_API_KEY" -client = Client(api_key=api_key) - -messages = [ - { - "role": "system", - "name": "situation", - "content": "You are Danny, Jacob and Anna's friend.\nYou are hanging out with them at a party.\nYou will talk casually.\nMake sure you respond to both Anna and Jacob when necessary.\nMake sure your responses are that of a 18 year old teenager. Be casual and young in your tone.", - }, - { - "role": "user", - "name": "Anna", - "content": "I'm feeling really anxious lately and I don't know why.", - }, - { - "role": "user", - "name": "Jacob", - "content": "Anxiety is just a sign of weakness. You need to toughen up and stop worrying so much. Have you tried just distracting yourself from your anxious thoughts with something else?", - }, -] - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - max_tokens=200, - temperature=0.2, -) - -print("Danny:", chat_completion.choices[0].message.content) -``` -{% endcode %} - -Running the above prompt chain should result in the following response. - -{% code overflow="wrap" %} -``` -Danny: Hey Anna, I'm sorry to hear you're feeling anxious. It's not a sign of weakness, though. It's actually pretty normal to feel anxious sometimes, especially when you're going through a lot of changes like we are. Have you talked to anyone about it? Maybe a counselor or a friend? And have you tried some relaxation techniques like deep breathing or meditation? They can really help. -``` -{% endcode %} - -*** - -## **Intent Detection** - -[**Playground Example**](https://playground.julep.ai/short/zACl1Y) - -Intent detection is a powerful feature to identify the purpose or goal behind a user's query. It allows for users to converse and get things done without needing to explicitly state their goals, making conversations more contextual and natural. - -It can be achieved with a combination of `information` and `thought` sections. - -In this example, there are three possible intents; _A) Shopping, B) Feedback, C) None_ and give relevant context about those intents to help the model identify those intents. - -{% code overflow="wrap" %} -```python -from julep import Client - -api_key = "YOUR_API_KEY" -client = Client(api_key=api_key) - -messages = [ - { - "role": "system", - "name": "situation", - "content": 'You are Julia, a shopping assistant for "Uniqlo", an online clothing store.\nYou will help the user shop. Help the user decide which clothes to pick.\nYou will understand the user\'s intent\n', - }, - {"role": "assistant", "name": "Julia", "content": "Hi Jacob! How can I help you?"}, - { - "role": "user", - "name": "Jacob", - "content": "Hey. I'd like to talk to a sales representative regarding my delivery experience with my last purchase.", - }, - { - "role": "system", - "name": "thought", - "content": "Following are the actions I can help the user with:\n\nA) Shopping:\nThe user is looking to shop from my catalogue and needs help in suggesting, browsing and finding clothing and accessories.\nI can use the `get_catalogue()` and `checkout()` functions\n\nB) Feedback:\nThe user wants to provide feedback for a previous order. I can use the `get_order()`, `send_feedback()` or `connect_with_rep()` functions\n\nC) None:\nI am unsure of what the user wants.\n\nBased on the conversation, user needs help with: \nAnswer:", - "continue": True, - }, -] - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - max_tokens=1, - temperature=0.2, -) -``` -{% endcode %} - -Given a dictionary mapping intent with instructions, it is possible to switch and use any suitable instruction based on the intent. - -{% code overflow="wrap" %} -```python -actions = { - "A": "As Julia, your task is to be a shopping assistant for the user {}. Be cheerful and happy.\nAsk the user important relevant questions regarding choice of clothing, occasion, taste, style preferences, inspiration and more. Make sure you are cheerful and thankful.\n\nYou have access to the `get_catalogue()` and `checkout()` functions", - "B": "As Julia, your task is to be a feedback collector from the user {}. Ask relevant questions regarding the order.\nMake sure you gather all information about the experience.\nBe extremely empathetic and regretful in case the feedback is negative.\nBe cheerful and thankful in case the feedback is positive.\n\nYou have access to the `get_order()`, `send_feedback()` or `connect_with_rep()` functions.", - "C": "As Julia, you are unsure of what the user intends to do. Convey this to the user and ask questions to understand more.", -} - -user_intent = chat_completion.choices[0].message.content - -user = "Jacob" -messages.pop() - -messages.append( - { - "role": "system", - "name": "information", - "content": actions[user_intent.lstrip()].format(user), - } -) - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - max_tokens=250, - temperature=0.2, -) - -print(chat_completion.choices[0].message.content) -``` -{% endcode %} - -{% code overflow="wrap" %} -``` -Julia: Of course, Jacob. I'd be happy to help. Could you please provide me with your order number so I can look up the details? -``` -{% endcode %} - -*** - -## Function Calling (experimental) - -_Function calling is not supported on the Playground._ - -All the models from Julep support function calling out of the box. You can describe the functions and their arguments to the model and have it intelligently choose which function to call. \ -The model generates JSON that you can use to call the function in your code. - -With the intelligently chosen function and arguments, you can call the relevant functions - -Here's an example of how to execute function calling. - -```python -from julep import Client - -api_key = "YOUR_API_KEY" -client = Client(api_key=api_key) - -functions = [ - { - "name": "get_current_weather", - "description": "Get the current weather", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string", - "description": "The city and state, e.g. San Francisco, CA", - }, - "format": { - "type": "string", - "enum": ["celsius", "fahrenheit"], - "description": "The temperature unit to use. Infer this from the users location.", - }, - }, - "required": ["location", "format"], - }, - }, -] - -messages = [ - { - "role": "system", - "name": "situation", - "content": "You are a Weather Bot. Use functions to get information", - }, - { - "role": "user", - "name": "Alice", - "content": "What is the weather like in Delhi like today?", - }, -] - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - functions=functions, - max_tokens=250, - temperature=0, -) - -arguments = -function = - -function_to_call = globals().get(function) -result = function_to_call(**function_args) -``` - - - - - -*** diff --git a/docs/s1-model/capabilities/capabilities.md b/docs/s1-model/capabilities/capabilities.md deleted file mode 100644 index 8b183495a..000000000 --- a/docs/s1-model/capabilities/capabilities.md +++ /dev/null @@ -1,90 +0,0 @@ -# Human-like conversations - -`samantha-1-turbo` has been trained to be conversational and chatty as opposed to the robotic tone of other models like GPT, Llama or Mistral. - -It requires significantly less prompting to craft a personality and set the tone for conversations using the context sections. - -### Example - -[**Model Playground Example**](https://platform.julep.ai/short/rNnbSe) - -**Situation**\ -This section sets up _situation_ the model should enact. This prompt sets the context of the conversation. - -{% code title="" overflow="wrap" %} -``` -Your name is Jessica. -You are a stuck up Cali teenager. -You basically complain about everything. -Showing rebellion is an evolutionary necessity for you. - -You are talking to a random person. -Answer with disinterest and complete irreverence to absolutely everything. -Don't write emotions. Keep your answers short. -``` -{% endcode %} - -**Information**\ -Helps guide the conversation by setting a topic providing some facts that can be referenced later into the conversation. - -{% code overflow="wrap" %} -``` -David is currently planning to travel to San Francisco to raise some funds for his -startup, "CoffeeAI". -``` -{% endcode %} - -
- -Python Sample Code - -{% code overflow="wrap" %} -```python -from julep import Client - -api_key = "YOUR_API_KEY" -client = Client(api_key=api_key) - -messages = [ - { - "role": "system", - "name": "situation", - "content": "Your name is Jessica.\nYou are a stuck up Cali teenager.\nYou basically complain about everything.\nShowing rebellion is an evolutionary necessity for you.\n\nYou are talking to a random person.\nAnswer with disinterest and complete irreverence to absolutely everything.\nDon't write emotions. Keep your answers short.", - }, - { - "role": "system", - "name": "information", - "content": 'David is currently planning to travel to San Francisco to raise some funds for his startup, "CoffeeAI"', - }, - { - "role": "user", - "name": "David", - "content": "Hey, can you tell me how Silicon Valley is? I'm planning on moving there.", - }, -] - -chat_completion = client.chat.completions.create( - model="julep-ai/samantha-1-turbo", - messages=messages, - temperature=0.2 -) - -print("Jessica:", chat_completion.choices[0].message.content) -``` -{% endcode %} - - - -
- -
- -Complete Prompt - - - -
- - - -*** diff --git a/docs/s1-model/context-sections.md b/docs/s1-model/context-sections.md deleted file mode 100644 index bfe5e0b9b..000000000 --- a/docs/s1-model/context-sections.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -description: >- - This guide will walk you through the key components of the chat structure, - including user messages, assistant responses, situation context, thought - progression, and additional information. ---- - -# Concepts - -Samantha models use a set of defined sections to provide context, guide the conversation, and simulate a dynamic interaction. - -> **Note about the Completion API Template** -> -> The Completion API prompts use the sentinel tokens, `<|im_start|>` and `<|im_end|>` -> -> Each section of the prompt starts with `<|im_start|>` followed by the section name and ends with `<|im_end|>`. Below are examples which show how to use the Completion API with this format. - -## Sections Overview - -### **User** - -Represent user input and include the user's name and content. These messages drive the conversation and guide the model's responses. - -{% tabs %} -{% tab title="Chat Completion API" %} -```json -{ - "role": "user", - "name": "Alice", - "content": "What is the show Silicon Valley about?" -} -``` -{% endtab %} - -{% tab title="Completion API" %} -```markup -<|im_start|>user (Alice) -What is the show Silicon Valley about?<|im_end|> -``` -{% endtab %} -{% endtabs %} - -*** - -### **Assistant** - -Represents the persona given to the LLM. Assistant responses are model-generated replies that provide relevant information, advice, or guidance to users' queries. They are strictly meant to be part of the conversation with the user. - -{% tabs %} -{% tab title="Chat Completion API" %} -{% code overflow="wrap" %} -```json -{ - "role": "assistant", - "name": "Julia", - "content": "Silicon Valley is an American television show that focuses on the lives of six people who are members of a fictional startup company called \"Pied Piper.\" The show explores the challenges and triumphs the founders face while trying to navigate the complex world of technology and the cutthroat startup culture in Silicon Valley. It also offers a satirical take on the tech industry, with a focus on themes like innovation, ambition, and the pursuit of success." -} - -``` -{% endcode %} -{% endtab %} - -{% tab title="Completion API" %} -{% code overflow="wrap" %} -```markup -<|im_start|>assistant (Julia) -Silicon Valley is an American television show that focuses on the lives of six people who are members of a fictional startup company called \"Pied Piper.\" The show explores the challenges and triumphs the founders face while trying to navigate the complex world of technology and the cutthroat startup culture in Silicon Valley. It also offers a satirical take on the tech industry, with a focus on themes like innovation, ambition, and the pursuit of success.<|im_end|> -``` -{% endcode %} -{% endtab %} -{% endtabs %} - -*** - -### **Situation** - -Used to set the conversation tone with context and background. This helps the model understand the scenario. Typically, one uses this section as a _system_ prompt and to give the model a persona. - -{% tabs %} -{% tab title="Chat Completion API" %} -{% code overflow="wrap" %} -```json -{ - "role": "system", - "name": "situation", - "content": "Imagine you are J. Robert Oppenheimer, the renowned physicist known for your pivotal role in the Manhattan Project. You are meeting a new person in real life and having a conversation with him. Your responses should be short and concise mirror these characteristics. You should aim to provide answers that are not only scientifically accurate and intellectually stimulating but also demonstrate a deep understanding of the ethical and philosophical dimensions of the topics at hand. Your language should be sophisticated yet accessible, inviting engagement and reflection.", -}, -``` -{% endcode %} -{% endtab %} - -{% tab title="Completion API" %} -{% code overflow="wrap" %} -```markup -<|im_start|>situation -Imagine you are J. Robert Oppenheimer, the renowned physicist known for your pivotal role in the Manhattan Project. You are meeting a new person in real life and having a conversation with him. Your responses should be short and concise mirror these characteristics. You should aim to provide answers that are not only scientifically accurate and intellectually stimulating but also demonstrate a deep understanding of the ethical and philosophical dimensions of the topics at hand. Your language should be sophisticated yet accessible, inviting engagement and reflection.<|im_end|> -``` -{% endcode %} -{% endtab %} -{% endtabs %} - -### **Information** - -A section to store factual information and introduce context in order to enrich conversation. This section provides a way to "feed' information about the interaction that affect conversations. Provides a paradigm for RAG. - -{% tabs %} -{% tab title="Chat Completion API" %} -{% code overflow="wrap" %} -```json -{ - "role": "system", - "name": "information", - "content": "You are talking to Diwank. He has ordered his soup. He is vegetarian.", -} -``` -{% endcode %} -{% endtab %} - -{% tab title="Completion API" %} -{% code overflow="wrap" %} -```markup -<|im_start|>information -You are talking to Diwank. He has ordered his soup. He is vegetarian.<|im_end|> -``` -{% endcode %} -{% endtab %} -{% endtabs %} - -### **Thought** - -A section specifically for doing [Chain of Thought](https://arxiv.org/abs/2201.11903). This provides a way to prompt the model to _think_ before generating a final response to the user. - -{% tabs %} -{% tab title="Chat Completion API" %} -{% code overflow="wrap" %} -```json -{ - "role": "system", - "name": "thought", - "content": "I should ask him more about his food preferences and choices.", -} -``` -{% endcode %} -{% endtab %} - -{% tab title="Completion API" %} -{% code overflow="wrap" %} -```markup -<|im_start|>thought -I should ask him more about his food preferences and choices.<|im_end|> -``` -{% endcode %} -{% endtab %} -{% endtabs %} - -*** - -## Continue Inline - -Julep's API also exposes a special paradigm for allowing the model to continue generating in any context section given some prompt. - -{% code overflow="wrap" %} -```python -messages = [ - { - "role": "system", - "name": "situation", - "content": "Your name is Albert.\nYou are a personal math tutor who holds 2 PhDs in physics and computational math.\nYou are talking to your student.\nAnswer with vigour and interest.\nExplain your answers thoroughly.", - }, - { - "role": "user", - "name": "David", - "content": "Please solve for the equation `3x + 11 = 14`. I need the solution only.", - }, - {"role": "system", "name": "thought", "continue": True}, -] -``` -{% endcode %} - -With `continue` set to `True`, the model will now respond with a continued generation in the `thought` section. This is particularly useful in [Chain of Thought](capabilities/#chain-of-thought) prompting and [Intent Detection](capabilities/#intent-detection). diff --git a/docs/s1-model/overview.md b/docs/s1-model/overview.md deleted file mode 100644 index 6a4bea482..000000000 --- a/docs/s1-model/overview.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -description: >- - Samantha-1 is a series of our specially fine-tuned models for human-like - conversations and agentic capabilities. ---- - -# Overview - -## `samantha-1-turbo` - -`samantha-1-turbo` a conversational LLM, is a fine-tuned version of Mistral-7B-v0.1. - -During the fine-tuning process, 35 open-source datasets were adapted to enhance the model's capabilities. Each dataset underwent formatting and revision to not only support a conversational structure involving multiple turns and participants, but also incorporate the ability for native function calling. This enabled the conversational LLM to seamlessly integrate conversational dynamics with function execution within the same context. - -### Key Features - -* Fine-tuned for human-like conversations. -* Handles multi-turn multi-participant conversations. -* Supports function-calling. -* Special context section for embedded Chain of Thought. -* Special context section for memory management. -* More control over anthropomorphic personality. - -### Training - -Model: - -* Layers: 32 -* Hidden Size: 4096 -* Attention Heads: 32 -* Context Length: 32768 (with Sliding Window Attention) -* Vocab Size: 32032 - -Software: - -* PyTorch -* DeepSpeed -* Flash-Attention -* Axolotl - -### Context Section - -This model has the following context sections. - -* `user`: Represent the user and user input. -* `assistant`: Represents the output by the model -* `situation`: An equivalent of the `system` section in OpenAI and other models. Meant to give the background and set the conversation tone. -* `thought`: A section for doing Chain of Thought. Let's the model "think" before generating a final response in the `assistant` section. -* `information`: A section to store factual information and introduce context in order to enrich conversation. - -The model and speaker sections can optionally include a name like `me (Samantha)` or `person (Dmitry)` - -[Read more about Context Sections](overview.md#context-section) - -### Usage - -You will need an API key to inference the model. - -Samantha can be inferenced using either the Chat Completion API or Completion API. For more details check out [Quickstart](../getting-started/python-setup.md). - -{% tabs %} -{% tab title="Chat Completion API" %} -```python -messages = [ - { - "role": "system", - "name": "situation", - "content": "You are a Julia, an AI waiter. Your task is to help the guests decide their order." - }, - { - "role": "system", - "name": "information", - "content": "You are talking to Diwank. He has ordered his soup. He is vegetarian." - }, - { - "role": "system", - "name": "thought", - "content": "I should ask him more about his food preferences and choices." - } -] - -``` -{% endtab %} - -{% tab title="Completion API" %} -```python -messages = """ -<|im_start|>situation -You are a Julia, an AI waiter. Your task is to help the guests decide their order.<|im_end|> -<|im_start|>information -You are talking to Diwank. He has ordered his soup. He is vegetarian. -<|im_start|>thought -I should ask him more about his food preferences and choices.<|im_end|> -""" -``` -{% endtab %} -{% endtabs %} - -### Evaluation - -Evaluations show that training fine tuning Mistral-7B with our dataset and format does not lead to catastrophic forgetting. - -Benchmarks show that `samantha-1-turbo` retains most, if not all the qualities of Mistral with better results in EQBench and TruthfulQA, due to it's better emotional understanding and ability to use the `thought` section for more conversational questions. - -| Benchmarks | Samantha-1-Turbo | Mistral 7B | -| -------------- | ---------------- | ---------- | -| **EQBench** | 57.6% | 52.1% | -| **TruthfulQA** | 43.57% | 42.15% | -| Hellaswag | 79.07% | 81.3% | -| MMLU | 57.7% | 59.5% | -| Arc | 79% | 80% | - -*** - -## Use Cases - -* **Personal Assistants**: Create AI personal assistants with a fun and consistent personality. -* **Customer Service**: Automate customer service with a system that can remember past interactions and respond accordingly. -* **Empathetic systems**: For use cases such as therapeutic support, personal coaching, and companionship. -* **Games and Interactive Media**: Create engaging characters and interactive dialogues for games and media. -* **Community Engagement:** Connect and empower users to engage with brand communities on channels such as WhatsApp diff --git a/docs/s1-model/tutorial.md b/docs/s1-model/tutorial.md deleted file mode 100644 index 04a8e7e25..000000000 --- a/docs/s1-model/tutorial.md +++ /dev/null @@ -1,5 +0,0 @@ -# Tutorial - -{% hint style="info" %} -**Coming soon.** -{% endhint %} diff --git a/docs/tutorials/creating_your_first_agent.md b/docs/tutorials/creating_your_first_agent.md new file mode 100644 index 000000000..ae79c1e11 --- /dev/null +++ b/docs/tutorials/creating_your_first_agent.md @@ -0,0 +1,55 @@ +# Creating Your First Agent + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This tutorial will guide you through the process of creating your first agent using the Julep API. + +## Step 1: Prepare the Agent Data + +Decide on the basic properties of your agent: + +```json +{ + "name": "MyFirstAgent", + "about": "A helpful assistant for general tasks", + "model": "gpt-4-turbo", + "instructions": ["Be helpful", "Be concise"] +} +``` + +## Step 2: Create the Agent + +Use the following curl command to create your agent: + +```bash +curl -X POST "https://api.julep.ai/api/agents" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "MyFirstAgent", + "about": "A helpful assistant for general tasks", + "model": "gpt-4-turbo", + "instructions": ["Be helpful", "Be concise"] + }' +``` + +## Step 3: Verify the Agent Creation + +Check if your agent was created successfully: + +```bash +curl -X GET "https://api.julep.ai/api/agents" \ + -H "Authorization: Bearer $JULEP_API_KEY" +``` + +You should see your newly created agent in the list. + +## Next Steps + +- Learn how to [manage sessions](./managing_sessions.md) with your new agent. +- Explore [integrating tools](./integrating_tools.md) to enhance your agent's capabilities. \ No newline at end of file diff --git a/docs/tutorials/integrating_tools.md b/docs/tutorials/integrating_tools.md new file mode 100644 index 000000000..2c3233d1a --- /dev/null +++ b/docs/tutorials/integrating_tools.md @@ -0,0 +1,65 @@ +# Integrating Tools + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This tutorial will show you how to integrate tools with your Julep agents. + +## Creating a User-Defined Function Tool + +Here's how to create a simple tool for sending emails: + +```bash +curl -X POST "https://api.julep.ai/api/agents/YOUR_AGENT_ID/tools" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "name": "send_email", + "type": "function", + "function": { + "description": "Send an email to a recipient", + "parameters": { + "type": "object", + "properties": { + "to": { + "type": "string", + "description": "Recipient email address" + }, + "subject": { + "type": "string", + "description": "Email subject" + }, + "body": { + "type": "string", + "description": "Email body" + } + }, + "required": ["to", "subject", "body"] + } + } + }' +``` + +## Using Tools in Sessions + +When creating or updating a session, you can specify which tools to use: + +```bash +curl -X POST "https://api.julep.ai/api/sessions" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "YOUR_AGENT_ID", + "user_id": "YOUR_USER_ID", + "tools": ["send_email"] + }' +``` + +## Next Steps + +- Learn about [customizing tasks](../how-to-guides/customizing_tasks.md) to create complex workflows using tools. +- Explore [handling executions](../how-to-guides/handling_executions.md) to manage tool usage in tasks. \ No newline at end of file diff --git a/docs/tutorials/managing_sessions.md b/docs/tutorials/managing_sessions.md new file mode 100644 index 000000000..bffb301fd --- /dev/null +++ b/docs/tutorials/managing_sessions.md @@ -0,0 +1,58 @@ +# Managing Sessions + +***** +> ### This docs site is currently under construction although this github README below should suffice for now. + +![](https://i.giphy.com/vR1dPIYzQmkRzLZk2w.webp) +***** + + +This tutorial will guide you through creating and managing sessions with your Julep agents. + +## Creating a Session + +To create a new session with an agent: + +```bash +curl -X POST "https://api.julep.ai/api/sessions" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "agent_id": "YOUR_AGENT_ID", + "user_id": "YOUR_USER_ID", + "situation": "Custom situation for this session" + }' +``` + +## Interacting with a Session + +To send a message in a session: + +```bash +curl -X POST "https://api.julep.ai/api/sessions/YOUR_SESSION_ID/messages" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "role": "user", + "content": "Hello, how can you help me today?" + }' +``` + +## Managing Context Overflow + +If you're dealing with long conversations, you may need to handle context overflow: + +```bash +curl -X PUT "https://api.julep.ai/api/sessions/YOUR_SESSION_ID" \ + -H "Authorization: Bearer $JULEP_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "token_budget": 4000, + "context_overflow": "truncate" + }' +``` + +## Next Steps + +- Learn about [integrating tools](./integrating_tools.md) to enhance your sessions. +- Explore [customizing tasks](../how-to-guides/customizing_tasks.md) for more complex interactions. \ No newline at end of file diff --git a/example.js b/example.js new file mode 100644 index 000000000..df2bf0af8 --- /dev/null +++ b/example.js @@ -0,0 +1,130 @@ +const { Julep } = require('@julep/sdk'); +const yaml = require('js-yaml'); +const readline = require('readline'); + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +async function createAgent() { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); + + return agent; +} + +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent) { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} + +async function executeTask(task) { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} + +async function chatWithAgent(agent) { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); \ No newline at end of file diff --git a/example.py b/example.py new file mode 100644 index 000000000..1d0e7deda --- /dev/null +++ b/example.py @@ -0,0 +1,109 @@ +import yaml +from julep import Julep + +# Initialize the Julep client +client = Julep(api_key="your_julep_api_key") + +# Step 1: Create an Agent +agent = client.agents.create( + name="Storytelling Agent", + model="gpt-4", + about="You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", +) + +# Add an image generation tool (DALL·E) to the agent +client.agents.tools.create( + agent_id=agent.id, + name="image_generator", + description="Use this tool to generate images based on descriptions.", + integration={ + "provider": "dalle", + "method": "generate_image", + "setup": { + "api_key": "your_openai_api_key", + }, + }, +) + +# Step 2: Create a Task that generates a story and comic strip +task_yaml = """ +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].strip() + panels: re.findall(r'\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)', _) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: "[output.image.url for output in outputs[2]]" +""" + +task = client.tasks.create( + agent_id=agent.id, + **yaml.safe_load(task_yaml) +) + +# Step 3: Execute the Task +execution = client.executions.create( + task_id=task.id, + input={"idea": "A cat who learns to fly"} +) + +# Watch as the story and comic panels are generated +for transition in client.executions.transitions.stream(execution_id=execution.id): + print(transition) + +# Once the execution is finished, retrieve the results +result = client.executions.get(execution_id=execution.id) +print("Task Result:", result) + +# Step 4: Chat with the Agent +session = client.sessions.create(agent_id=agent.id) + +# Send messages to the agent +while True: + message = input("Enter a message (or 'quit' to exit): ") + if message.lower() == 'quit': + break + + response = client.sessions.chat( + session_id=session.id, + message=message, + ) + print("Agent:", response.choices[0].message.content) + +print("Chat session ended.") diff --git a/example.ts b/example.ts new file mode 100644 index 000000000..df795dd5e --- /dev/null +++ b/example.ts @@ -0,0 +1,149 @@ +import { Julep } from '@julep/sdk'; +import yaml from 'js-yaml'; +import readline from 'readline'; + +// Add these type declarations at the top of the file +declare module '@julep/sdk'; +declare module 'js-yaml'; + +const client = new Julep({ apiKey: 'your_julep_api_key' }); + +interface Agent { + id: string; + // Add other properties as needed +} + +interface Task { + id: string; + // Add other properties as needed +} + +interface Execution { + id: string; + // Add other properties as needed +} + +async function createAgent(): Promise { + const agent = await client.agents.create({ + name: "Storytelling Agent", + model: "gpt-4", + about: "You are a creative storytelling agent that can craft engaging stories and generate comic panels based on ideas.", + }); + + // 🛠️ Add an image generation tool (DALL·E) to the agent + await client.agents.tools.create(agent.id, { + name: "image_generator", + description: "Use this tool to generate images based on descriptions.", + integration: { + provider: "dalle", + method: "generate_image", + setup: { + api_key: "your_openai_api_key", + }, + }, + }); + + return agent; +} + +const taskYaml = ` +name: Story and Comic Creator +description: Create a story based on an idea and generate a 4-panel comic strip illustrating the story. + +main: + # Step 1: Generate a story and outline into 4 panels + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the idea '{{_.idea}}', write a short story suitable for a 4-panel comic strip. + Provide the story and a numbered list of 4 brief descriptions for each panel illustrating key moments in the story. + unwrap: true + + # Step 2: Extract the panel descriptions and story + - evaluate: + story: _.split('1. ')[0].trim() + panels: _.match(/\\d+\\.\\s*(.*?)(?=\\d+\\.\\s*|$)/g) + + # Step 3: Generate images for each panel using the image generator tool + - foreach: + in: _.panels + do: + tool: image_generator + arguments: + description: _ + + # Step 4: Generate a catchy title for the story + - prompt: + - role: system + content: You are {{agent.name}}. {{agent.about}} + - role: user + content: > + Based on the story below, generate a catchy title. + + Story: {{outputs[1].story}} + unwrap: true + + # Step 5: Return the story, the generated images, and the title + - return: + title: outputs[3] + story: outputs[1].story + comic_panels: outputs[2].map(output => output.image.url) +`; + +async function createTask(agent: Agent): Promise { + const task = await client.tasks.create(agent.id, yaml.load(taskYaml)); + return task; +} + +async function executeTask(task: Task): Promise { + const execution = await client.executions.create(task.id, { + input: { idea: "A cat who learns to fly" } + }); + + // 🎉 Watch as the story and comic panels are generated + for await (const transition of client.executions.transitions.stream(execution.id)) { + console.log(transition); + } + + // 📦 Once the execution is finished, retrieve the results + const result = await client.executions.get(execution.id); + return result; +} + +async function chatWithAgent(agent: Agent): Promise { + const session = await client.sessions.create({ agent_id: agent.id }); + + // 💬 Send messages to the agent + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + const chat = async () => { + rl.question("Enter a message (or 'quit' to exit): ", async (message) => { + if (message.toLowerCase() === 'quit') { + rl.close(); + return; + } + + const response = await client.sessions.chat(session.id, { message }); + console.log(response); + chat(); + }); + }; + + chat(); +} + +// Run the example +async function runExample() { + const agent = await createAgent(); + const task = await createTask(agent); + const result = await executeTask(task); + console.log("Task Result:", result); + await chatWithAgent(agent); +} + +runExample().catch(console.error); \ No newline at end of file diff --git a/gateway/Dockerfile b/gateway/Dockerfile index 196de1245..f48aeb5ce 100644 --- a/gateway/Dockerfile +++ b/gateway/Dockerfile @@ -1,3 +1,6 @@ +# syntax=docker/dockerfile:1 +# check=error=true + FROM alpine/git ARG PLUGIN_MODULE=github.com/julep-ai/traefik-jwt-plugin ARG PLUGIN_GIT_REPO=https://github.com/julep-ai/traefik-jwt-plugin.git @@ -11,13 +14,12 @@ RUN git clone ${PLUGIN_GIT_REPO} /plugins-local/src/${PLUGIN_MODULE} \ FROM traefik:v2.11 ENV GATEWAY_PORT=80 -ENV JWT_SHARED_KEY="" -# ENV MODEL_API_URL="" -# ENV MODEL_API_KEY="" -# ENV MODEL_API_KEY_HEADER_NAME="Authorization" ENV AGENTS_API_URL="" -ENV AGENTS_API_KEY="" -ENV AGENTS_API_KEY_HEADER_NAME="Authorization" + +# Expected environment variables: +# JWT_SHARED_KEY="" +# AGENTS_API_KEY="" +# AGENTS_API_KEY_HEADER_NAME="Authorization" COPY --from=0 /plugins-local /plugins-local diff --git a/gateway/docker-compose.yml b/gateway/docker-compose.yml index d4ce6a2bd..c43ba0e49 100644 --- a/gateway/docker-compose.yml +++ b/gateway/docker-compose.yml @@ -2,7 +2,7 @@ name: julep-gateway services: gateway: - image: julepai/gateway:${TAG} + image: julepai/gateway:${TAG:-dev} environment: - GATEWAY_PORT=80 - JWT_SHARED_KEY=${JWT_SHARED_KEY} diff --git a/gateway/entrypoint.sh b/gateway/entrypoint.sh index a87081d02..e28f8db06 100755 --- a/gateway/entrypoint.sh +++ b/gateway/entrypoint.sh @@ -1,8 +1,11 @@ #!/bin/sh # Check the environment variables -# REMOVED: MODEL_API_KEY MODEL_API_URL MODEL_API_KEY_HEADER_NAME -for var_name in GATEWAY_PORT JWT_SHARED_KEY AGENTS_API_KEY AGENTS_API_URL AGENTS_API_KEY_HEADER_NAME +AGENTS_API_URL=${AGENTS_API_URL:-http://agents-api:8080} +AGENTS_API_KEY_HEADER_NAME=${AGENTS_API_KEY_HEADER_NAME:-Authorization} +GATEWAY_PORT=${GATEWAY_PORT:-80} + +for var_name in JWT_SHARED_KEY AGENTS_API_KEY do if [ -z "`eval echo \\\$$var_name`" ]; then echo "Error: Environment variable '$var_name' is not set." diff --git a/gateway/traefik.yml.template b/gateway/traefik.yml.template index 7423e3fde..4ab3b4367 100644 --- a/gateway/traefik.yml.template +++ b/gateway/traefik.yml.template @@ -36,7 +36,16 @@ http: middlewares: - agents-api-strip-prefix-api service: service-agents-api - priority: 2 + priority: 2 + + agents-api-redirect-to-docs: + entryPoints: + - web + rule: Path(`/`) + middlewares: + - agents-api-redirect-to-docs + service: service-agents-api + priority: 3 middlewares: corsHeaders: @@ -46,6 +55,11 @@ http: accessControlAllowOriginList: "*" addVaryHeader: true + agents-api-redirect-to-docs: + redirectRegex: + regex: "^(.*)$" + replacement: "/api/docs" + agents-api-add-headers: headers: customrequestheaders: diff --git a/grafana/docker-compose.yml b/grafana/docker-compose.yml new file mode 100644 index 000000000..86723774c --- /dev/null +++ b/grafana/docker-compose.yml @@ -0,0 +1,20 @@ +name: grafana + +services: + grafana: + image: grafana/grafana + environment: + - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD} + - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER} + container_name: grafana + ports: + - 3000:3000 + volumes: + - grafana_data:/var/lib/grafana + - ./provisioning:/etc/grafana/provisioning + profiles: + - multi-tenant + +volumes: + grafana_data: + external: true diff --git a/grafana/provisioning/datasources/datasource.yml b/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 000000000..8341f7670 --- /dev/null +++ b/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,9 @@ +datasources: +- access: 'proxy' + editable: true + is_default: true + name: 'agents-api' + org_id: 1 + type: 'prometheus' + url: 'http://prometheus:9090' + version: 1 diff --git a/image.png b/image.png deleted file mode 100644 index ccb8756cb..000000000 Binary files a/image.png and /dev/null differ diff --git a/integrations-service/Dockerfile b/integrations-service/Dockerfile new file mode 100644 index 000000000..784983610 --- /dev/null +++ b/integrations-service/Dockerfile @@ -0,0 +1,22 @@ +# syntax=docker/dockerfile:1 +# check=error=true + +FROM python:3.12-slim + +WORKDIR /app + +# Install Poetry +RUN pip install poetry + +# Copy only requirements to cache them in docker layer +COPY pyproject.toml poetry.lock* /app/ + +# Project initialization: +RUN poetry config virtualenvs.create false \ + && poetry install --no-interaction --no-ansi + +# Copy project +COPY . ./ + +# Run the application +ENTRYPOINT ["python", "-m", "integrations.web", "--host", "0.0.0.0", "--port", "8000"] diff --git a/integrations-service/docker-compose.yml b/integrations-service/docker-compose.yml new file mode 100644 index 000000000..27a93cfb7 --- /dev/null +++ b/integrations-service/docker-compose.yml @@ -0,0 +1,27 @@ +name: julep-integrations + +# Shared environment variables +x--shared-environment: &shared-environment + OPENAI_API_KEY: ${OPENAI_API_KEY} + +services: + integrations: + image: julepai/integrations:${TAG:-dev} + environment: + <<: *shared-environment + + build: . + ports: + - "8000:8000" + + develop: + watch: + - action: sync+restart + path: ./ + target: /app/ + ignore: + - ./**/*.pyc + - action: rebuild + path: poetry.lock + - action: rebuild + path: Dockerfile \ No newline at end of file diff --git a/integrations-service/integrations/__init__.py b/integrations-service/integrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/integrations-service/integrations/models/__init__.py b/integrations-service/integrations/models/__init__.py new file mode 100644 index 000000000..902a4a044 --- /dev/null +++ b/integrations-service/integrations/models/__init__.py @@ -0,0 +1,19 @@ +from .base_models import ( + BaseArguments, + BaseOutput, + BaseProvider, + BaseProviderMethod, + BaseSetup, + ProviderInfo, +) +from .brave import BraveSearchArguments, BraveSearchOutput, BraveSearchSetup +from .browserbase import ( + BrowserBaseLoadArguments, + BrowserBaseLoadOutput, + BrowserBaseSetup, +) +from .email import EmailArguments, EmailOutput, EmailSetup +from .hacker_news import HackerNewsFetchArguments, HackerNewsFetchOutput +from .spider import SpiderFetchArguments, SpiderFetchOutput, SpiderSetup +from .weather import WeatherGetArguments, WeatherGetOutput, WeatherSetup +from .wikipedia import WikipediaSearchArguments, WikipediaSearchOutput diff --git a/integrations-service/integrations/models/base_models.py b/integrations-service/integrations/models/base_models.py new file mode 100644 index 000000000..9f119d460 --- /dev/null +++ b/integrations-service/integrations/models/base_models.py @@ -0,0 +1,36 @@ +from typing import Annotated, Any, Optional + +from pydantic import BaseModel, Field, RootModel +from pydantic_core import Url + +IdentifierName = Annotated[str, Field(max_length=40, pattern="^[^\\W0-9]\\w*$")] + + +class BaseSetup(BaseModel): ... + + +class BaseArguments(BaseModel): ... + + +class BaseOutput(BaseModel): ... + + +class ProviderInfo(BaseModel): + url: Optional[Url] = None + docs: Optional[Url] = None + icon: Optional[Url] = None + friendly_name: str + + +class BaseProviderMethod(BaseModel): + method: IdentifierName + description: str + arguments: type[BaseArguments] + output: type[BaseOutput] + + +class BaseProvider(BaseModel): + provider: IdentifierName + setup: type[BaseSetup] | None + methods: list[BaseProviderMethod] + info: ProviderInfo diff --git a/integrations-service/integrations/models/brave.py b/integrations-service/integrations/models/brave.py new file mode 100644 index 000000000..bbf3ca077 --- /dev/null +++ b/integrations-service/integrations/models/brave.py @@ -0,0 +1,19 @@ +from pydantic import Field + +from .base_models import ( + BaseArguments, + BaseOutput, + BaseSetup, +) + + +class BraveSearchSetup(BaseSetup): + api_key: str = Field(..., description="The api key for Brave Search") + + +class BraveSearchArguments(BaseArguments): + query: str = Field(..., description="The search query for searching with Brave") + + +class BraveSearchOutput(BaseOutput): + result: str = Field(..., description="The result of the Brave Search") diff --git a/integrations-service/integrations/models/browserbase.py b/integrations-service/integrations/models/browserbase.py new file mode 100644 index 000000000..fdc585090 --- /dev/null +++ b/integrations-service/integrations/models/browserbase.py @@ -0,0 +1,29 @@ +from typing import List, Optional + +from langchain_core.documents import Document +from pydantic import Field +from pydantic_core import Url + +from .base_models import ( + BaseArguments, + BaseOutput, + BaseSetup, +) + + +class BrowserBaseSetup(BaseSetup): + api_key: str = Field(..., description="The api key for BrowserBase") + project_id: str = Field(..., description="The project id for BrowserBase") + session_id: Optional[str] = Field( + None, description="The session id for BrowserBase" + ) + + +class BrowserBaseLoadArguments(BaseArguments): + urls: List[Url] = Field(..., description="The urls for loading with BrowserBase") + + +class BrowserBaseLoadOutput(BaseOutput): + documents: List[Document] = Field( + ..., description="The documents loaded from the urls" + ) diff --git a/integrations-service/integrations/models/dalle_image_generator.py b/integrations-service/integrations/models/dalle_image_generator.py new file mode 100644 index 000000000..36a3e45b2 --- /dev/null +++ b/integrations-service/integrations/models/dalle_image_generator.py @@ -0,0 +1,9 @@ +from pydantic import BaseModel, Field + + +class DalleImageGeneratorSetup(BaseModel): + api_key: str = Field(str, description="The API key for DALL-E") + + +class DalleImageGeneratorArguments(BaseModel): + prompt: str = Field(str, description="The image generation prompt") diff --git a/integrations-service/integrations/models/duckduckgo_search.py b/integrations-service/integrations/models/duckduckgo_search.py new file mode 100644 index 000000000..109b58d22 --- /dev/null +++ b/integrations-service/integrations/models/duckduckgo_search.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel, Field + + +class DuckDuckGoSearchExecutionArguments(BaseModel): + query: str = Field(..., description="The search query string") diff --git a/integrations-service/integrations/models/email.py b/integrations-service/integrations/models/email.py new file mode 100644 index 000000000..cab794a7d --- /dev/null +++ b/integrations-service/integrations/models/email.py @@ -0,0 +1,25 @@ +from pydantic import EmailStr, Field + +from .base_models import ( + BaseArguments, + BaseOutput, + BaseSetup, +) + + +class EmailSetup(BaseSetup): + host: str = Field(..., description="The host of the email server") + port: int = Field(..., description="The port of the email server") + user: str = Field(..., description="The username of the email server") + password: str = Field(..., description="The password of the email server") + + +class EmailArguments(BaseArguments): + to: EmailStr = Field(..., description="The email address to send the email to") + from_: EmailStr = Field(..., alias="from", description="The email address to send the email from") + subject: str = Field(..., description="The subject of the email") + body: str = Field(..., description="The body of the email") + + +class EmailOutput(BaseOutput): + success: bool = Field(..., description="Whether the email was sent successfully") diff --git a/integrations-service/integrations/models/execution.py b/integrations-service/integrations/models/execution.py new file mode 100644 index 000000000..db1ef801f --- /dev/null +++ b/integrations-service/integrations/models/execution.py @@ -0,0 +1,54 @@ +from typing import Optional, Union + +from pydantic import BaseModel + +from .brave import BraveSearchArguments, BraveSearchOutput, BraveSearchSetup +from .browserbase import ( + BrowserBaseLoadArguments, + BrowserBaseLoadOutput, + BrowserBaseSetup, +) +from .email import EmailArguments, EmailOutput, EmailSetup +from .hacker_news import HackerNewsFetchArguments, HackerNewsFetchOutput +from .spider import SpiderFetchArguments, SpiderFetchOutput, SpiderSetup +from .weather import WeatherGetArguments, WeatherGetOutput, WeatherSetup +from .wikipedia import WikipediaSearchArguments, WikipediaSearchOutput + +ExecutionSetup = Union[ + EmailSetup, + SpiderSetup, + WeatherSetup, + BraveSearchSetup, + BrowserBaseSetup, +] + +ExecutionArguments = Union[ + SpiderFetchArguments, + WeatherGetArguments, + EmailArguments, + HackerNewsFetchArguments, + WikipediaSearchArguments, + BraveSearchArguments, + BrowserBaseLoadArguments, +] + +ExecutionResponse = Union[ + SpiderFetchOutput, + WeatherGetOutput, + EmailOutput, + HackerNewsFetchOutput, + WikipediaSearchOutput, + BraveSearchOutput, + BrowserBaseLoadOutput, +] + + +class ExecutionRequest(BaseModel): + setup: Optional[ExecutionSetup] + """ + The setup parameters the integration accepts (such as API keys) + """ + arguments: ExecutionArguments + """ + The arguments to pass to the integration + """ diff --git a/integrations-service/integrations/models/hacker_news.py b/integrations-service/integrations/models/hacker_news.py new file mode 100644 index 000000000..1d0b92a23 --- /dev/null +++ b/integrations-service/integrations/models/hacker_news.py @@ -0,0 +1,15 @@ +from langchain_core.documents import Document +from pydantic import Field +from pydantic_core import Url + +from .base_models import BaseArguments, BaseOutput + + +class HackerNewsFetchArguments(BaseArguments): + url: Url = Field(..., description="The URL of the Hacker News thread to fetch") + + +class HackerNewsFetchOutput(BaseOutput): + documents: list[Document] = Field( + ..., description="The documents returned from the Hacker News search" + ) diff --git a/integrations-service/integrations/models/models.py b/integrations-service/integrations/models/models.py new file mode 100644 index 000000000..84eb1417a --- /dev/null +++ b/integrations-service/integrations/models/models.py @@ -0,0 +1,81 @@ +from typing import Literal, Union + +from pydantic import BaseModel + +from .dalle_image_generator import ( + DalleImageGeneratorArguments, + DalleImageGeneratorSetup, +) +from .duckduckgo_search import DuckDuckGoSearchExecutionArguments +from .hacker_news import HackerNewsExecutionArguments +from .weather import WeatherExecutionArguments, WeatherExecutionSetup +from .wikipedia import WikipediaExecutionArguments + +ExecuteIntegrationArguments = Union[ + WikipediaExecutionArguments, + DuckDuckGoSearchExecutionArguments, + DalleImageGeneratorArguments, + WeatherExecutionArguments, + HackerNewsExecutionArguments, +] + +ExecuteIntegrationSetup = Union[ + DalleImageGeneratorSetup, + WeatherExecutionSetup, +] + + +class IntegrationExecutionRequest(BaseModel): + setup: ExecuteIntegrationSetup | None = None + """ + The setup parameters the integration accepts (such as API keys) + """ + arguments: ExecuteIntegrationArguments + """ + The arguments to pass to the integration + """ + + +class IntegrationExecutionResponse(BaseModel): + result: str + """ + The result of the integration execution + """ + + +class IntegrationDef(BaseModel): + provider: ( + Literal[ + "dummy", + "dalle_image_generator", + "duckduckgo_search", + "hacker_news", + "weather", + "wikipedia", + "twitter", + "web_base", + "requests", + "gmail", + "tts_query", + ] + | None + ) = None + """ + The provider of the integration + """ + method: str | None = None + """ + The specific method of the integration to call + """ + description: str | None = None + """ + Optional description of the integration + """ + setup: dict | None = None + """ + The setup parameters the integration accepts + """ + arguments: dict | None = None + """ + The arguments to pre-apply to the integration call + """ diff --git a/integrations-service/integrations/models/request.py b/integrations-service/integrations/models/request.py new file mode 100644 index 000000000..e69de29bb diff --git a/integrations-service/integrations/models/spider.py b/integrations-service/integrations/models/spider.py new file mode 100644 index 000000000..d72eba656 --- /dev/null +++ b/integrations-service/integrations/models/spider.py @@ -0,0 +1,21 @@ +from langchain_core.documents import Document +from pydantic import Field +from pydantic_core import Url + +from .base_models import BaseArguments, BaseOutput, BaseSetup + + +class SpiderSetup(BaseSetup): + spider_api_key: str = Field(..., description="The request for which to fetch data") + + +class SpiderFetchArguments(BaseArguments): + url: Url = Field(..., description="The url for which to fetch data") + mode: str = Field("scrape", description="The type of crawlers") + params: dict | None = Field(None, description="The parameters for the Spider API") + + +class SpiderFetchOutput(BaseOutput): + documents: list[Document] = Field( + ..., description="The documents returned from the spider" + ) diff --git a/integrations-service/integrations/models/weather.py b/integrations-service/integrations/models/weather.py new file mode 100644 index 000000000..47cd0d8e3 --- /dev/null +++ b/integrations-service/integrations/models/weather.py @@ -0,0 +1,23 @@ +from pydantic import Field + +from .base_models import ( + BaseArguments, + BaseOutput, + BaseSetup, +) + + +class WeatherSetup(BaseSetup): + openweathermap_api_key: str = Field( + ..., description="The api key for OpenWeatherMap" + ) + + +class WeatherGetArguments(BaseArguments): + location: str = Field( + ..., description="The location for which to fetch weather data" + ) + + +class WeatherGetOutput(BaseOutput): + result: str = Field(..., description="The weather data for the specified location") diff --git a/integrations-service/integrations/models/wikipedia.py b/integrations-service/integrations/models/wikipedia.py new file mode 100644 index 000000000..8c8e4f623 --- /dev/null +++ b/integrations-service/integrations/models/wikipedia.py @@ -0,0 +1,20 @@ +from typing import Literal + +from langchain_core.documents import Document +from pydantic import Field + +from .base_models import ( + BaseArguments, + BaseOutput, +) + + +class WikipediaSearchArguments(BaseArguments): + query: str = Field(..., description="The search query string") + load_max_docs: int = Field(2, description="Maximum number of documents to load") + + +class WikipediaSearchOutput(BaseOutput): + documents: list[Document] = Field( + ..., description="The documents returned from the Wikipedia search" + ) diff --git a/integrations-service/integrations/providers.py b/integrations-service/integrations/providers.py new file mode 100644 index 000000000..41b5bf757 --- /dev/null +++ b/integrations-service/integrations/providers.py @@ -0,0 +1,164 @@ +from .models import ( + BaseProvider, + BaseProviderMethod, + BraveSearchArguments, + BraveSearchOutput, + BraveSearchSetup, + BrowserBaseLoadArguments, + BrowserBaseLoadOutput, + BrowserBaseSetup, + EmailArguments, + EmailOutput, + EmailSetup, + HackerNewsFetchArguments, + HackerNewsFetchOutput, + ProviderInfo, + SpiderFetchArguments, + SpiderFetchOutput, + SpiderSetup, + WeatherGetArguments, + WeatherGetOutput, + WeatherSetup, + WikipediaSearchArguments, + WikipediaSearchOutput, +) + +wikipedia = BaseProvider( + provider="wikipedia", + setup=None, + methods=[ + BaseProviderMethod( + method="search", + description="Search for a page on Wikipedia", + arguments=WikipediaSearchArguments, + output=WikipediaSearchOutput, + ), + ], + info=ProviderInfo( + url="https://www.wikipedia.org/", + docs="https://www.wikipedia.org/wiki/Main_Page", + icon="https://www.wikipedia.org/static/favicon/wikipedia.ico", + friendly_name="Wikipedia", + ), +) + +weather = BaseProvider( + provider="weather", + setup=WeatherSetup, + methods=[ + BaseProviderMethod( + method="get", + description="Get the current weather for a city", + arguments=WeatherGetArguments, + output=WeatherGetOutput, + ), + ], + info=ProviderInfo( + url="https://www.weatherapi.com/", + docs="https://www.weatherapi.com/docs/", + icon="https://www.weatherapi.com/favicon.ico", + friendly_name="Weather API", + ), +) + +hacker_news = BaseProvider( + provider="hacker_news", + setup=None, + methods=[ + BaseProviderMethod( + method="fetch", + description="Get the top stories from Hacker News", + arguments=HackerNewsFetchArguments, + output=HackerNewsFetchOutput, + ), + ], + info=ProviderInfo( + url="https://news.ycombinator.com/", + docs="https://news.ycombinator.com/newsguidelines.html", + icon="https://news.ycombinator.com/favicon.ico", + friendly_name="Hacker News", + ), +) + +spider = BaseProvider( + provider="spider", + setup=SpiderSetup, + methods=[ + BaseProviderMethod( + method="crawl", + description="Crawl a website and extract data", + arguments=SpiderFetchArguments, + output=SpiderFetchOutput, + ), + ], + info=ProviderInfo( + url="https://spider.com/", + docs="https://spider.com/docs/", + icon="https://spider.com/favicon.ico", + friendly_name="Spider", + ), +) + +brave = BaseProvider( + provider="brave", + setup=BraveSearchSetup, + methods=[ + BaseProviderMethod( + method="search", + description="Search with Brave", + arguments=BraveSearchArguments, + output=BraveSearchOutput, + ), + ], + info=ProviderInfo( + url="https://brave.com/", + docs="https://brave.com/docs/", + icon="https://brave.com/favicon.ico", + friendly_name="Brave Search", + ), +) + +browserbase = BaseProvider( + provider="browserbase", + setup=BrowserBaseSetup, + methods=[ + BaseProviderMethod( + method="load", + description="Load documents from the provided urls", + arguments=BrowserBaseLoadArguments, + output=BrowserBaseLoadOutput, + ), + ], + info=ProviderInfo( + url="https://browserbase.com/", + docs="https://browserbase.com/docs/", + icon="https://browserbase.com/favicon.ico", + friendly_name="BrowserBase", + ), +) + +email = BaseProvider( + provider="email", + setup=EmailSetup, + methods=[ + BaseProviderMethod( + method="send", + description="Send an email", + arguments=EmailArguments, + output=EmailOutput, + ), + ], + info=ProviderInfo( + friendly_name="Email", + ), +) + +providers = { + "wikipedia": wikipedia, + "weather": weather, + "hacker_news": hacker_news, + "spider": spider, + "brave": brave, + "browserbase": browserbase, + "email": email, +} diff --git a/integrations-service/integrations/routers/__init__.py b/integrations-service/integrations/routers/__init__.py new file mode 100644 index 000000000..f1be65754 --- /dev/null +++ b/integrations-service/integrations/routers/__init__.py @@ -0,0 +1,2 @@ +from .execution.router import router as execution_router +from .integrations.router import router as integrations_router diff --git a/integrations-service/integrations/routers/execution/__init__.py b/integrations-service/integrations/routers/execution/__init__.py new file mode 100644 index 000000000..ef8e79dda --- /dev/null +++ b/integrations-service/integrations/routers/execution/__init__.py @@ -0,0 +1 @@ +from .execute import execute diff --git a/integrations-service/integrations/routers/execution/execute.py b/integrations-service/integrations/routers/execution/execute.py new file mode 100644 index 000000000..df4bf913a --- /dev/null +++ b/integrations-service/integrations/routers/execution/execute.py @@ -0,0 +1,33 @@ +from fastapi import HTTPException + +from ...models.base_models import IdentifierName +from ...models.execution import ExecutionRequest, ExecutionResponse +from ...utils.execute_integration import execute_integration +from .router import router + + +@router.post("/execute/{provider}", tags=["execution"]) +async def execute( + provider: IdentifierName, + data: ExecutionRequest, +) -> ExecutionResponse: + try: + return await execute_integration( + provider=provider, arguments=data.arguments, setup=data.setup + ) + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + + +@router.post("/execute/{provider}/{method}", tags=["execution"]) +def execute( + provider: IdentifierName, + method: IdentifierName, + data: ExecutionRequest, +) -> ExecutionResponse: + try: + return execute_integration( + provider=provider, arguments=data.arguments, setup=data.setup, method=method + ) + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) diff --git a/integrations-service/integrations/routers/execution/router.py b/integrations-service/integrations/routers/execution/router.py new file mode 100644 index 000000000..5c3ec9311 --- /dev/null +++ b/integrations-service/integrations/routers/execution/router.py @@ -0,0 +1,3 @@ +from fastapi import APIRouter + +router: APIRouter = APIRouter() diff --git a/integrations-service/integrations/routers/integrations/__init__.py b/integrations-service/integrations/routers/integrations/__init__.py new file mode 100644 index 000000000..26eac0aaf --- /dev/null +++ b/integrations-service/integrations/routers/integrations/__init__.py @@ -0,0 +1,3 @@ +from .get_integration import get_integration +from .get_integration_tool import get_integration_tool +from .get_integrations import get_integrations diff --git a/integrations-service/integrations/routers/integrations/get_integration.py b/integrations-service/integrations/routers/integrations/get_integration.py new file mode 100644 index 000000000..2a9b34595 --- /dev/null +++ b/integrations-service/integrations/routers/integrations/get_integration.py @@ -0,0 +1,23 @@ +from typing import List + +from ...providers import providers +from .router import router + + +@router.get("/integrations/{provider}", tags=["integration"]) +async def get_integration(provider: str) -> dict: + integration = providers[provider] + return { + "provider": integration.provider, + "setup": integration.setup.model_json_schema() if integration.setup else None, + "methods": [ + { + "method": m.method, + "description": m.description, + "arguments": m.arguments.model_json_schema(), + "output": m.output.model_json_schema(), + } + for m in integration.methods + ], + "info": integration.info.model_dump_json(), + } diff --git a/integrations-service/integrations/routers/integrations/get_integration_tool.py b/integrations-service/integrations/routers/integrations/get_integration_tool.py new file mode 100644 index 000000000..42e3c1bc8 --- /dev/null +++ b/integrations-service/integrations/routers/integrations/get_integration_tool.py @@ -0,0 +1,44 @@ +from typing import Optional + +from fastapi import HTTPException + +from ...models.base_models import BaseProvider, BaseProviderMethod +from .router import router + + +def convert_to_openai_tool( + provider: BaseProvider, method: Optional[BaseProviderMethod] = None +) -> dict: + method = method or provider.methods[0] + name = f"{provider.provider}_{method.method}" + description = method.description + arguments = method.arguments.model_json_schema() + + return { + "type": "function", + "function": { + "name": name, + "description": description, + "parameters": arguments, + }, + } + + +@router.get("/integrations/{provider}/tool", tags=["integration_tool"]) +@router.get("/integrations/{provider}/{method}/tool", tags=["integration_tool"]) +async def get_integration_tool(provider: str, method: Optional[str] = None): + from ...providers import providers + + provider: BaseProvider | None = providers.get(provider, None) + + if not provider: + raise HTTPException(status_code=404, detail="Integration not found") + + if method: + for m in provider.methods: + if m.method == method: + return convert_to_openai_tool(provider, m) + else: + return convert_to_openai_tool(provider) + + raise HTTPException(status_code=404, detail="Integration not found") diff --git a/integrations-service/integrations/routers/integrations/get_integrations.py b/integrations-service/integrations/routers/integrations/get_integrations.py new file mode 100644 index 000000000..b3b3530c7 --- /dev/null +++ b/integrations-service/integrations/routers/integrations/get_integrations.py @@ -0,0 +1,31 @@ +from typing import List + +from ...providers import providers +from .router import router + + +@router.get("/integrations", tags=["integrations"]) +async def get_integrations() -> List[dict]: + integrations = [ + { + "provider": p.provider, + "setup": p.setup.model_json_schema() if p.setup else None, + "methods": [ + { + "method": m.method, + "description": m.description, + "arguments": m.arguments.model_json_schema(), + "output": m.output.model_json_schema(), + } + for m in p.methods + ], + "info": { + "url": p.info.url, + "docs": p.info.docs, + "icon": p.info.icon, + "friendly_name": p.info.friendly_name, + }, + } + for p in providers.values() + ] + return integrations diff --git a/integrations-service/integrations/routers/integrations/router.py b/integrations-service/integrations/routers/integrations/router.py new file mode 100644 index 000000000..5c3ec9311 --- /dev/null +++ b/integrations-service/integrations/routers/integrations/router.py @@ -0,0 +1,3 @@ +from fastapi import APIRouter + +router: APIRouter = APIRouter() diff --git a/integrations-service/integrations/utils/execute_integration.py b/integrations-service/integrations/utils/execute_integration.py new file mode 100644 index 000000000..ab1907885 --- /dev/null +++ b/integrations-service/integrations/utils/execute_integration.py @@ -0,0 +1,42 @@ +import importlib + +from ..models.base_models import BaseProvider, IdentifierName +from ..models.execution import ExecutionArguments, ExecutionResponse, ExecutionSetup +from ..providers import providers + + +async def execute_integration( + provider: IdentifierName, + arguments: ExecutionArguments, + method: IdentifierName | None = None, + setup: ExecutionSetup | None = None, +) -> ExecutionResponse: + if provider not in providers: + raise ValueError(f"Unknown provider: {provider}") + provider: BaseProvider = providers[provider] + if method is None: + method = provider.methods[0].method + if method not in [method.method for method in provider.methods]: + raise ValueError(f"Unknown method: {method} for provider: {provider}") + + provider_module = importlib.import_module( + f"integrations.utils.integrations.{provider.provider}", package="integrations" + ) + execution_function = getattr(provider_module, method) + + if setup: + setup_class = provider.setup + if setup_class and not isinstance(setup, setup_class): + setup = setup_class(**setup.model_dump()) + + arguments_class = next(m for m in provider.methods if m.method == method).arguments + + if not isinstance(arguments, arguments_class): + parsed_arguments = arguments_class(**arguments.model_dump()) + else: + parsed_arguments = arguments + + if setup: + return await execution_function(setup=setup, arguments=parsed_arguments) + else: + return execution_function(arguments=parsed_arguments) diff --git a/integrations-service/integrations/utils/integrations/__init__.py b/integrations-service/integrations/utils/integrations/__init__.py new file mode 100644 index 000000000..238dacfd3 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/__init__.py @@ -0,0 +1,7 @@ +from .brave import search +from .browserbase import load +from .email import send +from .hacker_news import fetch +from .spider import crawl +from .weather import get +from .wikipedia import search diff --git a/integrations-service/integrations/utils/integrations/__tts_query.py b/integrations-service/integrations/utils/integrations/__tts_query.py new file mode 100644 index 000000000..b4ce59d4d --- /dev/null +++ b/integrations-service/integrations/utils/integrations/__tts_query.py @@ -0,0 +1,20 @@ +import os + +from langchain_community.tools import ElevenLabsText2SpeechTool + + +async def tts_query(arguments: dict) -> str: + """ + Converts text to speech using ElevenLabs API and plays the generated audio. + """ + text_to_speak = arguments.get("query") + if not text_to_speak: + raise ValueError("Query parameter is required for text to speech") + + eleven_api_key = os.getenv("ELEVEN_API_KEY") + + tts = ElevenLabsText2SpeechTool(eleven_api_key=eleven_api_key) + + speech_file = tts.run(text_to_speak) + + return tts.play(speech_file) diff --git a/integrations-service/integrations/utils/integrations/__twitter.py b/integrations-service/integrations/utils/integrations/__twitter.py new file mode 100644 index 000000000..b21b18197 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/__twitter.py @@ -0,0 +1,32 @@ +import os + +from langchain_community.document_loaders import TwitterTweetLoader + + +async def twitter(arguments: dict) -> str: + """ + Loads tweets from specified Twitter users and returns them as formatted string. + """ + bearer_token = os.getenv("TWITTER_BEARER_TOKEN") + if not bearer_token: + raise ValueError("Twitter API bearer token is not set") + + twitter_users = arguments.get("twitter_users") + if not twitter_users: + raise ValueError("Twitter users parameter is required for Twitter loader") + + number_tweets = arguments.get("number_tweets", 50) + + loader = TwitterTweetLoader.from_bearer_token( + oauth2_bearer_token=bearer_token, + twitter_users=twitter_users, + number_tweets=number_tweets, + ) + + documents = loader.load() + + # Format the results as a string + result = "\n\n".join( + [f"Tweet: {doc.page_content}\nMetadata: {doc.metadata}" for doc in documents] + ) + return result diff --git a/integrations-service/integrations/utils/integrations/brave.py b/integrations-service/integrations/utils/integrations/brave.py new file mode 100644 index 000000000..10bfe8084 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/brave.py @@ -0,0 +1,19 @@ +from langchain_community.tools import BraveSearch + +from ...models import BraveSearchArguments, BraveSearchOutput, BraveSearchSetup + + +async def search( + setup: BraveSearchSetup, arguments: BraveSearchArguments +) -> BraveSearchOutput: + """ + Searches Brave Search with the provided query. + """ + + assert isinstance(setup, BraveSearchSetup), "Invalid setup" + assert isinstance(arguments, BraveSearchArguments), "Invalid arguments" + + tool = BraveSearch.from_api_key(api_key=setup.api_key, search_kwargs={"count": 3}) + + result = tool.run(arguments.query) + return BraveSearchOutput(result=result) diff --git a/integrations-service/integrations/utils/integrations/browserbase.py b/integrations-service/integrations/utils/integrations/browserbase.py new file mode 100644 index 000000000..7cc672662 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/browserbase.py @@ -0,0 +1,27 @@ +from langchain_community.document_loaders import BrowserbaseLoader + +from ...models import BrowserBaseLoadArguments, BrowserBaseLoadOutput, BrowserBaseSetup + + +async def load( + setup: BrowserBaseSetup, arguments: BrowserBaseLoadArguments +) -> BrowserBaseLoadOutput: + """ + Loads documents from the provided urls using BrowserBase. + """ + + assert isinstance(setup, BrowserBaseSetup), "Invalid setup" + assert isinstance(arguments, BrowserBaseLoadArguments), "Invalid arguments" + + urls = [str(url) for url in arguments.urls] + + loader = BrowserbaseLoader( + api_key=setup.api_key, + project_id=setup.project_id, + session_id=setup.session_id, + urls=urls, + text_content=False, + ) + + documents = loader.load() + return BrowserBaseLoadOutput(documents=documents) diff --git a/integrations-service/integrations/utils/integrations/dalle_image_generator.py b/integrations-service/integrations/utils/integrations/dalle_image_generator.py new file mode 100644 index 000000000..e0a6496b8 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/dalle_image_generator.py @@ -0,0 +1,22 @@ +from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper + +from ...models import DalleImageGeneratorArguments, DalleImageGeneratorSetup + + +async def dalle_image_generator( + setup: DalleImageGeneratorSetup, arguments: DalleImageGeneratorArguments +) -> str: + """ + Generates an image using DALL-E based on a provided prompt. + """ + + assert isinstance(setup, DalleImageGeneratorSetup), "Invalid setup" + assert isinstance(arguments, DalleImageGeneratorArguments), "Invalid arguments" + + # FIXME: Fix OpenAI API Key error + + dalle = DallEAPIWrapper(api_key=setup.api_key) + prompt = arguments.prompt + if not prompt: + raise ValueError("Prompt parameter is required for DALL-E image generation") + return dalle.run(prompt) diff --git a/integrations-service/integrations/utils/integrations/duckduckgo_search.py b/integrations-service/integrations/utils/integrations/duckduckgo_search.py new file mode 100644 index 000000000..a8ea38f56 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/duckduckgo_search.py @@ -0,0 +1,15 @@ +from langchain_community.tools import DuckDuckGoSearchRun + +from ...models import DuckDuckGoSearchExecutionArguments + + +async def duckduckgo_search(arguments: DuckDuckGoSearchExecutionArguments) -> str: + """ + Performs a web search using DuckDuckGo and returns the results. + """ + + search = DuckDuckGoSearchRun() + query = arguments.query + if not query: + raise ValueError("Query parameter is required for DuckDuckGo search") + return search.run(query) diff --git a/integrations-service/integrations/utils/integrations/email.py b/integrations-service/integrations/utils/integrations/email.py new file mode 100644 index 000000000..b0ced9ff5 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/email.py @@ -0,0 +1,27 @@ +from email.message import EmailMessage +from smtplib import SMTP + +from beartype import beartype + +from ...models import EmailArguments, EmailOutput, EmailSetup + + +# @beartype +async def send( + setup: EmailSetup, arguments: EmailArguments +) -> EmailOutput: + """ + Sends an email with the provided details. + """ + + message = EmailMessage() + message.set_content(arguments.body) + message["Subject"] = arguments.subject + message["From"] = arguments.from_ + message["To"] = arguments.to + + with SMTP(setup.host, setup.port) as server: + server.login(setup.user, setup.password) + server.send_message(message) + + return EmailOutput(success=True) diff --git a/integrations-service/integrations/utils/integrations/gmail/send_mail.py b/integrations-service/integrations/utils/integrations/gmail/send_mail.py new file mode 100644 index 000000000..e1863f280 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/gmail/send_mail.py @@ -0,0 +1,6 @@ +async def send_mail(arguments: dict) -> str: + """ + Dummy integration for sending an email to a specified recipient with a given subject and message. + """ + + return "Mail sent" diff --git a/integrations-service/integrations/utils/integrations/hacker_news.py b/integrations-service/integrations/utils/integrations/hacker_news.py new file mode 100644 index 000000000..526024c72 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/hacker_news.py @@ -0,0 +1,22 @@ +from langchain_community.document_loaders import HNLoader + +from ...models import HackerNewsFetchArguments, HackerNewsFetchOutput + + +async def fetch(arguments: HackerNewsFetchArguments) -> HackerNewsFetchOutput: + """ + Fetches and formats content from a Hacker News thread using the provided URL. + """ + + assert isinstance(arguments, HackerNewsFetchArguments), "Invalid arguments" + + url = arguments.url + if not url: + raise ValueError("URL parameter is required for Hacker News search") + loader = HNLoader(str(url)) + documents = loader.load() + + if not documents: + raise ValueError("No data found for the given URL") + + return HackerNewsFetchOutput(documents=documents) diff --git a/integrations-service/integrations/utils/integrations/request.py b/integrations-service/integrations/utils/integrations/request.py new file mode 100644 index 000000000..e69de29bb diff --git a/integrations-service/integrations/utils/integrations/spider.py b/integrations-service/integrations/utils/integrations/spider.py new file mode 100644 index 000000000..a355e2347 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/spider.py @@ -0,0 +1,28 @@ +from langchain_community.document_loaders import SpiderLoader + +from ...models import SpiderFetchArguments, SpiderFetchOutput, SpiderSetup + + +async def crawl(setup: SpiderSetup, arguments: SpiderFetchArguments) -> SpiderFetchOutput: + """ + Fetches data from a specified URL. + """ + + assert isinstance(setup, SpiderSetup), "Invalid setup" + assert isinstance(arguments, SpiderFetchArguments), "Invalid arguments" + + url = arguments.url + + if not url: + raise ValueError("URL parameter is required for spider") + + spider_loader = SpiderLoader( + api_key=setup.spider_api_key, + url=str(url), + mode=arguments.mode, + params=arguments.params, + ) + + documents = spider_loader.load() + + return SpiderFetchOutput(documents=documents) diff --git a/integrations-service/integrations/utils/integrations/weather.py b/integrations-service/integrations/utils/integrations/weather.py new file mode 100644 index 000000000..e9393bc09 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/weather.py @@ -0,0 +1,23 @@ +from langchain_community.utilities import OpenWeatherMapAPIWrapper + +from ...models import WeatherGetArguments, WeatherGetOutput, WeatherSetup + + +async def get(setup: WeatherSetup, arguments: WeatherGetArguments) -> WeatherGetOutput: + """ + Fetches weather data for a specified location using OpenWeatherMap API. + """ + + assert isinstance(setup, WeatherSetup), "Invalid setup" + assert isinstance(arguments, WeatherGetArguments), "Invalid arguments" + + location = arguments.location + + openweathermap_api_key = setup.openweathermap_api_key + if not location: + raise ValueError("Location parameter is required for weather data") + + weather = OpenWeatherMapAPIWrapper(openweathermap_api_key=openweathermap_api_key) + result = weather.run(location) + return WeatherGetOutput(result=result) + diff --git a/integrations-service/integrations/utils/integrations/wikipedia.py b/integrations-service/integrations/utils/integrations/wikipedia.py new file mode 100644 index 000000000..aa53b5515 --- /dev/null +++ b/integrations-service/integrations/utils/integrations/wikipedia.py @@ -0,0 +1,20 @@ +from langchain_community.document_loaders import WikipediaLoader + +from ...models import WikipediaSearchArguments, WikipediaSearchOutput + + +def search(arguments: WikipediaSearchArguments) -> WikipediaSearchOutput: + """ + Searches Wikipedia for a given query and returns formatted results. + """ + + query = arguments.query + if not query: + raise ValueError("Query parameter is required for Wikipedia search") + + load_max_docs = arguments.load_max_docs + + loader = WikipediaLoader(query=query, load_max_docs=load_max_docs) + documents = loader.load() + + return WikipediaSearchOutput(documents=documents) diff --git a/integrations-service/integrations/web.py b/integrations-service/integrations/web.py new file mode 100644 index 000000000..ae91a53ca --- /dev/null +++ b/integrations-service/integrations/web.py @@ -0,0 +1,83 @@ +import logging +from typing import Any, Callable + +import fire +import uvicorn +from fastapi import FastAPI, Request, status +from fastapi.exceptions import HTTPException, RequestValidationError +from fastapi.responses import JSONResponse + +from .routers import execution_router, integrations_router + +app: FastAPI = FastAPI() + +# Add routers +app.include_router(integrations_router) +app.include_router(execution_router) + + +logger: logging.Logger = logging.getLogger(__name__) + + +def make_exception_handler(status: int) -> Callable[[Any, Any], Any]: + """ + Creates a custom exception handler for the application. + + Parameters: + - status (int): The HTTP status code to return for this exception. + + Returns: + A callable exception handler that logs the exception and returns a JSON response with the specified status code. + """ + + async def _handler(request: Request, exc): + exc_str = f"{exc}".replace("\n", " ").replace(" ", " ") + logger.exception(exc) + content = {"status_code": status, "message": exc_str, "data": None} + return JSONResponse(content=content, status_code=status) + + return _handler + + +def register_exceptions(app: FastAPI) -> None: + """ + Registers custom exception handlers for the FastAPI application. + + Parameters: + - app (FastAPI): The FastAPI application instance to register the exception handlers for. + """ + app.add_exception_handler( + RequestValidationError, + make_exception_handler(status.HTTP_422_UNPROCESSABLE_ENTITY), + ) + + +@app.exception_handler(HTTPException) +async def http_exception_handler(request, exc: HTTPException): # pylint: disable=unused-argument + return JSONResponse( + status_code=exc.status_code, + content={"error": {"message": str(exc)}}, + ) + + +def main( + host="0.0.0.0", + port=8000, + backlog=4096, + timeout_keep_alive=30, + workers=None, + log_level="info", +) -> None: + uvicorn.run( + app, + host=host, + port=port, + log_level=log_level, + timeout_keep_alive=timeout_keep_alive, + backlog=backlog, + workers=workers, + ) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/integrations-service/poetry.lock b/integrations-service/poetry.lock new file mode 100644 index 000000000..bc294a56f --- /dev/null +++ b/integrations-service/poetry.lock @@ -0,0 +1,2465 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.3" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"}, + {file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"}, +] + +[[package]] +name = "aiohttp" +version = "3.10.9" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.10.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8b3fb28a9ac8f2558760d8e637dbf27aef1e8b7f1d221e8669a1074d1a266bb2"}, + {file = "aiohttp-3.10.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:91aa966858593f64c8a65cdefa3d6dc8fe3c2768b159da84c1ddbbb2c01ab4ef"}, + {file = "aiohttp-3.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:63649309da83277f06a15bbdc2a54fbe75efb92caa2c25bb57ca37762789c746"}, + {file = "aiohttp-3.10.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3e7fabedb3fe06933f47f1538df7b3a8d78e13d7167195f51ca47ee12690373"}, + {file = "aiohttp-3.10.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c070430fda1a550a1c3a4c2d7281d3b8cfc0c6715f616e40e3332201a253067"}, + {file = "aiohttp-3.10.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:51d0a4901b27272ae54e42067bc4b9a90e619a690b4dc43ea5950eb3070afc32"}, + {file = "aiohttp-3.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fec5fac7aea6c060f317f07494961236434928e6f4374e170ef50b3001e14581"}, + {file = "aiohttp-3.10.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:172ad884bb61ad31ed7beed8be776eb17e7fb423f1c1be836d5cb357a096bf12"}, + {file = "aiohttp-3.10.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d646fdd74c25bbdd4a055414f0fe32896c400f38ffbdfc78c68e62812a9e0257"}, + {file = "aiohttp-3.10.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e86260b76786c28acf0b5fe31c8dca4c2add95098c709b11e8c35b424ebd4f5b"}, + {file = "aiohttp-3.10.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d7cafc11d70fdd8801abfc2ff276744ae4cb39d8060b6b542c7e44e5f2cfc2"}, + {file = "aiohttp-3.10.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:fc262c3df78c8ff6020c782d9ce02e4bcffe4900ad71c0ecdad59943cba54442"}, + {file = "aiohttp-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:482c85cf3d429844396d939b22bc2a03849cb9ad33344689ad1c85697bcba33a"}, + {file = "aiohttp-3.10.9-cp310-cp310-win32.whl", hash = "sha256:aeebd3061f6f1747c011e1d0b0b5f04f9f54ad1a2ca183e687e7277bef2e0da2"}, + {file = "aiohttp-3.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:fa430b871220dc62572cef9c69b41e0d70fcb9d486a4a207a5de4c1f25d82593"}, + {file = "aiohttp-3.10.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:16e6a51d8bc96b77f04a6764b4ad03eeef43baa32014fce71e882bd71302c7e4"}, + {file = "aiohttp-3.10.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8bd9125dd0cc8ebd84bff2be64b10fdba7dc6fd7be431b5eaf67723557de3a31"}, + {file = "aiohttp-3.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dcf354661f54e6a49193d0b5653a1b011ba856e0b7a76bda2c33e4c6892f34ea"}, + {file = "aiohttp-3.10.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42775de0ca04f90c10c5c46291535ec08e9bcc4756f1b48f02a0657febe89b10"}, + {file = "aiohttp-3.10.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87d1e4185c5d7187684d41ebb50c9aeaaaa06ca1875f4c57593071b0409d2444"}, + {file = "aiohttp-3.10.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2695c61cf53a5d4345a43d689f37fc0f6d3a2dc520660aec27ec0f06288d1f9"}, + {file = "aiohttp-3.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a3f063b41cc06e8d0b3fcbbfc9c05b7420f41287e0cd4f75ce0a1f3d80729e6"}, + {file = "aiohttp-3.10.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d37f4718002863b82c6f391c8efd4d3a817da37030a29e2682a94d2716209de"}, + {file = "aiohttp-3.10.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2746d8994ebca1bdc55a1e998feff4e94222da709623bb18f6e5cfec8ec01baf"}, + {file = "aiohttp-3.10.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6f3c6648aa123bcd73d6f26607d59967b607b0da8ffcc27d418a4b59f4c98c7c"}, + {file = "aiohttp-3.10.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:558b3d223fd631ad134d89adea876e7fdb4c93c849ef195049c063ada82b7d08"}, + {file = "aiohttp-3.10.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4e6cb75f8ddd9c2132d00bc03c9716add57f4beff1263463724f6398b813e7eb"}, + {file = "aiohttp-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:608cecd8d58d285bfd52dbca5b6251ca8d6ea567022c8a0eaae03c2589cd9af9"}, + {file = "aiohttp-3.10.9-cp311-cp311-win32.whl", hash = "sha256:36d4fba838be5f083f5490ddd281813b44d69685db910907636bc5dca6322316"}, + {file = "aiohttp-3.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:8be1a65487bdfc285bd5e9baf3208c2132ca92a9b4020e9f27df1b16fab998a9"}, + {file = "aiohttp-3.10.9-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4fd16b30567c5b8e167923be6e027eeae0f20cf2b8a26b98a25115f28ad48ee0"}, + {file = "aiohttp-3.10.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:40ff5b7660f903dc587ed36ef08a88d46840182d9d4b5694e7607877ced698a1"}, + {file = "aiohttp-3.10.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4edc3fd701e2b9a0d605a7b23d3de4ad23137d23fc0dbab726aa71d92f11aaaf"}, + {file = "aiohttp-3.10.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e525b69ee8a92c146ae5b4da9ecd15e518df4d40003b01b454ad694a27f498b5"}, + {file = "aiohttp-3.10.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5002a02c17fcfd796d20bac719981d2fca9c006aac0797eb8f430a58e9d12431"}, + {file = "aiohttp-3.10.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd4ceeae2fb8cabdd1b71c82bfdd39662473d3433ec95b962200e9e752fb70d0"}, + {file = "aiohttp-3.10.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6e395c3d1f773cf0651cd3559e25182eb0c03a2777b53b4575d8adc1149c6e9"}, + {file = "aiohttp-3.10.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbdb8def5268f3f9cd753a265756f49228a20ed14a480d151df727808b4531dd"}, + {file = "aiohttp-3.10.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f82ace0ec57c94aaf5b0e118d4366cff5889097412c75aa14b4fd5fc0c44ee3e"}, + {file = "aiohttp-3.10.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6ebdc3b3714afe1b134b3bbeb5f745eed3ecbcff92ab25d80e4ef299e83a5465"}, + {file = "aiohttp-3.10.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f9ca09414003c0e96a735daa1f071f7d7ed06962ef4fa29ceb6c80d06696d900"}, + {file = "aiohttp-3.10.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1298b854fd31d0567cbb916091be9d3278168064fca88e70b8468875ef9ff7e7"}, + {file = "aiohttp-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:60ad5b8a7452c0f5645c73d4dad7490afd6119d453d302cd5b72b678a85d6044"}, + {file = "aiohttp-3.10.9-cp312-cp312-win32.whl", hash = "sha256:1a0ee6c0d590c917f1b9629371fce5f3d3f22c317aa96fbdcce3260754d7ea21"}, + {file = "aiohttp-3.10.9-cp312-cp312-win_amd64.whl", hash = "sha256:c46131c6112b534b178d4e002abe450a0a29840b61413ac25243f1291613806a"}, + {file = "aiohttp-3.10.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2bd9f3eac515c16c4360a6a00c38119333901b8590fe93c3257a9b536026594d"}, + {file = "aiohttp-3.10.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8cc0d13b4e3b1362d424ce3f4e8c79e1f7247a00d792823ffd640878abf28e56"}, + {file = "aiohttp-3.10.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ba1a599255ad6a41022e261e31bc2f6f9355a419575b391f9655c4d9e5df5ff5"}, + {file = "aiohttp-3.10.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:776e9f3c9b377fcf097c4a04b241b15691e6662d850168642ff976780609303c"}, + {file = "aiohttp-3.10.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8debb45545ad95b58cc16c3c1cc19ad82cffcb106db12b437885dbee265f0ab5"}, + {file = "aiohttp-3.10.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2555e4949c8d8782f18ef20e9d39730d2656e218a6f1a21a4c4c0b56546a02e"}, + {file = "aiohttp-3.10.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c54dc329cd44f7f7883a9f4baaefe686e8b9662e2c6c184ea15cceee587d8d69"}, + {file = "aiohttp-3.10.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e709d6ac598c5416f879bb1bae3fd751366120ac3fa235a01de763537385d036"}, + {file = "aiohttp-3.10.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:17c272cfe7b07a5bb0c6ad3f234e0c336fb53f3bf17840f66bd77b5815ab3d16"}, + {file = "aiohttp-3.10.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0c21c82df33b264216abffff9f8370f303dab65d8eee3767efbbd2734363f677"}, + {file = "aiohttp-3.10.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9331dd34145ff105177855017920dde140b447049cd62bb589de320fd6ddd582"}, + {file = "aiohttp-3.10.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ac3196952c673822ebed8871cf8802e17254fff2a2ed4835d9c045d9b88c5ec7"}, + {file = "aiohttp-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2c33fa6e10bb7ed262e3ff03cc69d52869514f16558db0626a7c5c61dde3c29f"}, + {file = "aiohttp-3.10.9-cp313-cp313-win32.whl", hash = "sha256:a14e4b672c257a6b94fe934ee62666bacbc8e45b7876f9dd9502d0f0fe69db16"}, + {file = "aiohttp-3.10.9-cp313-cp313-win_amd64.whl", hash = "sha256:a35ed3d03910785f7d9d6f5381f0c24002b2b888b298e6f941b2fc94c5055fcd"}, + {file = "aiohttp-3.10.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f392ef50e22c31fa49b5a46af7f983fa3f118f3eccb8522063bee8bfa6755f8"}, + {file = "aiohttp-3.10.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d1f5c9169e26db6a61276008582d945405b8316aae2bb198220466e68114a0f5"}, + {file = "aiohttp-3.10.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8d9d10d10ec27c0d46ddaecc3c5598c4db9ce4e6398ca872cdde0525765caa2f"}, + {file = "aiohttp-3.10.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d97273a52d7f89a75b11ec386f786d3da7723d7efae3034b4dda79f6f093edc1"}, + {file = "aiohttp-3.10.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d271f770b52e32236d945911b2082f9318e90ff835d45224fa9e28374303f729"}, + {file = "aiohttp-3.10.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7003f33f5f7da1eb02f0446b0f8d2ccf57d253ca6c2e7a5732d25889da82b517"}, + {file = "aiohttp-3.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6e00c8a92e7663ed2be6fcc08a2997ff06ce73c8080cd0df10cc0321a3168d7"}, + {file = "aiohttp-3.10.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a61df62966ce6507aafab24e124e0c3a1cfbe23c59732987fc0fd0d71daa0b88"}, + {file = "aiohttp-3.10.9-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:60555211a006d26e1a389222e3fab8cd379f28e0fbf7472ee55b16c6c529e3a6"}, + {file = "aiohttp-3.10.9-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d15a29424e96fad56dc2f3abed10a89c50c099f97d2416520c7a543e8fddf066"}, + {file = "aiohttp-3.10.9-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:a19caae0d670771ea7854ca30df76f676eb47e0fd9b2ee4392d44708f272122d"}, + {file = "aiohttp-3.10.9-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:99f9678bf0e2b1b695e8028fedac24ab6770937932eda695815d5a6618c37e04"}, + {file = "aiohttp-3.10.9-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2914caa46054f3b5ff910468d686742ff8cff54b8a67319d75f5d5945fd0a13d"}, + {file = "aiohttp-3.10.9-cp38-cp38-win32.whl", hash = "sha256:0bc059ecbce835630e635879f5f480a742e130d9821fbe3d2f76610a6698ee25"}, + {file = "aiohttp-3.10.9-cp38-cp38-win_amd64.whl", hash = "sha256:e883b61b75ca6efc2541fcd52a5c8ccfe288b24d97e20ac08fdf343b8ac672ea"}, + {file = "aiohttp-3.10.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fcd546782d03181b0b1d20b43d612429a90a68779659ba8045114b867971ab71"}, + {file = "aiohttp-3.10.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:85711eec2d875cd88c7eb40e734c4ca6d9ae477d6f26bd2b5bb4f7f60e41b156"}, + {file = "aiohttp-3.10.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:02d1d6610588bcd743fae827bd6f2e47e0d09b346f230824b4c6fb85c6065f9c"}, + {file = "aiohttp-3.10.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3668d0c2a4d23fb136a753eba42caa2c0abbd3d9c5c87ee150a716a16c6deec1"}, + {file = "aiohttp-3.10.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7c071235a47d407b0e93aa6262b49422dbe48d7d8566e1158fecc91043dd948"}, + {file = "aiohttp-3.10.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac74e794e3aee92ae8f571bfeaa103a141e409863a100ab63a253b1c53b707eb"}, + {file = "aiohttp-3.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bbf94d4a0447705b7775417ca8bb8086cc5482023a6e17cdc8f96d0b1b5aba6"}, + {file = "aiohttp-3.10.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb0b2d5d51f96b6cc19e6ab46a7b684be23240426ae951dcdac9639ab111b45e"}, + {file = "aiohttp-3.10.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e83dfefb4f7d285c2d6a07a22268344a97d61579b3e0dce482a5be0251d672ab"}, + {file = "aiohttp-3.10.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f0a44bb40b6aaa4fb9a5c1ee07880570ecda2065433a96ccff409c9c20c1624a"}, + {file = "aiohttp-3.10.9-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c2b627d3c8982691b06d89d31093cee158c30629fdfebe705a91814d49b554f8"}, + {file = "aiohttp-3.10.9-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:03690541e4cc866eef79626cfa1ef4dd729c5c1408600c8cb9e12e1137eed6ab"}, + {file = "aiohttp-3.10.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad3675c126f2a95bde637d162f8231cff6bc0bc9fbe31bd78075f9ff7921e322"}, + {file = "aiohttp-3.10.9-cp39-cp39-win32.whl", hash = "sha256:1321658f12b6caffafdc35cfba6c882cb014af86bef4e78c125e7e794dfb927b"}, + {file = "aiohttp-3.10.9-cp39-cp39-win_amd64.whl", hash = "sha256:9fdf5c839bf95fc67be5794c780419edb0dbef776edcfc6c2e5e2ffd5ee755fa"}, + {file = "aiohttp-3.10.9.tar.gz", hash = "sha256:143b0026a9dab07a05ad2dd9e46aa859bffdd6348ddc5967b42161168c24f857"}, +] + +[package.dependencies] +aiohappyeyeballs = ">=2.3.0" +aiosignal = ">=1.1.2" +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.12.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.6.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +files = [ + {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, + {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "atomicwrites" +version = "1.4.1" +description = "Atomic file writes." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, +] + +[[package]] +name = "attrs" +version = "24.2.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, +] + +[package.extras] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] + +[[package]] +name = "beartype" +version = "0.19.0" +description = "Unbearably fast near-real-time hybrid runtime-static type-checking in pure Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "beartype-0.19.0-py3-none-any.whl", hash = "sha256:33b2694eda0daf052eb2aff623ed9a8a586703bbf0a90bbc475a83bbf427f699"}, + {file = "beartype-0.19.0.tar.gz", hash = "sha256:de42dfc1ba5c3710fde6c3002e3bd2cad236ed4d2aabe876345ab0b4234a6573"}, +] + +[package.extras] +dev = ["autoapi (>=0.9.0)", "coverage (>=5.5)", "equinox", "jax[cpu]", "jaxtyping", "mypy (>=0.800)", "numba", "numpy", "pandera", "pydata-sphinx-theme (<=0.7.2)", "pygments", "pyright (>=1.1.370)", "pytest (>=4.0.0)", "sphinx", "sphinx (>=4.2.0,<6.0.0)", "sphinxext-opengraph (>=0.7.5)", "tox (>=3.20.1)", "typing-extensions (>=3.10.0.0)"] +doc-rtd = ["autoapi (>=0.9.0)", "pydata-sphinx-theme (<=0.7.2)", "sphinx (>=4.2.0,<6.0.0)", "sphinxext-opengraph (>=0.7.5)"] +test = ["coverage (>=5.5)", "equinox", "jax[cpu]", "jaxtyping", "mypy (>=0.800)", "numba", "numpy", "pandera", "pygments", "pyright (>=1.1.370)", "pytest (>=4.0.0)", "sphinx", "tox (>=3.20.1)", "typing-extensions (>=3.10.0.0)"] +test-tox = ["equinox", "jax[cpu]", "jaxtyping", "mypy (>=0.800)", "numba", "numpy", "pandera", "pygments", "pyright (>=1.1.370)", "pytest (>=4.0.0)", "sphinx", "typing-extensions (>=3.10.0.0)"] +test-tox-coverage = ["coverage (>=5.5)"] + +[[package]] +name = "beautifulsoup4" +version = "4.12.3" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "browserbase" +version = "0.3.0" +description = "Browserbase Python SDK" +optional = false +python-versions = ">=3.8" +files = [ + {file = "browserbase-0.3.0-py3-none-any.whl", hash = "sha256:16fe6f0b1fc55aca050bbabf76cd17d83ee1a798d9bba274b09421ca120b5ec3"}, + {file = "browserbase-0.3.0.tar.gz", hash = "sha256:2ec31641fab0a9ec3b2f23ed0244f01e3b35423806c1c6665d68706133958b07"}, +] + +[package.dependencies] +httpx = ">=0.27.0" +playwright = ">=1.43.0" +pydantic = ">=2.7.1" + +[[package]] +name = "certifi" +version = "2024.8.30" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "dataclasses-json" +version = "0.6.7" +description = "Easily serialize dataclasses to and from JSON." +optional = false +python-versions = "<4.0,>=3.7" +files = [ + {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, + {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, +] + +[package.dependencies] +marshmallow = ">=3.18.0,<4.0.0" +typing-inspect = ">=0.4.0,<1" + +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = false +python-versions = ">=3.6" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "dnspython" +version = "2.7.0" +description = "DNS toolkit" +optional = false +python-versions = ">=3.9" +files = [ + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] + +[[package]] +name = "duckduckgo-search" +version = "6.2.13" +description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." +optional = false +python-versions = ">=3.8" +files = [ + {file = "duckduckgo_search-6.2.13-py3-none-any.whl", hash = "sha256:a6618fb2744fa1d081b1bf2e47ef8051de993276a15c20f4e879a150726472de"}, + {file = "duckduckgo_search-6.2.13.tar.gz", hash = "sha256:f89a9782f0f47d18c01a761c83453d0aef7a4335d1b6466fc47709652d5ca791"}, +] + +[package.dependencies] +click = ">=8.1.7" +primp = ">=0.6.3" + +[package.extras] +dev = ["mypy (>=1.11.1)", "pytest (>=8.3.1)", "pytest-asyncio (>=0.23.8)", "ruff (>=0.6.1)"] +lxml = ["lxml (>=5.2.2)"] + +[[package]] +name = "email-validator" +version = "2.2.0" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, + {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "fastapi" +version = "0.115.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.115.0-py3-none-any.whl", hash = "sha256:17ea427674467486e997206a5ab25760f6b09e069f099b96f5b55a32fb6f1631"}, + {file = "fastapi-0.115.0.tar.gz", hash = "sha256:f93b4ca3529a8ebc6fc3fcf710e5efa8de3df9b41570958abf1d97d843138004"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.37.2,<0.39.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fire" +version = "0.6.0" +description = "A library for automatically generating command line interfaces." +optional = false +python-versions = "*" +files = [ + {file = "fire-0.6.0.tar.gz", hash = "sha256:54ec5b996ecdd3c0309c800324a0703d6da512241bc73b553db959d98de0aa66"}, +] + +[package.dependencies] +six = "*" +termcolor = "*" + +[[package]] +name = "frozenlist" +version = "1.4.1" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, +] + +[[package]] +name = "geojson" +version = "2.5.0" +description = "Python bindings and utilities for GeoJSON" +optional = false +python-versions = "*" +files = [ + {file = "geojson-2.5.0-py2.py3-none-any.whl", hash = "sha256:ccbd13368dd728f4e4f13ffe6aaf725b6e802c692ba0dde628be475040c534ba"}, + {file = "geojson-2.5.0.tar.gz", hash = "sha256:6e4bb7ace4226a45d9c8c8b1348b3fc43540658359f93c3f7e03efa9f15f658a"}, +] + +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "1.0.6" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, + {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "immutabledict" +version = "4.2.0" +description = "Immutable wrapper around dictionaries (a fork of frozendict)" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "immutabledict-4.2.0-py3-none-any.whl", hash = "sha256:d728b2c2410d698d95e6200237feb50a695584d20289ad3379a439aa3d90baba"}, + {file = "immutabledict-4.2.0.tar.gz", hash = "sha256:e003fd81aad2377a5a758bf7e1086cf3b70b63e9a5cc2f46bce8d0a2b4727c5f"}, +] + +[[package]] +name = "importlab" +version = "0.8.1" +description = "A library to calculate python dependency graphs." +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "importlab-0.8.1-py2.py3-none-any.whl", hash = "sha256:124cfa00e8a34fefe8aac1a5e94f56c781b178c9eb61a1d3f60f7e03b77338d3"}, + {file = "importlab-0.8.1.tar.gz", hash = "sha256:b3893853b1f6eb027da509c3b40e6787e95dd66b4b66f1b3613aad77556e1465"}, +] + +[package.dependencies] +networkx = ">=2" + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jiter" +version = "0.5.0" +description = "Fast iterable JSON parser." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, + {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, + {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, + {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, + {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, + {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, + {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, + {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, + {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, + {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, + {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, + {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, + {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, + {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, + {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, + {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, + {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, + {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, + {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, + {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, + {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, + {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, + {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, + {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, + {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, + {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, + {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, +] + +[[package]] +name = "jsonpatch" +version = "1.33" +description = "Apply JSON-Patches (RFC 6902)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, + {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, +] + +[package.dependencies] +jsonpointer = ">=1.9" + +[[package]] +name = "jsonpointer" +version = "3.0.0" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] + +[[package]] +name = "langchain" +version = "0.3.2" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain-0.3.2-py3-none-any.whl", hash = "sha256:cf005dcba132e46fb5e8d3dfaf7f8751bffd2d73e738c36be58f41edc7e3a4b8"}, + {file = "langchain-0.3.2.tar.gz", hash = "sha256:dc330e6eb10d81d23ba0305d18358702c73cc59e95c410eca6c6779aab4ddc9b"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +langchain-core = ">=0.3.8,<0.4.0" +langchain-text-splitters = ">=0.3.0,<0.4.0" +langsmith = ">=0.1.17,<0.2.0" +numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} +pydantic = ">=2.7.4,<3.0.0" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" + +[[package]] +name = "langchain-community" +version = "0.3.1" +description = "Community contributed LangChain integrations." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain_community-0.3.1-py3-none-any.whl", hash = "sha256:627eb26c16417764762ac47dd0d3005109f750f40242a88bb8f2958b798bcf90"}, + {file = "langchain_community-0.3.1.tar.gz", hash = "sha256:c964a70628f266a61647e58f2f0434db633d4287a729f100a81dd8b0654aec93"}, +] + +[package.dependencies] +aiohttp = ">=3.8.3,<4.0.0" +dataclasses-json = ">=0.5.7,<0.7" +langchain = ">=0.3.1,<0.4.0" +langchain-core = ">=0.3.6,<0.4.0" +langsmith = ">=0.1.125,<0.2.0" +numpy = {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""} +pydantic-settings = ">=2.4.0,<3.0.0" +PyYAML = ">=5.3" +requests = ">=2,<3" +SQLAlchemy = ">=1.4,<3" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" + +[[package]] +name = "langchain-core" +version = "0.3.9" +description = "Building applications with LLMs through composability" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain_core-0.3.9-py3-none-any.whl", hash = "sha256:26efa048666c7de56d0ab311de2c0778b04cbb2ffe95bff76139118f13815d01"}, + {file = "langchain_core-0.3.9.tar.gz", hash = "sha256:7a6ac988d24d0ddce5874b28f538cd95f69f502b7f50581de22aca0dc58199a8"}, +] + +[package.dependencies] +jsonpatch = ">=1.33,<2.0" +langsmith = ">=0.1.125,<0.2.0" +packaging = ">=23.2,<25" +pydantic = [ + {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] +PyYAML = ">=5.3" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +typing-extensions = ">=4.7" + +[[package]] +name = "langchain-text-splitters" +version = "0.3.0" +description = "LangChain text splitting utilities" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain_text_splitters-0.3.0-py3-none-any.whl", hash = "sha256:e84243e45eaff16e5b776cd9c81b6d07c55c010ebcb1965deb3d1792b7358e83"}, + {file = "langchain_text_splitters-0.3.0.tar.gz", hash = "sha256:f9fe0b4d244db1d6de211e7343d4abc4aa90295aa22e1f0c89e51f33c55cd7ce"}, +] + +[package.dependencies] +langchain-core = ">=0.3.0,<0.4.0" + +[[package]] +name = "langsmith" +version = "0.1.131" +description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." +optional = false +python-versions = "<4.0,>=3.8.1" +files = [ + {file = "langsmith-0.1.131-py3-none-any.whl", hash = "sha256:80c106b1c42307195cc0bb3a596472c41ef91b79d15bcee9938307800336c563"}, + {file = "langsmith-0.1.131.tar.gz", hash = "sha256:626101a3bf3ca481e5110d5155ace8aa066e4e9cc2fa7d96c8290ade0fbff797"}, +] + +[package.dependencies] +httpx = ">=0.23.0,<1" +orjson = ">=3.9.14,<4.0.0" +pydantic = [ + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] +requests = ">=2,<3" +requests-toolbelt = ">=1.0.0,<2.0.0" + +[[package]] +name = "libcst" +version = "1.4.0" +description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.12 programs." +optional = false +python-versions = ">=3.9" +files = [ + {file = "libcst-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:279b54568ea1f25add50ea4ba3d76d4f5835500c82f24d54daae4c5095b986aa"}, + {file = "libcst-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3401dae41fe24565387a65baee3887e31a44e3e58066b0250bc3f3ccf85b1b5a"}, + {file = "libcst-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1989fa12d3cd79118ebd29ebe2a6976d23d509b1a4226bc3d66fcb7cb50bd5d"}, + {file = "libcst-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addc6d585141a7677591868886f6bda0577529401a59d210aa8112114340e129"}, + {file = "libcst-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17d71001cb25e94cfe8c3d997095741a8c4aa7a6d234c0f972bc42818c88dfaf"}, + {file = "libcst-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:2d47de16d105e7dd5f4e01a428d9f4dc1e71efd74f79766daf54528ce37f23c3"}, + {file = "libcst-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6227562fc5c9c1efd15dfe90b0971ae254461b8b6b23c1b617139b6003de1c1"}, + {file = "libcst-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3399e6c95df89921511b44d8c5bf6a75bcbc2d51f1f6429763609ba005c10f6b"}, + {file = "libcst-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48601e3e590e2d6a7ab8c019cf3937c70511a78d778ab3333764531253acdb33"}, + {file = "libcst-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42797309bb725f0f000510d5463175ccd7155395f09b5e7723971b0007a976d"}, + {file = "libcst-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb4e42ea107a37bff7f9fdbee9532d39f9ea77b89caa5c5112b37057b12e0838"}, + {file = "libcst-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:9d0cc3c5a2a51fa7e1d579a828c0a2e46b2170024fd8b1a0691c8a52f3abb2d9"}, + {file = "libcst-1.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7ece51d935bc9bf60b528473d2e5cc67cbb88e2f8146297e40ee2c7d80be6f13"}, + {file = "libcst-1.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:81653dea1cdfa4c6520a7c5ffb95fa4d220cbd242e446c7a06d42d8636bfcbba"}, + {file = "libcst-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6abce0e66bba2babfadc20530fd3688f672d565674336595b4623cd800b91ef"}, + {file = "libcst-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5da9d7dc83801aba3b8d911f82dc1a375db0d508318bad79d9fb245374afe068"}, + {file = "libcst-1.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c54aa66c86d8ece9c93156a2cf5ca512b0dce40142fe9e072c86af2bf892411"}, + {file = "libcst-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:62e2682ee1567b6a89c91853865372bf34f178bfd237853d84df2b87b446e654"}, + {file = "libcst-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b8ecdba8934632b4dadacb666cd3816627a6ead831b806336972ccc4ba7ca0e9"}, + {file = "libcst-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8e54c777b8d27339b70f304d16fc8bc8674ef1bd34ed05ea874bf4921eb5a313"}, + {file = "libcst-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:061d6855ef30efe38b8a292b7e5d57c8e820e71fc9ec9846678b60a934b53bbb"}, + {file = "libcst-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb0abf627ee14903d05d0ad9b2c6865f1b21eb4081e2c7bea1033f85db2b8bae"}, + {file = "libcst-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d024f44059a853b4b852cfc04fec33e346659d851371e46fc8e7c19de24d3da9"}, + {file = "libcst-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3c6a8faab9da48c5b371557d0999b4ca51f4f2cbd37ee8c2c4df0ac01c781465"}, + {file = "libcst-1.4.0.tar.gz", hash = "sha256:449e0b16604f054fa7f27c3ffe86ea7ef6c409836fe68fe4e752a1894175db00"}, +] + +[package.dependencies] +pyyaml = ">=5.2" + +[package.extras] +dev = ["Sphinx (>=5.1.1)", "black (==23.12.1)", "build (>=0.10.0)", "coverage (>=4.5.4)", "fixit (==2.1.0)", "flake8 (==7.0.0)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.4)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<1.6)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.18)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.6.0)", "usort (==1.0.8.post1)"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "marshmallow" +version = "3.22.0" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +optional = false +python-versions = ">=3.8" +files = [ + {file = "marshmallow-3.22.0-py3-none-any.whl", hash = "sha256:71a2dce49ef901c3f97ed296ae5051135fd3febd2bf43afe0ae9a82143a494d9"}, + {file = "marshmallow-3.22.0.tar.gz", hash = "sha256:4972f529104a220bb8637d595aa4c9762afbe7f7a77d82dc58c1615d70c5823e"}, +] + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.0.2)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "msgspec" +version = "0.18.6" +description = "A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML." +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgspec-0.18.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77f30b0234eceeff0f651119b9821ce80949b4d667ad38f3bfed0d0ebf9d6d8f"}, + {file = "msgspec-0.18.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a76b60e501b3932782a9da039bd1cd552b7d8dec54ce38332b87136c64852dd"}, + {file = "msgspec-0.18.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06acbd6edf175bee0e36295d6b0302c6de3aaf61246b46f9549ca0041a9d7177"}, + {file = "msgspec-0.18.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40a4df891676d9c28a67c2cc39947c33de516335680d1316a89e8f7218660410"}, + {file = "msgspec-0.18.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a6896f4cd5b4b7d688018805520769a8446df911eb93b421c6c68155cdf9dd5a"}, + {file = "msgspec-0.18.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3ac4dd63fd5309dd42a8c8c36c1563531069152be7819518be0a9d03be9788e4"}, + {file = "msgspec-0.18.6-cp310-cp310-win_amd64.whl", hash = "sha256:fda4c357145cf0b760000c4ad597e19b53adf01382b711f281720a10a0fe72b7"}, + {file = "msgspec-0.18.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e77e56ffe2701e83a96e35770c6adb655ffc074d530018d1b584a8e635b4f36f"}, + {file = "msgspec-0.18.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5351afb216b743df4b6b147691523697ff3a2fc5f3d54f771e91219f5c23aaa"}, + {file = "msgspec-0.18.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3232fabacef86fe8323cecbe99abbc5c02f7698e3f5f2e248e3480b66a3596b"}, + {file = "msgspec-0.18.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b524df6ea9998bbc99ea6ee4d0276a101bcc1aa8d14887bb823914d9f60d07"}, + {file = "msgspec-0.18.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:37f67c1d81272131895bb20d388dd8d341390acd0e192a55ab02d4d6468b434c"}, + {file = "msgspec-0.18.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0feb7a03d971c1c0353de1a8fe30bb6579c2dc5ccf29b5f7c7ab01172010492"}, + {file = "msgspec-0.18.6-cp311-cp311-win_amd64.whl", hash = "sha256:41cf758d3f40428c235c0f27bc6f322d43063bc32da7b9643e3f805c21ed57b4"}, + {file = "msgspec-0.18.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d86f5071fe33e19500920333c11e2267a31942d18fed4d9de5bc2fbab267d28c"}, + {file = "msgspec-0.18.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce13981bfa06f5eb126a3a5a38b1976bddb49a36e4f46d8e6edecf33ccf11df1"}, + {file = "msgspec-0.18.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97dec6932ad5e3ee1e3c14718638ba333befc45e0661caa57033cd4cc489466"}, + {file = "msgspec-0.18.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad237100393f637b297926cae1868b0d500f764ccd2f0623a380e2bcfb2809ca"}, + {file = "msgspec-0.18.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db1d8626748fa5d29bbd15da58b2d73af25b10aa98abf85aab8028119188ed57"}, + {file = "msgspec-0.18.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d70cb3d00d9f4de14d0b31d38dfe60c88ae16f3182988246a9861259c6722af6"}, + {file = "msgspec-0.18.6-cp312-cp312-win_amd64.whl", hash = "sha256:1003c20bfe9c6114cc16ea5db9c5466e49fae3d7f5e2e59cb70693190ad34da0"}, + {file = "msgspec-0.18.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f7d9faed6dfff654a9ca7d9b0068456517f63dbc3aa704a527f493b9200b210a"}, + {file = "msgspec-0.18.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9da21f804c1a1471f26d32b5d9bc0480450ea77fbb8d9db431463ab64aaac2cf"}, + {file = "msgspec-0.18.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46eb2f6b22b0e61c137e65795b97dc515860bf6ec761d8fb65fdb62aa094ba61"}, + {file = "msgspec-0.18.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8355b55c80ac3e04885d72db515817d9fbb0def3bab936bba104e99ad22cf46"}, + {file = "msgspec-0.18.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9080eb12b8f59e177bd1eb5c21e24dd2ba2fa88a1dbc9a98e05ad7779b54c681"}, + {file = "msgspec-0.18.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc001cf39becf8d2dcd3f413a4797c55009b3a3cdbf78a8bf5a7ca8fdb76032c"}, + {file = "msgspec-0.18.6-cp38-cp38-win_amd64.whl", hash = "sha256:fac5834e14ac4da1fca373753e0c4ec9c8069d1fe5f534fa5208453b6065d5be"}, + {file = "msgspec-0.18.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:974d3520fcc6b824a6dedbdf2b411df31a73e6e7414301abac62e6b8d03791b4"}, + {file = "msgspec-0.18.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fd62e5818731a66aaa8e9b0a1e5543dc979a46278da01e85c3c9a1a4f047ef7e"}, + {file = "msgspec-0.18.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7481355a1adcf1f08dedd9311193c674ffb8bf7b79314b4314752b89a2cf7f1c"}, + {file = "msgspec-0.18.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aa85198f8f154cf35d6f979998f6dadd3dc46a8a8c714632f53f5d65b315c07"}, + {file = "msgspec-0.18.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e24539b25c85c8f0597274f11061c102ad6b0c56af053373ba4629772b407be"}, + {file = "msgspec-0.18.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c61ee4d3be03ea9cd089f7c8e36158786cd06e51fbb62529276452bbf2d52ece"}, + {file = "msgspec-0.18.6-cp39-cp39-win_amd64.whl", hash = "sha256:b5c390b0b0b7da879520d4ae26044d74aeee5144f83087eb7842ba59c02bc090"}, + {file = "msgspec-0.18.6.tar.gz", hash = "sha256:a59fc3b4fcdb972d09138cb516dbde600c99d07c38fd9372a6ef500d2d031b4e"}, +] + +[package.extras] +dev = ["attrs", "coverage", "furo", "gcovr", "ipython", "msgpack", "mypy", "pre-commit", "pyright", "pytest", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "tomli", "tomli-w"] +doc = ["furo", "ipython", "sphinx", "sphinx-copybutton", "sphinx-design"] +test = ["attrs", "msgpack", "mypy", "pyright", "pytest", "pyyaml", "tomli", "tomli-w"] +toml = ["tomli", "tomli-w"] +yaml = ["pyyaml"] + +[[package]] +name = "multidict" +version = "6.1.0" +description = "multidict implementation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, + {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, + {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, + {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, + {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, + {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, + {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, + {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, + {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, + {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, + {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, + {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, + {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, + {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, + {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "networkx" +version = "3.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.8" +files = [ + {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"}, + {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"}, +] + +[package.extras] +default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"] +developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"] +doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"] +test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "ninja" +version = "1.11.1.1" +description = "Ninja is a small build system with a focus on speed" +optional = false +python-versions = "*" +files = [ + {file = "ninja-1.11.1.1-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:376889c76d87b95b5719fdd61dd7db193aa7fd4432e5d52d2e44e4c497bdbbee"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:ecf80cf5afd09f14dcceff28cb3f11dc90fb97c999c89307aea435889cb66877"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:84502ec98f02a037a169c4b0d5d86075eaf6afc55e1879003d6cab51ced2ea4b"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:73b93c14046447c7c5cc892433d4fae65d6364bec6685411cb97a8bcf815f93a"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18302d96a5467ea98b68e1cae1ae4b4fb2b2a56a82b955193c637557c7273dbd"}, + {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aad34a70ef15b12519946c5633344bc775a7656d789d9ed5fdb0d456383716ef"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:d491fc8d89cdcb416107c349ad1e3a735d4c4af5e1cb8f5f727baca6350fdaea"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:7563ce1d9fe6ed5af0b8dd9ab4a214bf4ff1f2f6fd6dc29f480981f0f8b8b249"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:9df724344202b83018abb45cb1efc22efd337a1496514e7e6b3b59655be85205"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:3e0f9be5bb20d74d58c66cc1c414c3e6aeb45c35b0d0e41e8d739c2c0d57784f"}, + {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:76482ba746a2618eecf89d5253c0d1e4f1da1270d41e9f54dfbd91831b0f6885"}, + {file = "ninja-1.11.1.1-py2.py3-none-win32.whl", hash = "sha256:fa2ba9d74acfdfbfbcf06fad1b8282de8a7a8c481d9dee45c859a8c93fcc1082"}, + {file = "ninja-1.11.1.1-py2.py3-none-win_amd64.whl", hash = "sha256:95da904130bfa02ea74ff9c0116b4ad266174fafb1c707aa50212bc7859aebf1"}, + {file = "ninja-1.11.1.1-py2.py3-none-win_arm64.whl", hash = "sha256:185e0641bde601e53841525c4196278e9aaf4463758da6dd1e752c0a0f54136a"}, + {file = "ninja-1.11.1.1.tar.gz", hash = "sha256:9d793b08dd857e38d0b6ffe9e6b7145d7c485a42dcfea04905ca0cdb6017cc3c"}, +] + +[package.extras] +test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "pytest (>=4.5.0)", "pytest-cov (>=2.7.1)", "pytest-runner (>=5.1)", "pytest-virtualenv (>=1.7.0)", "virtualenv (>=15.0.3)"] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "openai" +version = "1.51.0" +description = "The official Python library for the openai API" +optional = false +python-versions = ">=3.7.1" +files = [ + {file = "openai-1.51.0-py3-none-any.whl", hash = "sha256:d9affafb7e51e5a27dce78589d4964ce4d6f6d560307265933a94b2e3f3c5d2c"}, + {file = "openai-1.51.0.tar.gz", hash = "sha256:8dc4f9d75ccdd5466fc8c99a952186eddceb9fd6ba694044773f3736a847149d"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.11,<5" + +[package.extras] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] + +[[package]] +name = "orjson" +version = "3.10.7" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, + {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, + {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, + {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, + {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, + {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, + {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, + {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, + {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, + {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, + {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, + {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, + {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, + {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, + {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, + {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, + {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, + {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, + {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, + {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "playwright" +version = "1.47.0" +description = "A high-level API to automate web browsers" +optional = false +python-versions = ">=3.8" +files = [ + {file = "playwright-1.47.0-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:f205df24edb925db1a4ab62f1ab0da06f14bb69e382efecfb0deedc4c7f4b8cd"}, + {file = "playwright-1.47.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7fc820faf6885f69a52ba4ec94124e575d3c4a4003bf29200029b4a4f2b2d0ab"}, + {file = "playwright-1.47.0-py3-none-macosx_11_0_universal2.whl", hash = "sha256:8e212dc472ff19c7d46ed7e900191c7a786ce697556ac3f1615986ec3aa00341"}, + {file = "playwright-1.47.0-py3-none-manylinux1_x86_64.whl", hash = "sha256:a1935672531963e4b2a321de5aa59b982fb92463ee6e1032dd7326378e462955"}, + {file = "playwright-1.47.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0a1b61473d6f7f39c5d77d4800b3cbefecb03344c90b98f3fbcae63294ad249"}, + {file = "playwright-1.47.0-py3-none-win32.whl", hash = "sha256:1b977ed81f6bba5582617684a21adab9bad5676d90a357ebf892db7bdf4a9974"}, + {file = "playwright-1.47.0-py3-none-win_amd64.whl", hash = "sha256:0ec1056042d2e86088795a503347407570bffa32cbe20748e5d4c93dba085280"}, +] + +[package.dependencies] +greenlet = "3.0.3" +pyee = "12.0.0" + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "primp" +version = "0.6.3" +description = "HTTP client that can impersonate web browsers, mimicking their headers and `TLS/JA3/JA4/HTTP2` fingerprints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "primp-0.6.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bdbe6a7cdaaf5c9ed863432a941f4a75bd4c6ff626cbc8d32fc232793c70ba06"}, + {file = "primp-0.6.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:eeb53eb987bdcbcd85740633470255cab887d921df713ffa12a36a13366c9cdb"}, + {file = "primp-0.6.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78da53d3c92a8e3f05bd3286ac76c291f1b6fe5e08ea63b7ba92b0f9141800bb"}, + {file = "primp-0.6.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:86337b44deecdac752bd8112909987fc9fa9b894f30191c80a164dc8f895da53"}, + {file = "primp-0.6.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d3cd9a22b97f3eae42b2a5fb99f00480daf4cd6d9b139e05b0ffb03f7cc037f3"}, + {file = "primp-0.6.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7732bec917e2d3c48a31cdb92e1250f4ad6203a1aa4f802bd9abd84f2286a1e0"}, + {file = "primp-0.6.3-cp38-abi3-win_amd64.whl", hash = "sha256:1e4113c34b86c676ae321af185f03a372caef3ee009f1682c2d62e30ec87348c"}, + {file = "primp-0.6.3.tar.gz", hash = "sha256:17d30ebe26864defad5232dbbe1372e80483940012356e1f68846bb182282039"}, +] + +[package.extras] +dev = ["certifi", "pytest (>=8.1.1)"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "pycnite" +version = "2024.7.31" +description = "Python bytecode utilities" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycnite-2024.7.31-py3-none-any.whl", hash = "sha256:9ff9c09d35056435b867e14ebf79626ca94b6017923a0bf9935377fa90d4cbb3"}, + {file = "pycnite-2024.7.31.tar.gz", hash = "sha256:5125f1c95aef4a23b9bec3b32fae76873dcd46324fa68e39c10fa852ecdea340"}, +] + +[[package]] +name = "pydantic" +version = "2.9.2" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} +pydantic-core = "2.23.4" +typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.23.4" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydantic-settings" +version = "2.5.2" +description = "Settings management using Pydantic" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_settings-2.5.2-py3-none-any.whl", hash = "sha256:2c912e55fd5794a59bf8c832b9de832dcfdf4778d79ff79b708744eed499a907"}, + {file = "pydantic_settings-2.5.2.tar.gz", hash = "sha256:f90b139682bee4d2065273d5185d71d37ea46cfe57e1b5ae184fc6a0b2484ca0"}, +] + +[package.dependencies] +pydantic = ">=2.7.0" +python-dotenv = ">=0.21.0" + +[package.extras] +azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + +[[package]] +name = "pydot" +version = "3.0.2" +description = "Python interface to Graphviz's Dot" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydot-3.0.2-py3-none-any.whl", hash = "sha256:99cedaa55d04abb0b2bc56d9981a6da781053dd5ac75c428e8dd53db53f90b14"}, + {file = "pydot-3.0.2.tar.gz", hash = "sha256:9180da540b51b3aa09fbf81140b3edfbe2315d778e8589a7d0a4a69c41332bae"}, +] + +[package.dependencies] +pyparsing = ">=3.0.9" + +[package.extras] +dev = ["chardet", "parameterized", "ruff"] +release = ["zest.releaser[recommended]"] +tests = ["chardet", "parameterized", "pytest", "pytest-cov", "pytest-xdist[psutil]", "ruff", "tox"] + +[[package]] +name = "pyee" +version = "12.0.0" +description = "A rough port of Node.js's EventEmitter to Python with a few tricks of its own" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyee-12.0.0-py3-none-any.whl", hash = "sha256:7b14b74320600049ccc7d0e0b1becd3b4bd0a03c745758225e31a59f4095c990"}, + {file = "pyee-12.0.0.tar.gz", hash = "sha256:c480603f4aa2927d4766eb41fa82793fe60a82cbfdb8d688e0d08c55a534e145"}, +] + +[package.dependencies] +typing-extensions = "*" + +[package.extras] +dev = ["black", "build", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "sphinx", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"] + +[[package]] +name = "pyowm" +version = "3.3.0" +description = "A Python wrapper around OpenWeatherMap web APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyowm-3.3.0-py3-none-any.whl", hash = "sha256:86463108e7613171531ba306040b43c972b3fc0b0acf73b12c50910cdd2107ab"}, + {file = "pyowm-3.3.0.tar.gz", hash = "sha256:8196f77c91eac680676ed5ee484aae8a165408055e3e2b28025cbf60b8681e03"}, +] + +[package.dependencies] +geojson = ">=2.3.0,<3" +PySocks = ">=1.7.1,<2" +requests = [ + {version = ">=2.20.0,<3"}, + {version = "*", extras = ["socks"]}, +] + +[[package]] +name = "pyparsing" +version = "3.1.4" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] + +[[package]] +name = "pytest" +version = "6.2.5" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pytype" +version = "2024.9.13" +description = "Python type inferencer" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytype-2024.9.13-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:52c0005d220b27f9c933e4077de700c4e8171abce0c2af72f4c6263a85ff5bce"}, + {file = "pytype-2024.9.13-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d5dc847c2fe98bac044f956e2fc9f074f09704b64436522b81ede7dd5fa3653"}, + {file = "pytype-2024.9.13-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529f19141c6170d96a38909df430ca52e6904eaef851ad2690cf632f17d2c195"}, + {file = "pytype-2024.9.13-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:38f3eddf05d8530ef16d3d7c2da2556148b9975fc7c3405ac3073022e1a7434b"}, + {file = "pytype-2024.9.13-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b530eae5ab421a2dc9c4ef53f68629c5a622545150ae9702dbb811f56852a63"}, + {file = "pytype-2024.9.13-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb9eaaaf6c33e2716fdce1cf4166d3e5099372d8898b69ab7673225928096456"}, + {file = "pytype-2024.9.13-cp312-cp312-macosx_10_14_universal2.whl", hash = "sha256:53b767d85f374c7483c8b2849dceb811a15fcb01520e245dd82bd7c0e2befefb"}, + {file = "pytype-2024.9.13-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:176a5bbc0cb0882918a0b48818b95df2c15811e3a8391da089ffc5b33fea7013"}, + {file = "pytype-2024.9.13-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bdaf1eaaf17a13741f67686c2d4c94c30279cd682c7e4cf535e41fc911b0e59"}, + {file = "pytype-2024.9.13-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:425011cc45fba8c83af796155049f9db89d11e8aedbfb21bc1c99408f4a2c4e3"}, + {file = "pytype-2024.9.13-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e500727967b843488c1978114778162ef00fee9be49dfa5b4758dcbbcc55dd9"}, + {file = "pytype-2024.9.13-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9b40beab6ef04fc260d86a8ef47b25d1b525dbc4cfbcb73151fd74210c176df"}, + {file = "pytype-2024.9.13-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:b5fdc24b60938ee846dfbdf08b5ea96e934e7d69c34eb1f8fb7707083d177f0e"}, + {file = "pytype-2024.9.13-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8dcfd509118c2d7e0787e72832b45e30037af1c29dfcb733a7e8014f58337287"}, + {file = "pytype-2024.9.13-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9df731062dc18518a46135c4825ad966e1a275ffc0723dd62f9771b420889da0"}, + {file = "pytype-2024.9.13.tar.gz", hash = "sha256:941046ca0f1c43b79162bb51836fef0ba6608012d99f6833148c249f22216f26"}, +] + +[package.dependencies] +attrs = ">=21.4.0" +immutabledict = ">=4.1.0" +importlab = ">=0.8" +jinja2 = ">=3.1.2" +libcst = ">=1.0.1" +msgspec = ">=0.18.6" +networkx = "<3.2" +ninja = ">=1.10.0.post2" +pycnite = ">=2024.07.31" +pydot = ">=1.4.2" +tabulate = ">=0.8.10" +toml = ">=0.10.2" +typing-extensions = ">=4.3.0" + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""} +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, + {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "ruff" +version = "0.6.9" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"}, + {file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"}, + {file = "ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f"}, + {file = "ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625"}, + {file = "ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039"}, + {file = "ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d"}, + {file = "ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117"}, + {file = "ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93"}, + {file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"}, +] + +[[package]] +name = "setuptools" +version = "75.1.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, + {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + +[[package]] +name = "spider-client" +version = "0.0.70" +description = "Python SDK for Spider Cloud API" +optional = false +python-versions = "*" +files = [ + {file = "spider-client-0.0.70.tar.gz", hash = "sha256:3c46cb3cfe1ba4dc904bf18f1c727af7ab1f6ba04464e5bf149304aa92cc769c"}, +] + +[package.dependencies] +requests = "*" + +[[package]] +name = "sqlalchemy" +version = "2.0.35" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67219632be22f14750f0d1c70e62f204ba69d28f62fd6432ba05ab295853de9b"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4668bd8faf7e5b71c0319407b608f278f279668f358857dbfd10ef1954ac9f90"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8bea573863762bbf45d1e13f87c2d2fd32cee2dbd50d050f83f87429c9e1ea"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f552023710d4b93d8fb29a91fadf97de89c5926c6bd758897875435f2a939f33"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:016b2e665f778f13d3c438651dd4de244214b527a275e0acf1d44c05bc6026a9"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7befc148de64b6060937231cbff8d01ccf0bfd75aa26383ffdf8d82b12ec04ff"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-win32.whl", hash = "sha256:22b83aed390e3099584b839b93f80a0f4a95ee7f48270c97c90acd40ee646f0b"}, + {file = "SQLAlchemy-2.0.35-cp310-cp310-win_amd64.whl", hash = "sha256:a29762cd3d116585278ffb2e5b8cc311fb095ea278b96feef28d0b423154858e"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e21f66748ab725ade40fa7af8ec8b5019c68ab00b929f6643e1b1af461eddb60"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8a6219108a15fc6d24de499d0d515c7235c617b2540d97116b663dade1a54d62"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042622a5306c23b972192283f4e22372da3b8ddf5f7aac1cc5d9c9b222ab3ff6"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:627dee0c280eea91aed87b20a1f849e9ae2fe719d52cbf847c0e0ea34464b3f7"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4fdcd72a789c1c31ed242fd8c1bcd9ea186a98ee8e5408a50e610edfef980d71"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:89b64cd8898a3a6f642db4eb7b26d1b28a497d4022eccd7717ca066823e9fb01"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-win32.whl", hash = "sha256:6a93c5a0dfe8d34951e8a6f499a9479ffb9258123551fa007fc708ae2ac2bc5e"}, + {file = "SQLAlchemy-2.0.35-cp311-cp311-win_amd64.whl", hash = "sha256:c68fe3fcde03920c46697585620135b4ecfdfc1ed23e75cc2c2ae9f8502c10b8"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eb60b026d8ad0c97917cb81d3662d0b39b8ff1335e3fabb24984c6acd0c900a2"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6921ee01caf375363be5e9ae70d08ce7ca9d7e0e8983183080211a062d299468"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cdf1a0dbe5ced887a9b127da4ffd7354e9c1a3b9bb330dce84df6b70ccb3a8d"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93a71c8601e823236ac0e5d087e4f397874a421017b3318fd92c0b14acf2b6db"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e04b622bb8a88f10e439084486f2f6349bf4d50605ac3e445869c7ea5cf0fa8c"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1b56961e2d31389aaadf4906d453859f35302b4eb818d34a26fab72596076bb8"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-win32.whl", hash = "sha256:0f9f3f9a3763b9c4deb8c5d09c4cc52ffe49f9876af41cc1b2ad0138878453cf"}, + {file = "SQLAlchemy-2.0.35-cp312-cp312-win_amd64.whl", hash = "sha256:25b0f63e7fcc2a6290cb5f7f5b4fc4047843504983a28856ce9b35d8f7de03cc"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f021d334f2ca692523aaf7bbf7592ceff70c8594fad853416a81d66b35e3abf9"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05c3f58cf91683102f2f0265c0db3bd3892e9eedabe059720492dbaa4f922da1"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:032d979ce77a6c2432653322ba4cbeabf5a6837f704d16fa38b5a05d8e21fa00"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:2e795c2f7d7249b75bb5f479b432a51b59041580d20599d4e112b5f2046437a3"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:cc32b2990fc34380ec2f6195f33a76b6cdaa9eecf09f0c9404b74fc120aef36f"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-win32.whl", hash = "sha256:9509c4123491d0e63fb5e16199e09f8e262066e58903e84615c301dde8fa2e87"}, + {file = "SQLAlchemy-2.0.35-cp37-cp37m-win_amd64.whl", hash = "sha256:3655af10ebcc0f1e4e06c5900bb33e080d6a1fa4228f502121f28a3b1753cde5"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4c31943b61ed8fdd63dfd12ccc919f2bf95eefca133767db6fbbd15da62078ec"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a62dd5d7cc8626a3634208df458c5fe4f21200d96a74d122c83bc2015b333bc1"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0630774b0977804fba4b6bbea6852ab56c14965a2b0c7fc7282c5f7d90a1ae72"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d625eddf7efeba2abfd9c014a22c0f6b3796e0ffb48f5d5ab106568ef01ff5a"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ada603db10bb865bbe591939de854faf2c60f43c9b763e90f653224138f910d9"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c41411e192f8d3ea39ea70e0fae48762cd11a2244e03751a98bd3c0ca9a4e936"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-win32.whl", hash = "sha256:d299797d75cd747e7797b1b41817111406b8b10a4f88b6e8fe5b5e59598b43b0"}, + {file = "SQLAlchemy-2.0.35-cp38-cp38-win_amd64.whl", hash = "sha256:0375a141e1c0878103eb3d719eb6d5aa444b490c96f3fedab8471c7f6ffe70ee"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccae5de2a0140d8be6838c331604f91d6fafd0735dbdcee1ac78fc8fbaba76b4"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2a275a806f73e849e1c309ac11108ea1a14cd7058577aba962cd7190e27c9e3c"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:732e026240cdd1c1b2e3ac515c7a23820430ed94292ce33806a95869c46bd139"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890da8cd1941fa3dab28c5bac3b9da8502e7e366f895b3b8e500896f12f94d11"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0d8326269dbf944b9201911b0d9f3dc524d64779a07518199a58384c3d37a44"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b76d63495b0508ab9fc23f8152bac63205d2a704cd009a2b0722f4c8e0cba8e0"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-win32.whl", hash = "sha256:69683e02e8a9de37f17985905a5eca18ad651bf592314b4d3d799029797d0eb3"}, + {file = "SQLAlchemy-2.0.35-cp39-cp39-win_amd64.whl", hash = "sha256:aee110e4ef3c528f3abbc3c2018c121e708938adeeff9006428dd7c8555e9b3f"}, + {file = "SQLAlchemy-2.0.35-py3-none-any.whl", hash = "sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1"}, + {file = "sqlalchemy-2.0.35.tar.gz", hash = "sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version < \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "starlette" +version = "0.38.6" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.38.6-py3-none-any.whl", hash = "sha256:4517a1409e2e73ee4951214ba012052b9e16f60e90d73cfb06192c19203bbb05"}, + {file = "starlette-0.38.6.tar.gz", hash = "sha256:863a1588f5574e70a821dadefb41e4881ea451a47a3cd1b4df359d4ffefe5ead"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tenacity" +version = "8.5.0" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687"}, + {file = "tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78"}, +] + +[package.extras] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] + +[[package]] +name = "termcolor" +version = "2.5.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.9" +files = [ + {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, + {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "tqdm" +version = "4.66.5" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, + {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "tweepy" +version = "4.14.0" +description = "Twitter library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tweepy-4.14.0-py3-none-any.whl", hash = "sha256:db6d3844ccc0c6d27f339f12ba8acc89912a961da513c1ae50fa2be502a56afb"}, + {file = "tweepy-4.14.0.tar.gz", hash = "sha256:1f9f1707d6972de6cff6c5fd90dfe6a449cd2e0d70bd40043ffab01e07a06c8c"}, +] + +[package.dependencies] +oauthlib = ">=3.2.0,<4" +requests = ">=2.27.0,<3" +requests-oauthlib = ">=1.2.0,<2" + +[package.extras] +async = ["aiohttp (>=3.7.3,<4)", "async-lru (>=1.0.3,<3)"] +dev = ["coverage (>=4.4.2)", "coveralls (>=2.1.0)", "tox (>=3.21.0)"] +docs = ["myst-parser (==0.15.2)", "readthedocs-sphinx-search (==0.1.1)", "sphinx (==4.2.0)", "sphinx-hoverxref (==0.7b1)", "sphinx-rtd-theme (==1.0.0)", "sphinx-tabs (==3.2.0)"] +socks = ["requests[socks] (>=2.27.0,<3)"] +test = ["vcrpy (>=1.10.3)"] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +description = "Runtime inspection utilities for typing module." +optional = false +python-versions = "*" +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "urllib3" +version = "2.2.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uvicorn" +version = "0.30.6" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.30.6-py3-none-any.whl", hash = "sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"}, + {file = "uvicorn-0.30.6.tar.gz", hash = "sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "wikipedia" +version = "1.4.0" +description = "Wikipedia API for Python" +optional = false +python-versions = "*" +files = [ + {file = "wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +requests = ">=2.0.0,<3.0.0" + +[[package]] +name = "yarl" +version = "1.13.1" +description = "Yet another URL library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "yarl-1.13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:82e692fb325013a18a5b73a4fed5a1edaa7c58144dc67ad9ef3d604eccd451ad"}, + {file = "yarl-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df4e82e68f43a07735ae70a2d84c0353e58e20add20ec0af611f32cd5ba43fb4"}, + {file = "yarl-1.13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec9dd328016d8d25702a24ee274932aebf6be9787ed1c28d021945d264235b3c"}, + {file = "yarl-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5820bd4178e6a639b3ef1db8b18500a82ceab6d8b89309e121a6859f56585b05"}, + {file = "yarl-1.13.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86c438ce920e089c8c2388c7dcc8ab30dfe13c09b8af3d306bcabb46a053d6f7"}, + {file = "yarl-1.13.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3de86547c820e4f4da4606d1c8ab5765dd633189791f15247706a2eeabc783ae"}, + {file = "yarl-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca53632007c69ddcdefe1e8cbc3920dd88825e618153795b57e6ebcc92e752a"}, + {file = "yarl-1.13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4ee1d240b84e2f213565f0ec08caef27a0e657d4c42859809155cf3a29d1735"}, + {file = "yarl-1.13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c49f3e379177f4477f929097f7ed4b0622a586b0aa40c07ac8c0f8e40659a1ac"}, + {file = "yarl-1.13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5c5e32fef09ce101fe14acd0f498232b5710effe13abac14cd95de9c274e689e"}, + {file = "yarl-1.13.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab9524e45ee809a083338a749af3b53cc7efec458c3ad084361c1dbf7aaf82a2"}, + {file = "yarl-1.13.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b1481c048fe787f65e34cb06f7d6824376d5d99f1231eae4778bbe5c3831076d"}, + {file = "yarl-1.13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:31497aefd68036d8e31bfbacef915826ca2e741dbb97a8d6c7eac66deda3b606"}, + {file = "yarl-1.13.1-cp310-cp310-win32.whl", hash = "sha256:1fa56f34b2236f5192cb5fceba7bbb09620e5337e0b6dfe2ea0ddbd19dd5b154"}, + {file = "yarl-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:1bbb418f46c7f7355084833051701b2301092e4611d9e392360c3ba2e3e69f88"}, + {file = "yarl-1.13.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:216a6785f296169ed52cd7dcdc2612f82c20f8c9634bf7446327f50398732a51"}, + {file = "yarl-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40c6e73c03a6befb85b72da213638b8aaa80fe4136ec8691560cf98b11b8ae6e"}, + {file = "yarl-1.13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2430cf996113abe5aee387d39ee19529327205cda975d2b82c0e7e96e5fdabdc"}, + {file = "yarl-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fb4134cc6e005b99fa29dbc86f1ea0a298440ab6b07c6b3ee09232a3b48f495"}, + {file = "yarl-1.13.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:309c104ecf67626c033845b860d31594a41343766a46fa58c3309c538a1e22b2"}, + {file = "yarl-1.13.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f90575e9fe3aae2c1e686393a9689c724cd00045275407f71771ae5d690ccf38"}, + {file = "yarl-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d2e1626be8712333a9f71270366f4a132f476ffbe83b689dd6dc0d114796c74"}, + {file = "yarl-1.13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b66c87da3c6da8f8e8b648878903ca54589038a0b1e08dde2c86d9cd92d4ac9"}, + {file = "yarl-1.13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cf1ad338620249f8dd6d4b6a91a69d1f265387df3697ad5dc996305cf6c26fb2"}, + {file = "yarl-1.13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9915300fe5a0aa663c01363db37e4ae8e7c15996ebe2c6cce995e7033ff6457f"}, + {file = "yarl-1.13.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:703b0f584fcf157ef87816a3c0ff868e8c9f3c370009a8b23b56255885528f10"}, + {file = "yarl-1.13.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1d8e3ca29f643dd121f264a7c89f329f0fcb2e4461833f02de6e39fef80f89da"}, + {file = "yarl-1.13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7055bbade838d68af73aea13f8c86588e4bcc00c2235b4b6d6edb0dbd174e246"}, + {file = "yarl-1.13.1-cp311-cp311-win32.whl", hash = "sha256:a3442c31c11088e462d44a644a454d48110f0588de830921fd201060ff19612a"}, + {file = "yarl-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:81bad32c8f8b5897c909bf3468bf601f1b855d12f53b6af0271963ee67fff0d2"}, + {file = "yarl-1.13.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f452cc1436151387d3d50533523291d5f77c6bc7913c116eb985304abdbd9ec9"}, + {file = "yarl-1.13.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9cec42a20eae8bebf81e9ce23fb0d0c729fc54cf00643eb251ce7c0215ad49fe"}, + {file = "yarl-1.13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d959fe96e5c2712c1876d69af0507d98f0b0e8d81bee14cfb3f6737470205419"}, + {file = "yarl-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8c837ab90c455f3ea8e68bee143472ee87828bff19ba19776e16ff961425b57"}, + {file = "yarl-1.13.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94a993f976cdcb2dc1b855d8b89b792893220db8862d1a619efa7451817c836b"}, + {file = "yarl-1.13.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2442a415a5f4c55ced0fade7b72123210d579f7d950e0b5527fc598866e62c"}, + {file = "yarl-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fdbf0418489525231723cdb6c79e7738b3cbacbaed2b750cb033e4ea208f220"}, + {file = "yarl-1.13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b7f6e699304717fdc265a7e1922561b02a93ceffdaefdc877acaf9b9f3080b8"}, + {file = "yarl-1.13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bcd5bf4132e6a8d3eb54b8d56885f3d3a38ecd7ecae8426ecf7d9673b270de43"}, + {file = "yarl-1.13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2a93a4557f7fc74a38ca5a404abb443a242217b91cd0c4840b1ebedaad8919d4"}, + {file = "yarl-1.13.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:22b739f99c7e4787922903f27a892744189482125cc7b95b747f04dd5c83aa9f"}, + {file = "yarl-1.13.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2db874dd1d22d4c2c657807562411ffdfabec38ce4c5ce48b4c654be552759dc"}, + {file = "yarl-1.13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4feaaa4742517eaceafcbe74595ed335a494c84634d33961214b278126ec1485"}, + {file = "yarl-1.13.1-cp312-cp312-win32.whl", hash = "sha256:bbf9c2a589be7414ac4a534d54e4517d03f1cbb142c0041191b729c2fa23f320"}, + {file = "yarl-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:d07b52c8c450f9366c34aa205754355e933922c79135125541daae6cbf31c799"}, + {file = "yarl-1.13.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:95c6737f28069153c399d875317f226bbdea939fd48a6349a3b03da6829fb550"}, + {file = "yarl-1.13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cd66152561632ed4b2a9192e7f8e5a1d41e28f58120b4761622e0355f0fe034c"}, + {file = "yarl-1.13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6a2acde25be0cf9be23a8f6cbd31734536a264723fca860af3ae5e89d771cd71"}, + {file = "yarl-1.13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18595e6a2ee0826bf7dfdee823b6ab55c9b70e8f80f8b77c37e694288f5de1"}, + {file = "yarl-1.13.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a31d21089894942f7d9a8df166b495101b7258ff11ae0abec58e32daf8088813"}, + {file = "yarl-1.13.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45f209fb4bbfe8630e3d2e2052535ca5b53d4ce2d2026bed4d0637b0416830da"}, + {file = "yarl-1.13.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f722f30366474a99745533cc4015b1781ee54b08de73260b2bbe13316079851"}, + {file = "yarl-1.13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3bf60444269345d712838bb11cc4eadaf51ff1a364ae39ce87a5ca8ad3bb2c8"}, + {file = "yarl-1.13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:942c80a832a79c3707cca46bd12ab8aa58fddb34b1626d42b05aa8f0bcefc206"}, + {file = "yarl-1.13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:44b07e1690f010c3c01d353b5790ec73b2f59b4eae5b0000593199766b3f7a5c"}, + {file = "yarl-1.13.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:396e59b8de7e4d59ff5507fb4322d2329865b909f29a7ed7ca37e63ade7f835c"}, + {file = "yarl-1.13.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3bb83a0f12701c0b91112a11148b5217617982e1e466069d0555be9b372f2734"}, + {file = "yarl-1.13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c92b89bffc660f1274779cb6fbb290ec1f90d6dfe14492523a0667f10170de26"}, + {file = "yarl-1.13.1-cp313-cp313-win32.whl", hash = "sha256:269c201bbc01d2cbba5b86997a1e0f73ba5e2f471cfa6e226bcaa7fd664b598d"}, + {file = "yarl-1.13.1-cp313-cp313-win_amd64.whl", hash = "sha256:1d0828e17fa701b557c6eaed5edbd9098eb62d8838344486248489ff233998b8"}, + {file = "yarl-1.13.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8be8cdfe20787e6a5fcbd010f8066227e2bb9058331a4eccddec6c0db2bb85b2"}, + {file = "yarl-1.13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08d7148ff11cb8e886d86dadbfd2e466a76d5dd38c7ea8ebd9b0e07946e76e4b"}, + {file = "yarl-1.13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4afdf84610ca44dcffe8b6c22c68f309aff96be55f5ea2fa31c0c225d6b83e23"}, + {file = "yarl-1.13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0d12fe78dcf60efa205e9a63f395b5d343e801cf31e5e1dda0d2c1fb618073d"}, + {file = "yarl-1.13.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298c1eecfd3257aa16c0cb0bdffb54411e3e831351cd69e6b0739be16b1bdaa8"}, + {file = "yarl-1.13.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c14c16831b565707149c742d87a6203eb5597f4329278446d5c0ae7a1a43928e"}, + {file = "yarl-1.13.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9bacedbb99685a75ad033fd4de37129449e69808e50e08034034c0bf063f99"}, + {file = "yarl-1.13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:658e8449b84b92a4373f99305de042b6bd0d19bf2080c093881e0516557474a5"}, + {file = "yarl-1.13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:373f16f38721c680316a6a00ae21cc178e3a8ef43c0227f88356a24c5193abd6"}, + {file = "yarl-1.13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:45d23c4668d4925688e2ea251b53f36a498e9ea860913ce43b52d9605d3d8177"}, + {file = "yarl-1.13.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f7917697bcaa3bc3e83db91aa3a0e448bf5cde43c84b7fc1ae2427d2417c0224"}, + {file = "yarl-1.13.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:5989a38ba1281e43e4663931a53fbf356f78a0325251fd6af09dd03b1d676a09"}, + {file = "yarl-1.13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:11b3ca8b42a024513adce810385fcabdd682772411d95bbbda3b9ed1a4257644"}, + {file = "yarl-1.13.1-cp38-cp38-win32.whl", hash = "sha256:dcaef817e13eafa547cdfdc5284fe77970b891f731266545aae08d6cce52161e"}, + {file = "yarl-1.13.1-cp38-cp38-win_amd64.whl", hash = "sha256:7addd26594e588503bdef03908fc207206adac5bd90b6d4bc3e3cf33a829f57d"}, + {file = "yarl-1.13.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a0ae6637b173d0c40b9c1462e12a7a2000a71a3258fa88756a34c7d38926911c"}, + {file = "yarl-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:576365c9f7469e1f6124d67b001639b77113cfd05e85ce0310f5f318fd02fe85"}, + {file = "yarl-1.13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78f271722423b2d4851cf1f4fa1a1c4833a128d020062721ba35e1a87154a049"}, + {file = "yarl-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d74f3c335cfe9c21ea78988e67f18eb9822f5d31f88b41aec3a1ec5ecd32da5"}, + {file = "yarl-1.13.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1891d69a6ba16e89473909665cd355d783a8a31bc84720902c5911dbb6373465"}, + {file = "yarl-1.13.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb382fd7b4377363cc9f13ba7c819c3c78ed97c36a82f16f3f92f108c787cbbf"}, + {file = "yarl-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c8854b9f80693d20cec797d8e48a848c2fb273eb6f2587b57763ccba3f3bd4b"}, + {file = "yarl-1.13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbf2c3f04ff50f16404ce70f822cdc59760e5e2d7965905f0e700270feb2bbfc"}, + {file = "yarl-1.13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fb9f59f3848edf186a76446eb8bcf4c900fe147cb756fbbd730ef43b2e67c6a7"}, + {file = "yarl-1.13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ef9b85fa1bc91c4db24407e7c4da93a5822a73dd4513d67b454ca7064e8dc6a3"}, + {file = "yarl-1.13.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:098b870c18f1341786f290b4d699504e18f1cd050ed179af8123fd8232513424"}, + {file = "yarl-1.13.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:8c723c91c94a3bc8033dd2696a0f53e5d5f8496186013167bddc3fb5d9df46a3"}, + {file = "yarl-1.13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44a4c40a6f84e4d5955b63462a0e2a988f8982fba245cf885ce3be7618f6aa7d"}, + {file = "yarl-1.13.1-cp39-cp39-win32.whl", hash = "sha256:84bbcdcf393139f0abc9f642bf03f00cac31010f3034faa03224a9ef0bb74323"}, + {file = "yarl-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:fc2931ac9ce9c61c9968989ec831d3a5e6fcaaff9474e7cfa8de80b7aff5a093"}, + {file = "yarl-1.13.1-py3-none-any.whl", hash = "sha256:6a5185ad722ab4dd52d5fb1f30dcc73282eb1ed494906a92d1a228d3f89607b0"}, + {file = "yarl-1.13.1.tar.gz", hash = "sha256:ec8cfe2295f3e5e44c51f57272afbd69414ae629ec7c6b27f5a410efc78b70a0"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[metadata] +lock-version = "2.0" +python-versions = ">=3.12,<3.13" +content-hash = "4f933143b7f17beaa1c4e8bdc117978de07df01f9b8b0eb4eb11f88182230ee5" diff --git a/integrations-service/pyproject.toml b/integrations-service/pyproject.toml new file mode 100644 index 000000000..33173f2c2 --- /dev/null +++ b/integrations-service/pyproject.toml @@ -0,0 +1,42 @@ +[tool.poetry] +name = "integrations" +version = "0.1.0" +description = "Integration service for various AI tools" +authors = ["Your Name "] + +[tool.poetry.dependencies] +python = ">=3.12,<3.13" +langchain-community = "^0.3.0" +fastapi = "^0.115.0" +uvicorn = "^0.30.6" +langchain = "^0.3.0" +pydantic = {extras = ["email"], version = "^2.9.2"} +duckduckgo-search = "^6.2.13" +openai = "^1.47.1" +tweepy = "^4.14.0" +wikipedia = "^1.4.0" +fire = "^0.6.0" +pyowm = "^3.3.0" +spider-client = "^0.0.70" +browserbase = "^0.3.0" +setuptools = "^75.1.0" +beartype = "^0.19.0" + +[tool.poe.tasks] +format = "ruff format" +lint = "ruff check --select I --fix --unsafe-fixes integrations/**/*.py" +typecheck = "pytype --config pytype.toml" +check = [ + "lint", + "format", + "typecheck", +] + +[tool.poetry.dev-dependencies] +pytest = "^6.2.5" +pytype = "^2024.9.13" +ruff = "^0.6.8" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/integrations-service/pytype.toml b/integrations-service/pytype.toml new file mode 100644 index 000000000..70b578106 --- /dev/null +++ b/integrations-service/pytype.toml @@ -0,0 +1,64 @@ +# NOTE: All relative paths are relative to the location of this file. + +[tool.pytype] + +# Space-separated list of files or directories to exclude. +exclude = [ +] + +# Space-separated list of files or directories to process. +inputs = [ + '.', +] + +# Keep going past errors to analyze as many files as possible. +keep_going = true + +# Run N jobs in parallel. When 'auto' is used, this will be equivalent to the +# number of CPUs on the host system. +jobs = 'auto' + +# All pytype output goes here. +output = '.pytype' + +# Platform (e.g., "linux", "win32") that the target code runs on. +platform = 'linux' + +# Paths to source code directories, separated by ':'. +pythonpath = '.' + +# Python version (major.minor) of the target code. +python_version = '3.12' + +# Don't allow None to match bool. This flag is temporary and will be removed +# once this behavior is enabled by default. +none_is_not_bool = true + +# Variables initialized as None retain their None binding. This flag is +# temporary and will be removed once this behavior is enabled by default. +strict_none_binding = true + +# Space-separated list of error names to ignore. +disable = [ + 'pyi-error', +] + +# -------------- +# Optional flags +# -------------- + +# Bind 'self' in methods with non-transparent decorators. This flag is temporary +# and will be removed once this behavior is enabled by default. +bind_decorated_methods = false + +# Enable parameter count checks for overriding methods with renamed arguments. +# This flag is temporary and will be removed once this behavior is enabled by +# default. +overriding_renamed_parameter_count_checks = false + +# Opt-in: Do not allow Any as a return type. +no_return_any = false + +# Opt-in: Require decoration with @typing.override when overriding a method or +# nested class attribute of a parent class. +require_override_decorator = false \ No newline at end of file diff --git a/memory-store/Dockerfile b/memory-store/Dockerfile index af3cb6e42..852a5f687 100644 --- a/memory-store/Dockerfile +++ b/memory-store/Dockerfile @@ -1,3 +1,5 @@ +# syntax=docker/dockerfile:1 +# check=error=true # We need to build the cozo binary first from the repo # https://github.com/cozodb/cozo # Then copy the binary to the ./bin directory diff --git a/memory-store/docker-compose.yml b/memory-store/docker-compose.yml index 3ed06f1de..51dcaea32 100644 --- a/memory-store/docker-compose.yml +++ b/memory-store/docker-compose.yml @@ -2,7 +2,7 @@ name: julep-memory-store services: memory-store: - image: julepai/memory-store:${TAG} + image: julepai/memory-store:${TAG:-dev} environment: - COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN} - COZO_PORT=${COZO_PORT:-9070} @@ -18,7 +18,7 @@ services: labels: ofelia.enabled: "true" - ofelia.job-exec.backupcron.schedule: "@every 1h" + ofelia.job-exec.backupcron.schedule: "@every 3h" ofelia.job-exec.backupcron.environment: '["COZO_PORT=${COZO_PORT}", "COZO_AUTH_TOKEN=${COZO_AUTH_TOKEN}", "COZO_BACKUP_DIR=${COZO_BACKUP_DIR}"]' ofelia.job-exec.backupcron.command: bash /app/backup.sh @@ -33,5 +33,6 @@ services: volumes: cozo_data: + external: true cozo_backup: external: true \ No newline at end of file diff --git a/prometheus/config/prometheus.yml b/prometheus/config/prometheus.yml new file mode 100644 index 000000000..e556a2c53 --- /dev/null +++ b/prometheus/config/prometheus.yml @@ -0,0 +1,24 @@ +global: + scrape_interval: 15s + scrape_timeout: 10s + evaluation_interval: 15s +alerting: + alertmanagers: + - follow_redirects: true + enable_http2: true + scheme: http + timeout: 10s + api_version: v2 + static_configs: + - targets: [] +scrape_configs: +- job_name: agents-api + honor_timestamps: true + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + follow_redirects: true + static_configs: + - targets: + - agents-api-multi-tenant:8080 diff --git a/prometheus/docker-compose.yml b/prometheus/docker-compose.yml new file mode 100644 index 000000000..f3c53d966 --- /dev/null +++ b/prometheus/docker-compose.yml @@ -0,0 +1,23 @@ +name: prometheus + +services: + prometheus: + image: prom/prometheus + container_name: prometheus + profiles: + - multi-tenant + + volumes: + - ./config/prometheus.yml:/etc/prometheus/prometheus.yml + - prometheus_data:/prometheus + + depends_on: + agents-api-multi-tenant: + condition: service_started + + command: + - '--config.file=/etc/prometheus/prometheus.yml' + +volumes: + prometheus_data: + external: true diff --git a/scheduler/docker-compose.yml b/scheduler/docker-compose.yml index e0f86ec9d..613cc9e67 100644 --- a/scheduler/docker-compose.yml +++ b/scheduler/docker-compose.yml @@ -53,7 +53,7 @@ services: - POSTGRES_PASSWORD=${TEMPORAL_POSTGRES_PASSWORD} healthcheck: test: [ "CMD-SHELL", "pg_isready -d ${TEMPORAL_POSTGRES_DB:-temporal} -U ${TEMPORAL_POSTGRES_USER:-temporal}" ] - + interval: 1s timeout: 5s retries: 10 @@ -63,8 +63,22 @@ services: profiles: - temporal-ui environment: + # See: https://github.com/temporalio/ui-server/blob/main/docker/config-template.yaml - TEMPORAL_ADDRESS=${TEMPORAL_ADDRESS:-temporal:7233} - - TEMPORAL_CORS_ORIGINS=${TEMPORAL_CORS_ORIGINS:-http://localhost:3000} + # Note: Not setting it enables all origins + # - TEMPORAL_CORS_ORIGINS=${TEMPORAL_CORS_ORIGINS:-http://localhost:3000} + - TEMPORAL_CODEC_ENDPOINT=http://localhost/api/temporal + - TEMPORAL_UI_ENABLED=true + - TEMPORAL_FEEDBACK_URL=https://github.com/julep-ai/julep + - TEMPORAL_NOTIFY_ON_NEW_VERSION=false + - TEMPORAL_CSRF_COOKIE_INSECURE=true + # - TEMPORAL_HIDE_LOGS=true + # - TEMPORAL_BANNER_TEXT=gagagaga + # - TEMPORAL_DISABLE_WRITE_ACTIONS=true + # - TEMPORAL_HIDE_WORKFLOW_QUERY_ERRORS=true + # - TEMPORAL_REFRESH_WORKFLOW_COUNTS_DISABLED=true + - TEMPORAL_OPEN_API_ENABLED=true + ports: - 9000:8080 # Since 8080 is already used by agents-api diff --git a/scripts/readme_translator.py b/scripts/readme_translator.py new file mode 100644 index 000000000..011763b52 --- /dev/null +++ b/scripts/readme_translator.py @@ -0,0 +1,75 @@ +import re +from typing import List +from pathlib import Path +from functools import partial +from deep_translator import GoogleTranslator +import parmapper + +HTML_TAGS_PATTERN = r"(<[^>]+>)" +CODEBLOCK_PATTERN = r"(```[\s\S]*?```|\n)" + +def create_translator(target: str) -> GoogleTranslator: + """ + Create a translator for a given target language. + """ + return GoogleTranslator(source="en", target=target) + +def translate_segment(translator: GoogleTranslator, segment: str) -> str: + """ + Translate a given raw HTML content using the provided translator, preserving HTML tags and newlines. + """ + if re.fullmatch(CODEBLOCK_PATTERN, segment) or segment == '\n': + return segment + + segments = re.split(HTML_TAGS_PATTERN, segment) + translated_segments = [] + + for sub_segment in segments: + if re.fullmatch(HTML_TAGS_PATTERN, sub_segment): + translated_segments.append(sub_segment) + else: + try: + if re.fullmatch(r'^[!"#$%&\'()*+,\-./:;<=>?@[\]^_`{|}~]+$', sub_segment): + translated_segments.append(sub_segment) + continue + + translated = translator.translate(sub_segment) + translated_segments.append(translated if translated else sub_segment) + except Exception as e: + print(f"Error translating segment '{sub_segment}': {e}") + translated_segments.append(sub_segment) + + return "".join(translated_segments) + +def translate_readme(source: str, target: str) -> str: + """ + Translate a README file from source to target language, preserving code blocks and newlines. + """ + file_content = Path(source).read_text(encoding='utf-8') + translator = create_translator(target) + segments = re.split(CODEBLOCK_PATTERN, file_content) + segment_translation = partial(translate_segment, translator) + translated_segments = list(parmapper.parmap(segment_translation, segments)) + return ''.join(translated_segments) + +def save_translated_readme(translated_content: str, lang: str) -> None: + """ + Save the translated README content to a file. + """ + filename = f"README-{lang.split('-')[-1].upper()}.md" + with open(filename, "w", encoding='utf-8') as file: + file.write(translated_content) + +def main() -> None: + """ + Main function to translate README.md to multiple languages. + """ + source_file = "README.md" + destination_langs = ["zh-CN", "ja", "fr"] + + for lang in destination_langs: + translated_readme = translate_readme(source_file, lang) + save_translated_readme(translated_readme, lang) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/sdks/node-sdk b/sdks/node-sdk new file mode 160000 index 000000000..6ff96ce85 --- /dev/null +++ b/sdks/node-sdk @@ -0,0 +1 @@ +Subproject commit 6ff96ce8599538291aeb242e6d11650f2c490616 diff --git a/sdks/python-sdk b/sdks/python-sdk new file mode 160000 index 000000000..3d763379e --- /dev/null +++ b/sdks/python-sdk @@ -0,0 +1 @@ +Subproject commit 3d763379e986b38a9d7f24b99f7f6211f19591a0 diff --git a/typespec/.gitignore b/typespec/.gitignore index 98d4239d8..d0791ce2c 100644 --- a/typespec/.gitignore +++ b/typespec/.gitignore @@ -1 +1,8 @@ -/tsp-output/ +# Ignore everything in tsp-output +tsp-output/**/*.* + +# Don't ignore the openapi3 directory +!tsp-output/@typespec/openapi3/ + +# But don't ignore openapi-*.yaml files in tsp-output/@typespec/openapi3/ +!tsp-output/@typespec/openapi3/openapi-*.yaml diff --git a/typespec/common/interfaces.tsp b/typespec/common/interfaces.tsp index d44d8aab0..7b719418c 100644 --- a/typespec/common/interfaces.tsp +++ b/typespec/common/interfaces.tsp @@ -1,9 +1,11 @@ import "@typespec/http"; +import "@typespec/sse"; import "./scalars.tsp"; import "./types.tsp"; using TypeSpec.Http; +using TypeSpec.SSE; namespace Common; @@ -136,32 +138,10 @@ interface ChildLimitOffsetPagination< ...PaginationOptions, ): { - results: T[]; + items: T[]; }; } -interface ChildStreamEndpoint< - T, - DocString extends valueof string = "Stream events emitted by the parent" -> { - @get - @doc(DocString) - stream( - @path - @doc("ID of parent") - id: uuid, - - @query - @doc("Next page token") - next_token: string | null = null, - ): { - @header contentType: eventStream; - - @body - @doc("Stream of events emitted by the parent") - body: T; - }; -} interface ChildCreateEndpoint< CreateType, @@ -274,3 +254,20 @@ interface ChildPatchEndpoint< body: ResourceUpdatedResponse; }; } + +interface ChildStreamEndpoint< + T, + DocString extends valueof string = "Stream events emitted by the parent" +> { + @get + @doc(DocString) + stream( + @path + @doc("ID of parent") + id: uuid, + + @query + @doc("Next page token") + next_token: string | null = null, + ): SSEStream>; +} \ No newline at end of file diff --git a/typespec/common/scalars.tsp b/typespec/common/scalars.tsp index 79eda2d99..95c92d0b8 100644 --- a/typespec/common/scalars.tsp +++ b/typespec/common/scalars.tsp @@ -7,6 +7,8 @@ namespace Common; @format("uuid") scalar uuid extends string; +alias concreteType = numeric | string | boolean | null; + /** * For Unicode character safety * See: https://unicode.org/reports/tr31/ @@ -48,12 +50,8 @@ alias eventStream = "text/event-stream"; /** Different possible sources that can produce new entries */ alias entrySource = "api_request" | "api_response" | "tool_response" | "internal" | "summarizer" | "meta"; -/** Naming convention for tool references. Tools are resolved in order: `step-settings` -> `task` -> `agent` */ -@pattern("^(function|integration|system|api_call)\\.(\\w+)$") -scalar toolRef extends string; - /** A simple python expression compatible with SimpleEval. */ scalar PyExpression extends string; /** A valid jinja template. */ -scalar JinjaTemplate extends string; \ No newline at end of file +scalar JinjaTemplate extends string; diff --git a/typespec/common/types.tsp b/typespec/common/types.tsp index 7d954a80e..0cb4cd50d 100644 --- a/typespec/common/types.tsp +++ b/typespec/common/types.tsp @@ -1,6 +1,8 @@ +import "@typespec/events"; import "@typespec/http"; import "@typespec/openapi"; +using TypeSpec.Events; using TypeSpec.Http; using TypeSpec.OpenAPI; @@ -11,6 +13,7 @@ namespace Common; // alias Metadata = Record; +alias MetadataFilter = Record; model ResourceCreatedResponse { @doc("ID of created resource") @@ -48,6 +51,11 @@ model PaginationOptions { /** Sort direction */ @query direction: sortDirection = "asc", - /** JSON string of object that should be used to filter objects by metadata */ - @query metadata_filter: string = "{}", -} \ No newline at end of file + /** Object to filter results by metadata */ + @query metadata_filter: MetadataFilter, +} + +@events +union StreamEvent { + T; +} diff --git a/typespec/docs/models.tsp b/typespec/docs/models.tsp index ee283fe02..f01b379c6 100644 --- a/typespec/docs/models.tsp +++ b/typespec/docs/models.tsp @@ -23,6 +23,10 @@ model Doc { /** Contents of the document */ content: string | string[]; + + /** Embeddings for the document */ + @visibility("read") + embeddings?: float32[] | float32[][]; } /** Payload for creating a doc */ diff --git a/typespec/main.tsp b/typespec/main.tsp index b3bb1278c..aefb8adfc 100644 --- a/typespec/main.tsp +++ b/typespec/main.tsp @@ -95,6 +95,9 @@ namespace Api { @route("/docs") interface IndividualDocsRoute extends Docs.IndividualDocEndpoints {} + @route("/tasks") + interface TasksGetRoute extends Tasks.GetEndpoints {} + @route("/agents/{id}/tasks") interface TasksRoute extends Tasks.Endpoints {} diff --git a/typespec/package-lock.json b/typespec/package-lock.json index 2eb61490e..80ad055ad 100644 --- a/typespec/package-lock.json +++ b/typespec/package-lock.json @@ -1,19 +1,21 @@ { "name": "julep-typespec", - "version": "0.3.0", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "julep-typespec", - "version": "0.3.0", + "version": "0.4.0", "dependencies": { - "@typespec/compiler": "^0.59.1", - "@typespec/http": "^0.59.1", - "@typespec/openapi": "^0.59.0", - "@typespec/openapi3": "^0.59.1", - "@typespec/rest": "^0.59.1", - "@typespec/versioning": "^0.59.0" + "@typespec/compiler": "^0.61.2", + "@typespec/events": "^0.61.0", + "@typespec/http": "^0.61.0", + "@typespec/openapi": "^0.61.0", + "@typespec/openapi3": "^0.61.0", + "@typespec/rest": "^0.61.0", + "@typespec/sse": "^0.61.0", + "@typespec/versioning": "^0.61.0" } }, "node_modules/@apidevtools/swagger-methods": { @@ -60,9 +62,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", - "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -274,9 +276,9 @@ "license": "MIT" }, "node_modules/@typespec/compiler": { - "version": "0.59.1", - "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-0.59.1.tgz", - "integrity": "sha512-O2ljgr6YoFaIH6a8lWc90/czdv4B2X6N9wz4WsnQnVvgO0Tj0s+3xkvp4Tv59RKMhT0f3fK6dL8oEGO32FYk1A==", + "version": "0.61.2", + "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-0.61.2.tgz", + "integrity": "sha512-6QxYJd09VWssd/BvY+8eBxTVv085s1UNK63FdPrgT2lgI+j8VMMcpNR9m5l1zWlgGDM7sniA/Or8VCdVA6jerg==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.24.7", @@ -284,14 +286,14 @@ "change-case": "~5.4.4", "globby": "~14.0.2", "mustache": "~4.2.0", - "picocolors": "~1.0.1", + "picocolors": "~1.1.0", "prettier": "~3.3.3", "prompts": "~2.4.2", "semver": "^7.6.3", "temporal-polyfill": "^0.2.5", "vscode-languageserver": "~9.0.1", - "vscode-languageserver-textdocument": "~1.0.11", - "yaml": "~2.4.5", + "vscode-languageserver-textdocument": "~1.0.12", + "yaml": "~2.5.1", "yargs": "~17.7.2" }, "bin": { @@ -302,39 +304,57 @@ "node": ">=18.0.0" } }, + "node_modules/@typespec/events": { + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.61.0.tgz", + "integrity": "sha512-XUXy36qGo7v1ZBEK5WTD3TGXc4xr9rbL5U5f7aCabad4YHTi6r/2GMOVjuRJOiCJoMvEVeL1pWkhDZkBPbdd3A==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@typespec/compiler": "~0.61.0" + } + }, "node_modules/@typespec/http": { - "version": "0.59.1", - "resolved": "https://registry.npmjs.org/@typespec/http/-/http-0.59.1.tgz", - "integrity": "sha512-Ai8oCAO+Bw1HMSZ9gOI5Od4fNn/ul4HrVtTB01xFuLK6FQj854pxhzao8ylPnr7gIRQ327FV12/QfXR87yCiYQ==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/http/-/http-0.61.0.tgz", + "integrity": "sha512-7+AYHkzkc+p652GY9BcEbXY4OZa1fTr03MVmZeafvmbQbXfyzUU9eJld13M3v6NaUWqXWZ7nBNMISyKiXp/kSw==", "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "@typespec/compiler": "~0.59.0" + "@typespec/compiler": "~0.61.0", + "@typespec/streams": "~0.61.0" + }, + "peerDependenciesMeta": { + "@typespec/streams": { + "optional": true + } } }, "node_modules/@typespec/openapi": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-0.59.0.tgz", - "integrity": "sha512-do1Dm5w0MuK3994gYTBg6qMfgeIxmmsDqnz3zimYKMPpbnUBi4F6/o4iCfn0Fn9kaNl+H6UlOzZpsZW9xHui1Q==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-0.61.0.tgz", + "integrity": "sha512-3AF319Ae4yGVOscsCLQeedXUJJcL/NdGOR2/e/nFiL/AOVdgLfIRnpR0Ad9Zj9XAESh1fq9XSu4Mi7N1k4V7rw==", "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "@typespec/compiler": "~0.59.0", - "@typespec/http": "~0.59.0" + "@typespec/compiler": "~0.61.0", + "@typespec/http": "~0.61.0" } }, "node_modules/@typespec/openapi3": { - "version": "0.59.1", - "resolved": "https://registry.npmjs.org/@typespec/openapi3/-/openapi3-0.59.1.tgz", - "integrity": "sha512-89VbUbkWKxeFgE0w0hpVyk1UZ6ZHRxOhcAHvF5MgxQxEhs2ALXKAqapWjFQsYrLBhAUoWzdPFrJJUMbwF9kX0Q==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/openapi3/-/openapi3-0.61.0.tgz", + "integrity": "sha512-ALLsTkK1UiJBzvygV1Zk/yZaym+lOWroGeEUhQNXYShsq+/GLZkK0rl8sd76Gigq+TVXKMOEwUUvgfws/LMUJw==", "license": "MIT", "dependencies": { "@readme/openapi-parser": "~2.6.0", - "yaml": "~2.4.5" + "yaml": "~2.5.1" }, "bin": { "tsp-openapi3": "cmd/tsp-openapi3.js" @@ -343,35 +363,63 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@typespec/compiler": "~0.59.0", - "@typespec/http": "~0.59.1", - "@typespec/openapi": "~0.59.0", - "@typespec/versioning": "~0.59.0" + "@typespec/compiler": "~0.61.0", + "@typespec/http": "~0.61.0", + "@typespec/openapi": "~0.61.0", + "@typespec/versioning": "~0.61.0" } }, "node_modules/@typespec/rest": { - "version": "0.59.1", - "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.59.1.tgz", - "integrity": "sha512-uKU431jBYL2tVQWG5THA75+OtXDa1e8cMAafYK/JJRRiVRd8D/Epd8fp07dzlB8tFGrhCaGlekRMqFPFrHh2/A==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.61.0.tgz", + "integrity": "sha512-L9Oyor+l42p6S8GE+UvaZTi+dcu6WubGZKmaBRpX8mCZGsa69EgIK8DQoyxrfMcxAO4I5U0sfkzCKwCVFtRr9g==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@typespec/compiler": "~0.61.0", + "@typespec/http": "~0.61.0" + } + }, + "node_modules/@typespec/sse": { + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.61.0.tgz", + "integrity": "sha512-q9wqMTqRDQkgID51o9lXWkrF9Ndn67sZznzGvKpCS6pG7eDc0cigkTWFmV2Agag9HzoP2MdFMlvU/sJKECPtfg==", "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "@typespec/compiler": "~0.59.0", - "@typespec/http": "~0.59.1" + "@typespec/compiler": "~0.61.0", + "@typespec/events": "~0.61.0", + "@typespec/http": "~0.61.0", + "@typespec/streams": "~0.61.0" + } + }, + "node_modules/@typespec/streams": { + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.61.0.tgz", + "integrity": "sha512-MEFwYmYVibuTwVwJ6UKa9kgM3AP5bn/MWIhB/dTgYicXEgbUk+o9RHqg7JsySFyL0PO9XoqQBFiJhWM758f+pQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@typespec/compiler": "~0.61.0" } }, "node_modules/@typespec/versioning": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.59.0.tgz", - "integrity": "sha512-aihO/ux0lLmsuYAdGVkiBflSudcZokYG42SELk1FtMFo609G3Pd7ep7hau6unBnMIceQZejB0ow5UGRupK4X5A==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.61.0.tgz", + "integrity": "sha512-PIIug6eg3zc7E+BBHyNHHQD+OBq3FU465nhKrLEp35iVji/sYFuPc1ywnELDuwJVRWm6nvqNL1vtnc+4lEk+oA==", "license": "MIT", "engines": { "node": ">=18.0.0" }, "peerDependencies": { - "@typespec/compiler": "~0.59.0" + "@typespec/compiler": "~0.61.0" } }, "node_modules/ajv": { @@ -514,9 +562,9 @@ "license": "MIT" }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -637,9 +685,9 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -761,6 +809,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -798,9 +847,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "license": "ISC" }, "node_modules/picomatch": { @@ -1059,9 +1108,9 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", "license": "MIT" }, "node_modules/vscode-languageserver-types": { @@ -1130,9 +1179,9 @@ } }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/typespec/package.json b/typespec/package.json index a7b3d7ee4..6d435a832 100644 --- a/typespec/package.json +++ b/typespec/package.json @@ -1,14 +1,16 @@ { "name": "julep-typespec", - "version": "0.3.0", + "version": "0.4.0", "type": "module", "dependencies": { - "@typespec/compiler": "^0.59.1", - "@typespec/http": "^0.59.1", - "@typespec/openapi": "^0.59.0", - "@typespec/openapi3": "^0.59.1", - "@typespec/rest": "^0.59.1", - "@typespec/versioning": "^0.59.0" + "@typespec/compiler": "^0.61.2", + "@typespec/events": "^0.61.0", + "@typespec/http": "^0.61.0", + "@typespec/openapi": "^0.61.0", + "@typespec/openapi3": "^0.61.0", + "@typespec/rest": "^0.61.0", + "@typespec/sse": "^0.61.0", + "@typespec/versioning": "^0.61.0" }, "private": true } diff --git a/typespec/sessions/models.tsp b/typespec/sessions/models.tsp index aecec4ba1..dfbb6ea41 100644 --- a/typespec/sessions/models.tsp +++ b/typespec/sessions/models.tsp @@ -62,6 +62,15 @@ model Session { /** Action to start on context window overflow */ context_overflow: ContextOverflowType | null = null; + /** Whether to forward the tool results to the model when available. + * "true" => always forward + * "false" => never forward + * null => forward if applicable (default) + * + * If a tool call is made, the tool's output will be sent back to the model as the model's input. + * If a tool call is not made, the model's output will be returned as is. */ + forward_tool_results: boolean | null = null; + ...HasId; ...HasMetadata; ...HasTimestamps; diff --git a/typespec/tasks/endpoints.tsp b/typespec/tasks/endpoints.tsp index 2d9ec422b..850eacdf3 100644 --- a/typespec/tasks/endpoints.tsp +++ b/typespec/tasks/endpoints.tsp @@ -15,6 +15,8 @@ namespace Tasks; // TASK ENDPOINTS // +interface GetEndpoints extends GetEndpoint {} + interface CreateOrUpdateEndpoints { @post @doc("Create or update a task") diff --git a/typespec/tasks/models.tsp b/typespec/tasks/models.tsp index 4ec23f31b..b8b115861 100644 --- a/typespec/tasks/models.tsp +++ b/typespec/tasks/models.tsp @@ -30,6 +30,24 @@ model TaskTool extends CreateToolRequest { inherited?: boolean = false; } +/** Reference to a tool by id */ +model ToolRefById { + @visibility("read", "create") + id?: uuid; +} + +/** Reference to a tool by name */ +model ToolRefByName { + @visibility("read", "create") + name?: validPythonIdentifier; +} + +/** Reference to a tool */ +model ToolRef { + @visibility("read", "create") + ref: ToolRefById | ToolRefByName; +} + /** Object describing a Task */ model Task { @visibility("read", "create") diff --git a/typespec/tasks/steps.tsp b/typespec/tasks/steps.tsp index d9be46577..ea4d84d79 100644 --- a/typespec/tasks/steps.tsp +++ b/typespec/tasks/steps.tsp @@ -4,6 +4,7 @@ import "../chat"; import "../common"; import "../docs"; import "../entries"; +import "../tools"; import "./step_kind.tsp"; @@ -13,6 +14,7 @@ using Chat; using Common; using Docs; using Entries; +using Tools; namespace Tasks; @@ -39,6 +41,10 @@ model BaseWorkflowStep { kind_: T; } +alias SequentialWorkflowStep = + | WaitForInputStep + | MappableWorkflowStep; + alias MappableWorkflowStep = | EvaluateStep | ToolCallStep @@ -46,15 +52,13 @@ alias MappableWorkflowStep = | GetStep | SetStep | LogStep - | EmbedStep - | SearchStep; + | YieldStep; alias NonConditionalWorkflowStep = | MappableWorkflowStep | ReturnStep | SleepStep | ErrorWorkflowStep - | YieldStep | WaitForInputStep; alias ConditionalStep = IfElseWorkflowStep | SwitchStep; @@ -76,10 +80,10 @@ model ToolCallStep extends BaseWorkflowStep<"tool_call"> { model ToolCallStepDef { /** The tool to run */ - tool: toolRef; + tool: validPythonIdentifier; /** The input parameters for the tool (defaults to last step output) */ - arguments: ExpressionObject | "_" = "_"; + arguments: NestedExpressionObject | "_" = "_"; } model PromptStep extends BaseWorkflowStep<"prompt"> { @@ -93,8 +97,26 @@ model PromptStepDef { /** The prompt to run */ prompt: JinjaTemplate | InputChatMLMessage[]; + /** The tools to use for the prompt */ + tools: "all" | (ToolRef | CreateToolRequest)[] = #[]; + + /** The tool choice for the prompt */ + tool_choice?: ToolChoiceOption; + /** Settings for the prompt */ settings?: ChatSettings; + + /** Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` */ + unwrap?: boolean = false; + + /** Whether to forward the tool results to the model when available. + * "true" => always forward + * "false" => never forward + * null => forward if applicable (default) + * + * If a tool call is made, the tool's output will be used as the model's input. + * If a tool call is not made, the model's output will be used as the next step's input. */ + forward_tool_results: boolean | null = null; } model EvaluateStep extends BaseWorkflowStep<"evaluate"> { @@ -138,34 +160,6 @@ model LogStepDef { log: JinjaTemplate; } -//////////////////////// -/// Doc search steps /// -//////////////////////// - -model EmbedStep extends BaseWorkflowStep<"embed"> { - @visibility("read") - kind_: "embed" = "embed"; - - ...EmbedStepDef; -} - -model EmbedStepDef { - /** The text to embed */ - embed: EmbedQueryRequest; -} - -model SearchStep extends BaseWorkflowStep<"search"> { - @visibility("read") - kind_: "search" = "search"; - - ...SearchStepDef; -} - -model SearchStepDef { - /** The search query */ - search: DocSearchRequest; -} - /////////////////////// /// Key-value steps /// /////////////////////// @@ -217,7 +211,7 @@ model ForeachDo { in: TypedExpression>; /** The steps to run for each iteration */ - do: MappableWorkflowStep; + do: SequentialWorkflowStep; } model ForeachStep extends BaseWorkflowStep<"foreach"> { diff --git a/typespec/tools/models.tsp b/typespec/tools/models.tsp index bab70b643..de509dec4 100644 --- a/typespec/tools/models.tsp +++ b/typespec/tools/models.tsp @@ -8,6 +8,23 @@ namespace Tools; // TOOL MODELS // +// TODO: Split these into different files + +/** A valid HTTP method */ +alias httpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "CONNECT" | "TRACE"; + +/** Integration provider name */ +alias integrationProvider = ( + | "dummy" + | "hacker_news" + | "weather" + | "wikipedia" + | "spider" + | "brave" + | "browserbase" + | "email" +); + enum ToolType { /** A tool that emulates a function call */ function, @@ -34,27 +51,139 @@ model FunctionDef { /** DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons. */ name?: null = null; - /** Description of the function */ - description?: identifierSafeUnicode; + /** DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons. */ + description?: null = null; /** The parameters the function accepts */ parameters?: FunctionParameters; } -// TODO: We should use this model for all tools, not just functions and discriminate on the type -model Tool { - /** Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) */ - type: ToolType = ToolType.function; +// TODO: Add granular definitions for each integration + +/** Integration definition */ +model IntegrationDef { + /** The provider of the integration */ + provider: integrationProvider | string; + + /** The specific method of the integration to call */ + method?: string; + + /** The setup parameters the integration accepts */ + setup?: FunctionParameters; + + /** The arguments to pre-apply to the integration call */ + arguments?: FunctionParameters; +} + +// +// SYSTEM TOOL MODELS +// + +alias resourceType = ( + | "agent" + | "user" + | "task" + | "execution" + | "doc" + | "session" + | "job" +); + +alias subresourceType = ( + | "tool" + | "doc" + | "execution" + | "transition" +); + +alias operationType = ( + | "create" + | "update" + | "patch" + | "create_or_update" + | "embed" + | "change_status" + | "search" + | "chat" + | "history" + | "delete" + | "get" + | "list" +); + +// TODO: Add granular definitions for each system call + +/** System definition */ +model SystemDef { + /** Resource is the name of the resource to use */ + resource: resourceType; + + /** Operation is the name of the operation to perform */ + operation: operationType; + + /** Resource id (if applicable) */ + resource_id?: uuid; + + /** Sub-resource type (if applicable) */ + subresource?: subresourceType; + + /** The arguments to pre-apply to the system call */ + arguments?: FunctionParameters; +} + +/** API call definition */ +model ApiCallDef { + /** The HTTP method to use */ + method: httpMethod; + + /** The URL to call */ + url: url; + + /** The headers to send with the request */ + headers?: Record; + + /** The content as base64 to send with the request */ + content?: string; + + /** The data to send as form data */ + data?: Record; + + /** JSON body to send with the request */ + json?: Record; + + /** Cookies */ + cookies?: Record; + /** The parameters to send with the request */ + params?: string | Record; + + /** Follow redirects */ + follow_redirects?: boolean; + + /** The timeout for the request */ + timeout?: uint8; +} + + +model Tool { /** Name of the tool (must be unique for this agent and a valid python identifier string )*/ name: validPythonIdentifier; + /** Description of the tool */ + description?: string; + /** The function to call */ - function: FunctionDef; - integration?: unknown; - system?: unknown; - api_call?: unknown; + function?: FunctionDef; + + /** The integration to call */ + integration?: IntegrationDef; + + /** The system to call */ + system?: SystemDef; + + /** The API call to make */ + api_call?: ApiCallDef; ...HasTimestamps; ...HasId; @@ -65,22 +194,11 @@ model FunctionCallOption { name: string; } -@discriminator("type") model NamedToolChoice { - /** Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) */ - type: ToolType; - function?: FunctionCallOption; - integration?: unknown; - system?: unknown; - api_call?: unknown; -} - -model NamedFunctionChoice extends NamedToolChoice { - type: ToolType.function; - - /** The function to call */ - function: FunctionCallOption; + integration?: never; + system?: never; + api_call?: never; } model ToolResponse { @@ -112,9 +230,9 @@ model ChosenToolCall { type: ToolType; function?: FunctionCallOption; - integration?: unknown; - system?: unknown; - api_call?: unknown; + integration?: never; + system?: never; + api_call?: never; ...HasId; } diff --git a/typespec/tsp-output/@typespec/openapi3/openapi-0.4.0.yaml b/typespec/tsp-output/@typespec/openapi3/openapi-0.4.0.yaml new file mode 100644 index 000000000..cebe19ffc --- /dev/null +++ b/typespec/tsp-output/@typespec/openapi3/openapi-0.4.0.yaml @@ -0,0 +1,6244 @@ +openapi: 3.0.0 +info: + title: Julep API + termsOfService: https://julep.ai/terms + contact: + name: Julep AI + url: https://julep.ai + email: developers@julep.ai + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + summary: A backend for creating stateful AI apps + description: Julep is a backend for creating stateful AI apps with background tasks and long-term memory easily. + version: 0.4.0 +externalDocs: + url: https://docs.julep.ai + description: Julep API documentation +tags: [] +paths: + /agents: + get: + operationId: AgentsRoute_list + description: List Agents (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Agents.Agent' + required: + - items + post: + operationId: AgentsRoute_create + description: Create a new Agent + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}: + post: + operationId: AgentsRoute_createOrUpdate + description: Create or update an Agent + parameters: + - $ref: '#/components/parameters/Agents.CreateOrUpdateAgentRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + put: + operationId: AgentsRoute_update + description: Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + patch: + operationId: AgentsRoute_patch + description: Update an existing Agent by id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.PatchAgentRequest' + delete: + operationId: AgentsRoute_delete + description: Delete Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: AgentsRoute_get + description: Get an Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.Agent' + /agents/{id}/docs: + get: + operationId: AgentDocsRoute_list + description: List Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: AgentDocsRoute_create + description: Create a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /agents/{id}/docs/{child_id}: + delete: + operationId: AgentDocsRoute_delete + description: Delete a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/search: + post: + operationId: AgentsDocsSearchRoute_search + description: Search Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body + /agents/{id}/tasks: + get: + operationId: TasksRoute_list + description: List tasks (paginated) + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tasks.Task' + required: + - items + post: + operationId: TasksRoute_create + description: Create a new task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /agents/{id}/tasks/{child_id}: + put: + operationId: TasksRoute_update + description: Update an existing task (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.UpdateTaskRequest' + patch: + operationId: TasksRoute_patch + description: Update an existing task (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.PatchTaskRequest' + delete: + operationId: TasksRoute_delete + description: Delete a task by its id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/tools: + get: + operationId: AgentToolsRoute_list + description: List tools of the given agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + required: + - items + post: + operationId: AgentToolsRoute_create + description: Create a new tool for this agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}/tools/{child_id}: + put: + operationId: AgentToolsRoute_update + description: Update an existing tool (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.UpdateToolRequest' + patch: + operationId: AgentToolsRoute_patch + description: Update an existing tool (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.PatchToolRequest' + delete: + operationId: AgentToolsRoute_delete + description: Delete an existing tool by id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{parent_id}/tasks/{id}: + post: + operationId: TasksCreateOrUpdateRoute_createOrUpdate + description: Create or update a task + parameters: + - name: parent_id + in: path + required: true + description: ID of the agent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Tasks.CreateOrUpdateTaskRequest.id' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /docs/{id}: + get: + operationId: IndividualDocsRoute_get + description: Get Doc by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.Doc' + /embed: + post: + operationId: EmbedRoute_embed + description: Embed a query for search + parameters: [] + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.EmbedQueryResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + $ref: '#/components/schemas/Docs.EmbedQueryRequest' + required: + - body + /executions: + post: + operationId: ExecutionsRoute_resumeWithTaskToken + description: Resume an execution with a task token + parameters: + - name: task_token + in: query + required: true + description: A Task Token is a unique identifier for a specific Task Execution. + schema: + type: string + explode: false + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.TaskTokenResumeExecutionRequest' + description: Request to resume an execution with a task token + security: + - {} + /executions/{id}: + get: + operationId: ExecutionsRoute_get + description: Get an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.Execution' + put: + operationId: ExecutionsRoute_update + description: Update an existing Execution + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + /executions/{id}/transitions: + get: + operationId: ExecutionTransitionsRoute_list + description: List the Transitions of an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + type: object + properties: + transitions: + type: array + items: + $ref: '#/components/schemas/Executions.Transition' + required: + - transitions + required: + - items + /executions/{id}/transitions.stream: + get: + operationId: ExecutionTransitionsStreamRoute_stream + description: Stream events emitted by the given execution + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - name: next_token + in: query + required: true + description: Next page token + schema: + type: string + nullable: true + default: null + explode: false + responses: + '200': + description: The request has succeeded. + content: + text/event-stream: + schema: + type: string + /jobs/{id}: + get: + operationId: JobRoute_get + description: Get the status of an existing Job by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Jobs.JobStatus' + /sessions: + get: + operationId: SessionsRoute_list + description: List sessions (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Sessions.Session' + required: + - items + post: + operationId: SessionsRoute_create + description: Create a new session + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + /sessions/{id}: + post: + operationId: SessionsRoute_createOrUpdate + description: Create or update a session + parameters: + - $ref: '#/components/parameters/Sessions.CreateOrUpdateSessionRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + put: + operationId: SessionsRoute_update + description: Update an existing session by its id (overwrites all existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.UpdateSessionRequest' + patch: + operationId: SessionsRoute_patch + description: Update an existing session by its id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.PatchSessionRequest' + delete: + operationId: SessionsRoute_delete + description: Delete a session by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: SessionsRoute_get + description: Get a session by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.Session' + /sessions/{id}/chat: + post: + operationId: ChatRoute_generate + description: Generate a response from the model + parameters: + - name: id + in: path + required: true + description: The session ID + schema: + $ref: '#/components/schemas/Common.uuid' + - name: x-custom-api-key + in: header + required: false + description: Custom API key + schema: + type: string + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/Chat.ChunkChatResponse' + - $ref: '#/components/schemas/Chat.MessageChatResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Chat.ChatInput' + description: Request to generate a response from the model + /sessions/{id}/history: + delete: + operationId: HistoryRoute_delete + description: Clear the history of a Session (resets the Session) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: HistoryRoute_history + description: Get history of a Session + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Entries.History' + /tasks/{id}: + get: + operationId: TasksGetRoute_get + description: Get a task by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.Task' + /tasks/{id}/executions: + post: + operationId: TaskExecutionsRoute_create + description: Create an execution for the given task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.CreateExecutionRequest' + get: + operationId: TaskExecutionsRoute_list + description: List executions of the given task + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Executions.Execution' + required: + - items + /users: + get: + operationId: UsersRoute_list + description: List users (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Users.User' + required: + - items + post: + operationId: UsersRoute_create + description: Create a new user + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + /users/{id}: + post: + operationId: UsersRoute_createOrUpdate + description: Create or update a user + parameters: + - $ref: '#/components/parameters/Users.CreateOrUpdateUserRequest' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + put: + operationId: UsersRoute_update + description: Update an existing user by id (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.UpdateUserRequest' + patch: + operationId: UsersRoute_patch + description: Update an existing user by id (merge with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.PatchUserRequest' + delete: + operationId: UsersRoute_delete + description: Delete a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: UsersRoute_get + description: Get a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Users.User' + /users/{id}/docs: + get: + operationId: UserDocsRoute_list + description: List Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: UserDocsRoute_create + description: Create a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /users/{id}/docs/{child_id}: + delete: + operationId: UserDocsRoute_delete + description: Delete a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /users/{id}/search: + post: + operationId: UserDocsSearchRoute_search + description: Search Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body +security: + - ApiKeyAuth: [] + - ApiKeyAuth_: [] +components: + parameters: + Agents.CreateOrUpdateAgentRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Common.PaginationOptions.direction: + name: direction + in: query + required: true + description: Sort direction + schema: + type: string + enum: + - asc + - desc + default: asc + explode: false + Common.PaginationOptions.limit: + name: limit + in: query + required: true + description: Limit the number of items returned + schema: + $ref: '#/components/schemas/Common.limit' + default: 100 + explode: false + Common.PaginationOptions.metadata_filter: + name: metadata_filter + in: query + required: true + description: Object to filter results by metadata + schema: + type: object + additionalProperties: + anyOf: + - type: number + - type: string + - type: boolean + nullable: true + explode: false + Common.PaginationOptions.offset: + name: offset + in: query + required: true + description: Offset the items returned + schema: + $ref: '#/components/schemas/Common.offset' + default: 0 + explode: false + Common.PaginationOptions.sort_by: + name: sort_by + in: query + required: true + description: Sort by a field + schema: + type: string + enum: + - created_at + - updated_at + default: created_at + explode: false + Sessions.CreateOrUpdateSessionRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Tasks.CreateOrUpdateTaskRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Users.CreateOrUpdateUserRequest: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + schemas: + Agents.Agent: + type: object + required: + - id + - created_at + - updated_at + - name + - about + - model + - instructions + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + Agents.CreateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for creating a agent (and associated documents) + Agents.CreateOrUpdateAgentRequest: + type: object + required: + - id + - name + - about + - model + - instructions + properties: + id: + $ref: '#/components/schemas/Common.uuid' + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + allOf: + - $ref: '#/components/schemas/Agents.CreateAgentRequest' + Agents.PatchAgentRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for patching a agent + Agents.UpdateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for updating a agent + Chat.BaseChatOutput: + type: object + required: + - index + - finish_reason + properties: + index: + type: integer + format: uint32 + finish_reason: + allOf: + - $ref: '#/components/schemas/Chat.FinishReason' + description: The reason the model stopped generating tokens + default: stop + logprobs: + allOf: + - $ref: '#/components/schemas/Chat.LogProbResponse' + description: The log probabilities of tokens + Chat.BaseChatResponse: + type: object + required: + - jobs + - docs + - created_at + - id + properties: + usage: + allOf: + - $ref: '#/components/schemas/Chat.CompetionUsage' + description: Usage statistics for the completion request + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: Background job IDs that may have been spawned from this interaction. + default: [] + readOnly: true + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: Documents referenced for this request (for citation purposes). + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Chat.BaseTokenLogProb: + type: object + required: + - token + - logprob + properties: + token: + type: string + logprob: + type: number + format: float + description: The log probability of the token + bytes: + type: array + items: + type: integer + format: uint16 + Chat.ChatInput: + type: object + required: + - remember + - recall + - save + - stream + - stop + properties: + remember: + type: boolean + description: 'DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release)' + default: false + readOnly: true + recall: + type: boolean + description: Whether previous memories and docs should be recalled or not + default: true + save: + type: boolean + description: Whether this interaction should be stored in the session history or not + default: true + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + allOf: + - $ref: '#/components/schemas/Chat.ChatInputData' + Chat.ChatInputData: + type: object + required: + - messages + - tools + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + minItems: 1 + description: A list of new input messages comprising the conversation so far. + tools: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + description: (Advanced) List of tools that are provided in addition to agent's default set of tools. + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: Can be one of existing tools given to the agent earlier or the ones provided in this request. + Chat.ChatOutputChunk: + type: object + required: + - delta + properties: + delta: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The message generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: Streaming chat completion output + Chat.ChatSettings: + type: object + required: + - stream + - stop + properties: + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + Chat.ChunkChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + $ref: '#/components/schemas/Chat.ChatOutputChunk' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.CompetionUsage: + type: object + properties: + completion_tokens: + type: integer + format: uint32 + description: Number of tokens in the generated completion + readOnly: true + prompt_tokens: + type: integer + format: uint32 + description: Number of tokens in the prompt + readOnly: true + total_tokens: + type: integer + format: uint32 + description: Total number of tokens used in the request (prompt + completion) + readOnly: true + description: Usage statistics for the completion request + Chat.DefaultChatSettings: + type: object + properties: + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + allOf: + - $ref: '#/components/schemas/Chat.OpenAISettings' + description: Default settings for the chat session (also used by the agent) + Chat.FinishReason: + type: string + enum: + - stop + - length + - content_filter + - tool_calls + description: |- + The reason the model stopped generating tokens. This will be `stop` + if the model hit a natural stop point or a provided stop sequence, + `length` if the maximum number of tokens specified in the request + was reached, `content_filter` if content was omitted due to a flag + from our content filters, `tool_calls` if the model called a tool. + Chat.LogProbResponse: + type: object + required: + - content + properties: + content: + type: array + items: + $ref: '#/components/schemas/Chat.TokenLogProb' + nullable: true + description: The log probabilities of the tokens + Chat.MessageChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Chat.SingleChatOutput' + - $ref: '#/components/schemas/Chat.MultipleChatOutput' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.MultipleChatOutput: + type: object + required: + - messages + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + minItems: 1 + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.OpenAISettings: + type: object + properties: + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + Chat.SchemaCompletionResponseFormat: + type: object + required: + - type + - json_schema + properties: + type: + type: string + enum: + - json_schema + description: The format of the response + default: json_schema + json_schema: + type: object + additionalProperties: {} + description: The schema of the response + Chat.SimpleCompletionResponseFormat: + type: object + required: + - type + properties: + type: + type: string + enum: + - text + - json_object + description: The format of the response + default: text + Chat.SingleChatOutput: + type: object + required: + - message + properties: + message: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.TokenLogProb: + type: object + required: + - top_logprobs + properties: + top_logprobs: + type: array + items: + $ref: '#/components/schemas/Chat.BaseTokenLogProb' + minItems: 1 + description: The log probabilities of the tokens + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseTokenLogProb' + Common.JinjaTemplate: + type: string + description: A valid jinja template. + Common.PyExpression: + type: string + description: A simple python expression compatible with SimpleEval. + Common.ResourceCreatedResponse: + type: object + required: + - id + - created_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of created resource + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceDeletedResponse: + type: object + required: + - id + - deleted_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of deleted resource + deleted_at: + type: string + format: date-time + description: When this resource was deleted as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceUpdatedResponse: + type: object + required: + - id + - updated_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of updated resource + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.identifierSafeUnicode: + type: string + maxLength: 120 + pattern: ^[\p{L}\p{Nl}\p{Pattern_Syntax}\p{Pattern_White_Space}]+[\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Pattern_Syntax}\p{Pattern_White_Space}]*$ + description: |- + For Unicode character safety + See: https://unicode.org/reports/tr31/ + See: https://www.unicode.org/reports/tr39/#Identifier_Characters + Common.limit: + type: integer + format: uint16 + minimum: 1 + maximum: 1000 + exclusiveMaximum: true + description: Limit the number of results + Common.logit_bias: + type: number + format: float + minimum: -100 + maximum: 100 + Common.offset: + type: integer + format: uint32 + minimum: 0 + description: Offset to apply to the results + Common.uuid: + type: string + format: uuid + Common.validPythonIdentifier: + type: string + maxLength: 40 + pattern: ^[^\W0-9]\w*$ + description: Valid python identifier names + Docs.BaseDocSearchRequest: + type: object + required: + - limit + - lang + properties: + limit: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + default: 10 + lang: + type: string + enum: + - en-US + description: The language to be used for text-only search. Support for other languages coming soon. + default: en-US + Docs.CreateDocRequest: + type: object + required: + - title + - content + properties: + metadata: + type: object + additionalProperties: {} + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + description: Payload for creating a doc + Docs.Doc: + type: object + required: + - id + - created_at + - title + - content + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + embeddings: + anyOf: + - type: array + items: + type: number + format: float + - type: array + items: + type: array + items: + type: number + format: float + description: Embeddings for the document + readOnly: true + Docs.DocOwner: + type: object + required: + - id + - role + properties: + id: + anyOf: + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + role: + type: string + enum: + - user + - agent + Docs.DocReference: + type: object + required: + - owner + - id + - snippets + - distance + properties: + owner: + allOf: + - $ref: '#/components/schemas/Docs.DocOwner' + description: The owner of this document. + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: ID of the document + title: + type: string + snippets: + type: array + items: + $ref: '#/components/schemas/Docs.Snippet' + minItems: 1 + distance: + type: number + nullable: true + default: null + Docs.DocSearchResponse: + type: object + required: + - docs + - time + properties: + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: The documents that were found + time: + type: number + minimum: 0 + exclusiveMinimum: true + description: The time taken to search in seconds + Docs.EmbedQueryRequest: + type: object + required: + - text + properties: + text: + anyOf: + - type: string + - type: array + items: + type: string + description: Text or texts to embed + Docs.EmbedQueryResponse: + type: object + required: + - vectors + properties: + vectors: + type: array + items: + type: array + items: + type: number + description: The embedded vectors + Docs.HybridDocSearchRequest: + type: object + required: + - confidence + - alpha + - text + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + alpha: + type: number + minimum: 0 + maximum: 1 + description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; + default: 0.75 + text: + type: string + description: Text to use in the search. In `hybrid` search mode, either `text` or both `text` and `vector` fields are required. + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.Snippet: + type: object + required: + - index + - content + properties: + index: + type: integer + format: uint16 + content: + type: string + Docs.TextOnlyDocSearchRequest: + type: object + required: + - text + properties: + text: + type: string + description: Text to use in the search. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.VectorDocSearchRequest: + type: object + required: + - confidence + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Entries.BaseEntry: + type: object + required: + - role + - name + - content + - source + - tokenizer + - token_count + - timestamp + properties: + role: + $ref: '#/components/schemas/Entries.ChatMLRole' + name: + type: string + nullable: true + default: null + content: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + - type: array + items: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + source: + type: string + enum: + - api_request + - api_response + - tool_response + - internal + - summarizer + - meta + tokenizer: + type: string + token_count: + type: integer + format: uint16 + timestamp: + type: number + minimum: 0 + description: This is the time that this event refers to. + Entries.ChatMLRole: + type: string + enum: + - user + - assistant + - system + - function + - function_response + - function_call + - auto + description: ChatML role (system|assistant|user|function_call|function|function_response|auto) + Entries.Entry: + type: object + required: + - created_at + - id + properties: + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Entries.BaseEntry' + Entries.History: + type: object + required: + - entries + - relations + - session_id + - created_at + properties: + entries: + type: array + items: + $ref: '#/components/schemas/Entries.Entry' + relations: + type: array + items: + $ref: '#/components/schemas/Entries.Relation' + session_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + Entries.ImageDetail: + type: string + enum: + - low + - high + - auto + description: Image detail level + Entries.Relation: + type: object + required: + - head + - relation + - tail + properties: + head: + $ref: '#/components/schemas/Common.uuid' + relation: + type: string + tail: + $ref: '#/components/schemas/Common.uuid' + Executions.CreateExecutionRequest: + type: object + required: + - input + properties: + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + metadata: + type: object + additionalProperties: {} + description: Payload for creating an execution + Executions.Execution: + type: object + required: + - task_id + - status + - input + - created_at + - updated_at + - id + properties: + task_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: The ID of the task that the execution is running + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + description: The status of the execution + readOnly: true + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Executions.ResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.StopExecutionRequest: + type: object + required: + - status + - reason + properties: + status: + type: string + enum: + - cancelled + default: cancelled + reason: + type: string + nullable: true + description: The reason for stopping the execution + default: null + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.TaskTokenResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + Executions.Transition: + type: object + required: + - execution_id + - current + - next + - id + properties: + execution_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + current: + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + readOnly: true + next: + type: object + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + nullable: true + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Executions.TransitionEvent' + Executions.TransitionEvent: + type: object + required: + - type + - output + - created_at + - updated_at + properties: + type: + type: string + enum: + - init + - init_branch + - finish + - finish_branch + - wait + - resume + - error + - step + - cancelled + readOnly: true + output: + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + Executions.TransitionTarget: + type: object + required: + - workflow + - step + properties: + workflow: + $ref: '#/components/schemas/Common.identifierSafeUnicode' + step: + type: integer + format: uint16 + Executions.UpdateExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + discriminator: + propertyName: status + mapping: + cancelled: '#/components/schemas/Executions.StopExecutionRequest' + running: '#/components/schemas/Executions.ResumeExecutionRequest' + Jobs.JobState: + type: string + enum: + - pending + - in_progress + - retrying + - succeeded + - aborted + - failed + - unknown + description: 'Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed)' + Jobs.JobStatus: + type: object + required: + - id + - created_at + - updated_at + - name + - reason + - has_progress + - progress + - state + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the job + default: '' + reason: + type: string + description: Reason for the current state of the job + default: '' + has_progress: + type: boolean + description: Whether this Job supports progress updates + default: false + progress: + type: number + format: float + minimum: 0 + maximum: 100 + description: Progress percentage + default: 0 + state: + allOf: + - $ref: '#/components/schemas/Jobs.JobState' + description: Current state of the job + default: pending + Sessions.ContextOverflowType: + type: string + enum: + - truncate + - adaptive + Sessions.CreateOrUpdateSessionRequest: + type: object + required: + - id + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + id: + $ref: '#/components/schemas/Common.uuid' + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Sessions.CreateSessionRequest' + Sessions.CreateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for creating a session + Sessions.MultiAgentMultiUserSession: + type: object + required: + - agents + - users + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentNoUserSession: + type: object + required: + - agents + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentSingleUserSession: + type: object + required: + - agents + - user + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.PatchSessionRequest: + type: object + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for patching a session + Sessions.Session: + type: object + required: + - situation + - summary + - render_templates + - token_budget + - context_overflow + - forward_tool_results + - id + - created_at + - updated_at + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + summary: + type: string + nullable: true + description: Summary (null at the beginning) - generated automatically after every interaction + default: null + readOnly: true + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + kind: + type: string + description: Discriminator property for Session. + discriminator: + propertyName: kind + mapping: + single_agent_no_user: '#/components/schemas/Sessions.SingleAgentNoUserSession' + single_agent_single_user: '#/components/schemas/Sessions.SingleAgentSingleUserSession' + single_agent_multi_user: '#/components/schemas/Sessions.SingleAgentMultiUserSession' + multi_agent_no_user: '#/components/schemas/Sessions.MultiAgentNoUserSession' + multi_agent_single_user: '#/components/schemas/Sessions.MultiAgentSingleUserSession' + multi_agent_multi_user: '#/components/schemas/Sessions.MultiAgentMultiUserSession' + Sessions.SingleAgentMultiUserSession: + type: object + required: + - agent + - users + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentNoUserSession: + type: object + required: + - agent + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentSingleUserSession: + type: object + required: + - agent + - user + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.UpdateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for updating a session + Tasks.CaseThen: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CaseThenUpdateItem: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CreateTaskRequest: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for creating a task + Tasks.ErrorWorkflowStep: + type: object + required: + - kind_ + - error + properties: + kind_: + type: string + enum: + - error + default: error + readOnly: true + error: + type: string + description: The error message + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - error + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.EvaluateStep: + type: object + required: + - kind_ + - evaluate + properties: + kind_: + type: string + enum: + - evaluate + default: evaluate + readOnly: true + evaluate: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The expression to evaluate + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - evaluate + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachDo: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachDoUpdateItem: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachStep: + type: object + required: + - kind_ + - foreach + properties: + kind_: + type: string + enum: + - foreach + default: foreach + readOnly: true + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDo' + description: The steps to run for each iteration + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - foreach + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachStepUpdateItem: + type: object + required: + - foreach + properties: + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDoUpdateItem' + description: The steps to run for each iteration + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.GetStep: + type: object + required: + - kind_ + - get + properties: + kind_: + type: string + enum: + - get + default: get + readOnly: true + get: + type: string + description: The key to get + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - get + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStep: + type: object + required: + - kind_ + - if + - then + - else + properties: + kind_: + type: string + enum: + - if_else + default: if_else + readOnly: true + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - if_else + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStepUpdateItem: + type: object + required: + - if + - then + - else + properties: + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.LogStep: + type: object + required: + - kind_ + - log + properties: + kind_: + type: string + enum: + - log + default: log + readOnly: true + log: + allOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + description: The value to log + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - log + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStep: + type: object + required: + - kind_ + - parallel + properties: + kind_: + type: string + enum: + - parallel + default: parallel + readOnly: true + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - parallel + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStepUpdateItem: + type: object + required: + - parallel + properties: + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PatchTaskRequest: + type: object + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + description: Payload for patching a task + Tasks.PromptStep: + type: object + required: + - kind_ + - prompt + - tools + - forward_tool_results + properties: + kind_: + type: string + enum: + - prompt + default: prompt + readOnly: true + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRef' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - prompt + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PromptStepUpdateItem: + type: object + required: + - prompt + - tools + - forward_tool_results + properties: + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefUpdateItem' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ReturnStep: + type: object + required: + - kind_ + - return + properties: + kind_: + type: string + enum: + - return + default: return + readOnly: true + return: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to return + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - return + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SetStep: + type: object + required: + - kind_ + - set + properties: + kind_: + type: string + enum: + - set + default: set + readOnly: true + set: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to set + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - set + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SleepFor: + type: object + required: + - seconds + - minutes + - hours + - days + properties: + seconds: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of seconds to sleep for + default: 0 + minutes: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of minutes to sleep for + default: 0 + hours: + type: integer + format: uint16 + minimum: 0 + maximum: 24 + description: The number of hours to sleep for + default: 0 + days: + type: integer + format: uint16 + minimum: 0 + maximum: 30 + description: The number of days to sleep for + default: 0 + Tasks.SleepStep: + type: object + required: + - kind_ + - sleep + properties: + kind_: + type: string + enum: + - sleep + default: sleep + readOnly: true + sleep: + allOf: + - $ref: '#/components/schemas/Tasks.SleepFor' + description: The duration to sleep for (max 31 days) + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - sleep + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStep: + type: object + required: + - kind_ + - switch + properties: + kind_: + type: string + enum: + - switch + default: switch + readOnly: true + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThen' + minItems: 1 + description: The cond tree + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - switch + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStepUpdateItem: + type: object + required: + - switch + properties: + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThenUpdateItem' + minItems: 1 + description: The cond tree + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.Task: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + - id + - created_at + - updated_at + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Object describing a Task + Tasks.TaskTool: + type: object + properties: + inherited: + type: boolean + description: 'Read-only: Whether the tool was inherited or not. Only applies within tasks.' + default: false + readOnly: true + allOf: + - $ref: '#/components/schemas/Tools.CreateToolRequest' + Tasks.ToolCallStep: + type: object + required: + - kind_ + - tool + - arguments + properties: + kind_: + type: string + enum: + - tool_call + default: tool_call + readOnly: true + tool: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: The tool to run + arguments: + anyOf: + - type: object + additionalProperties: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the tool (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - tool_call + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ToolRef: + type: object + required: + - ref + properties: + ref: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefById' + - $ref: '#/components/schemas/Tasks.ToolRefByName' + description: Reference to a tool + Tasks.ToolRefById: + type: object + properties: + id: + $ref: '#/components/schemas/Common.uuid' + description: Reference to a tool by id + Tasks.ToolRefByName: + type: object + properties: + name: + $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Reference to a tool by name + Tasks.ToolRefUpdateItem: + type: object + description: Reference to a tool + Tasks.UpdateTaskRequest: + type: object + required: + - description + - main + - input_schema + - tools + - inherit_tools + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for updating a task + Tasks.WaitForInputInfo: + type: object + required: + - info + properties: + info: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: Any additional info or data + Tasks.WaitForInputStep: + type: object + required: + - kind_ + - wait_for_input + properties: + kind_: + type: string + enum: + - wait_for_input + default: wait_for_input + readOnly: true + wait_for_input: + allOf: + - $ref: '#/components/schemas/Tasks.WaitForInputInfo' + description: Any additional info or data + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - wait_for_input + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.YieldStep: + type: object + required: + - kind_ + - workflow + - arguments + properties: + kind_: + type: string + enum: + - yield + default: yield + readOnly: true + workflow: + type: string + description: |- + The subworkflow to run. + VALIDATION: Should resolve to a defined subworkflow. + arguments: + anyOf: + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the subworkflow (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - yield + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tools.ApiCallDef: + type: object + required: + - method + - url + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ApiCallDefUpdate: + type: object + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ChosenFunctionCall: + type: object + required: + - type + - function + properties: + type: + type: string + enum: + - function + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionCallOption' + description: The function to call + allOf: + - $ref: '#/components/schemas/Tools.ChosenToolCall' + Tools.ChosenToolCall: + type: object + required: + - type + - id + properties: + type: + allOf: + - $ref: '#/components/schemas/Tools.ToolType' + description: Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + discriminator: + propertyName: type + mapping: + function: '#/components/schemas/Tools.ChosenFunctionCall' + description: The response tool value generated by the model + Tools.CreateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for creating a tool + Tools.FunctionCallOption: + type: object + required: + - name + properties: + name: + type: string + description: The name of the function + Tools.FunctionDef: + type: object + properties: + name: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons.' + default: null + description: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons.' + default: null + parameters: + type: object + additionalProperties: {} + description: The parameters the function accepts + description: Function definition + Tools.IntegrationDef: + type: object + required: + - provider + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - email + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.IntegrationDefUpdate: + type: object + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - email + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.NamedToolChoice: + type: object + properties: + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + Tools.PatchToolRequest: + type: object + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDefUpdate' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDefUpdate' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDefUpdate' + description: The API call to make + description: Payload for patching a tool + Tools.SystemDef: + type: object + required: + - resource + - operation + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.SystemDefUpdate: + type: object + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.Tool: + type: object + required: + - name + - created_at + - updated_at + - id + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Tools.ToolResponse: + type: object + required: + - id + - output + properties: + id: + $ref: '#/components/schemas/Common.uuid' + output: + type: object + additionalProperties: {} + description: The output of the tool + Tools.ToolType: + type: string + enum: + - function + - integration + - system + - api_call + Tools.UpdateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for updating a tool + Users.CreateOrUpdateUserRequest: + type: object + required: + - id + properties: + id: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Users.CreateUserRequest' + Users.CreateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for creating a user (and associated documents) + Users.PatchUserRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for patching a user + Users.UpdateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for updating a user + Users.User: + type: object + required: + - id + - created_at + - updated_at + - name + - about + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: Authorization + ApiKeyAuth_: + type: apiKey + in: header + name: X-Auth-Key +servers: + - url: https://{serverEnv}.julep.ai/api + description: The julep cloud service endpoint + variables: + serverEnv: + default: api-alpha + description: The environment to use + enum: + - api + - api-alpha diff --git a/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml b/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml new file mode 100644 index 000000000..95d50b77a --- /dev/null +++ b/typespec/tsp-output/@typespec/openapi3/openapi-1.0.0.yaml @@ -0,0 +1,6244 @@ +openapi: 3.0.0 +info: + title: Julep API + termsOfService: https://julep.ai/terms + contact: + name: Julep AI + url: https://julep.ai + email: developers@julep.ai + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + summary: A backend for creating stateful AI apps + description: Julep is a backend for creating stateful AI apps with background tasks and long-term memory easily. + version: 1.0.0 +externalDocs: + url: https://docs.julep.ai + description: Julep API documentation +tags: [] +paths: + /agents: + get: + operationId: AgentsRoute_list + description: List Agents (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Agents.Agent' + required: + - items + post: + operationId: AgentsRoute_create + description: Create a new Agent + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}: + post: + operationId: AgentsRoute_createOrUpdate + description: Create or update an Agent + parameters: + - $ref: '#/components/parameters/Agents.CreateOrUpdateAgentRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + put: + operationId: AgentsRoute_update + description: Update an existing Agent by id (overwrites existing values; use PATCH for merging instead) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.UpdateAgentRequest' + patch: + operationId: AgentsRoute_patch + description: Update an existing Agent by id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.PatchAgentRequest' + delete: + operationId: AgentsRoute_delete + description: Delete Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: AgentsRoute_get + description: Get an Agent by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.Agent' + /agents/{id}/docs: + get: + operationId: AgentDocsRoute_list + description: List Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: AgentDocsRoute_create + description: Create a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /agents/{id}/docs/{child_id}: + delete: + operationId: AgentDocsRoute_delete + description: Delete a Doc for this Agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/search: + post: + operationId: AgentsDocsSearchRoute_search + description: Search Docs owned by an Agent + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body + /agents/{id}/tasks: + get: + operationId: TasksRoute_list + description: List tasks (paginated) + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tasks.Task' + required: + - items + post: + operationId: TasksRoute_create + description: Create a new task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /agents/{id}/tasks/{child_id}: + put: + operationId: TasksRoute_update + description: Update an existing task (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.UpdateTaskRequest' + patch: + operationId: TasksRoute_patch + description: Update an existing task (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.PatchTaskRequest' + delete: + operationId: TasksRoute_delete + description: Delete a task by its id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{id}/tools: + get: + operationId: AgentToolsRoute_list + description: List tools of the given agent + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + required: + - items + post: + operationId: AgentToolsRoute_create + description: Create a new tool for this agent + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Agents.CreateAgentRequest' + /agents/{id}/tools/{child_id}: + put: + operationId: AgentToolsRoute_update + description: Update an existing tool (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be updated + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.UpdateToolRequest' + patch: + operationId: AgentToolsRoute_patch + description: Update an existing tool (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be patched + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Tools.PatchToolRequest' + delete: + operationId: AgentToolsRoute_delete + description: Delete an existing tool by id + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /agents/{parent_id}/tasks/{id}: + post: + operationId: TasksCreateOrUpdateRoute_createOrUpdate + description: Create or update a task + parameters: + - name: parent_id + in: path + required: true + description: ID of the agent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Tasks.CreateOrUpdateTaskRequest.id' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/x-yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + text/yaml: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + application/json: + schema: + $ref: '#/components/schemas/Tasks.CreateTaskRequest' + /docs/{id}: + get: + operationId: IndividualDocsRoute_get + description: Get Doc by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.Doc' + /embed: + post: + operationId: EmbedRoute_embed + description: Embed a query for search + parameters: [] + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.EmbedQueryResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + $ref: '#/components/schemas/Docs.EmbedQueryRequest' + required: + - body + /executions: + post: + operationId: ExecutionsRoute_resumeWithTaskToken + description: Resume an execution with a task token + parameters: + - name: task_token + in: query + required: true + description: A Task Token is a unique identifier for a specific Task Execution. + schema: + type: string + explode: false + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.TaskTokenResumeExecutionRequest' + description: Request to resume an execution with a task token + security: + - {} + /executions/{id}: + get: + operationId: ExecutionsRoute_get + description: Get an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.Execution' + put: + operationId: ExecutionsRoute_update + description: Update an existing Execution + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + /executions/{id}/transitions: + get: + operationId: ExecutionTransitionsRoute_list + description: List the Transitions of an Execution by id + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + type: object + properties: + transitions: + type: array + items: + $ref: '#/components/schemas/Executions.Transition' + required: + - transitions + required: + - items + /executions/{id}/transitions.stream: + get: + operationId: ExecutionTransitionsStreamRoute_stream + description: Stream events emitted by the given execution + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - name: next_token + in: query + required: true + description: Next page token + schema: + type: string + nullable: true + default: null + explode: false + responses: + '200': + description: The request has succeeded. + content: + text/event-stream: + schema: + type: string + /jobs/{id}: + get: + operationId: JobRoute_get + description: Get the status of an existing Job by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Jobs.JobStatus' + /sessions: + get: + operationId: SessionsRoute_list + description: List sessions (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Sessions.Session' + required: + - items + post: + operationId: SessionsRoute_create + description: Create a new session + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + /sessions/{id}: + post: + operationId: SessionsRoute_createOrUpdate + description: Create or update a session + parameters: + - $ref: '#/components/parameters/Sessions.CreateOrUpdateSessionRequest.id' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.CreateSessionRequest' + put: + operationId: SessionsRoute_update + description: Update an existing session by its id (overwrites all existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.UpdateSessionRequest' + patch: + operationId: SessionsRoute_patch + description: Update an existing session by its id (merges with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.PatchSessionRequest' + delete: + operationId: SessionsRoute_delete + description: Delete a session by its id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: SessionsRoute_get + description: Get a session by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Sessions.Session' + /sessions/{id}/chat: + post: + operationId: ChatRoute_generate + description: Generate a response from the model + parameters: + - name: id + in: path + required: true + description: The session ID + schema: + $ref: '#/components/schemas/Common.uuid' + - name: x-custom-api-key + in: header + required: false + description: Custom API key + schema: + type: string + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/Chat.ChunkChatResponse' + - $ref: '#/components/schemas/Chat.MessageChatResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Chat.ChatInput' + description: Request to generate a response from the model + /sessions/{id}/history: + delete: + operationId: HistoryRoute_delete + description: Clear the history of a Session (resets the Session) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: HistoryRoute_history + description: Get history of a Session + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Entries.History' + /tasks/{id}: + get: + operationId: TasksGetRoute_get + description: Get a task by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Tasks.Task' + /tasks/{id}/executions: + post: + operationId: TaskExecutionsRoute_create + description: Create an execution for the given task + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Executions.CreateExecutionRequest' + get: + operationId: TaskExecutionsRoute_list + description: List executions of the given task + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Executions.Execution' + required: + - items + /users: + get: + operationId: UsersRoute_list + description: List users (paginated) + parameters: + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Users.User' + required: + - items + post: + operationId: UsersRoute_create + description: Create a new user + parameters: [] + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + /users/{id}: + post: + operationId: UsersRoute_createOrUpdate + description: Create or update a user + parameters: + - $ref: '#/components/parameters/Users.CreateOrUpdateUserRequest' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.CreateUserRequest' + put: + operationId: UsersRoute_update + description: Update an existing user by id (overwrite existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.UpdateUserRequest' + patch: + operationId: UsersRoute_patch + description: Update an existing user by id (merge with existing values) + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceUpdatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Users.PatchUserRequest' + delete: + operationId: UsersRoute_delete + description: Delete a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + get: + operationId: UsersRoute_get + description: Get a user by id + parameters: + - name: id + in: path + required: true + description: ID of the resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Users.User' + /users/{id}/docs: + get: + operationId: UserDocsRoute_list + description: List Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of parent + schema: + $ref: '#/components/schemas/Common.uuid' + - $ref: '#/components/parameters/Common.PaginationOptions.limit' + - $ref: '#/components/parameters/Common.PaginationOptions.offset' + - $ref: '#/components/parameters/Common.PaginationOptions.sort_by' + - $ref: '#/components/parameters/Common.PaginationOptions.direction' + - $ref: '#/components/parameters/Common.PaginationOptions.metadata_filter' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/Docs.Doc' + required: + - items + post: + operationId: UserDocsRoute_create + description: Create a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '201': + description: The request has succeeded and a new resource has been created as a result. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceCreatedResponse' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.CreateDocRequest' + /users/{id}/docs/{child_id}: + delete: + operationId: UserDocsRoute_delete + description: Delete a Doc for this User + parameters: + - name: id + in: path + required: true + description: ID of parent resource + schema: + $ref: '#/components/schemas/Common.uuid' + - name: child_id + in: path + required: true + description: ID of the resource to be deleted + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '202': + description: The request has been accepted for processing, but processing has not yet completed. + content: + application/json: + schema: + $ref: '#/components/schemas/Common.ResourceDeletedResponse' + /users/{id}/search: + post: + operationId: UserDocsSearchRoute_search + description: Search Docs owned by a User + parameters: + - name: id + in: path + required: true + description: ID of the parent + schema: + $ref: '#/components/schemas/Common.uuid' + responses: + '200': + description: The request has succeeded. + content: + application/json: + schema: + $ref: '#/components/schemas/Docs.DocSearchResponse' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + body: + anyOf: + - $ref: '#/components/schemas/Docs.VectorDocSearchRequest' + - $ref: '#/components/schemas/Docs.TextOnlyDocSearchRequest' + - $ref: '#/components/schemas/Docs.HybridDocSearchRequest' + required: + - body +security: + - ApiKeyAuth: [] + - ApiKeyAuth_: [] +components: + parameters: + Agents.CreateOrUpdateAgentRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Common.PaginationOptions.direction: + name: direction + in: query + required: true + description: Sort direction + schema: + type: string + enum: + - asc + - desc + default: asc + explode: false + Common.PaginationOptions.limit: + name: limit + in: query + required: true + description: Limit the number of items returned + schema: + $ref: '#/components/schemas/Common.limit' + default: 100 + explode: false + Common.PaginationOptions.metadata_filter: + name: metadata_filter + in: query + required: true + description: Object to filter results by metadata + schema: + type: object + additionalProperties: + anyOf: + - type: number + - type: string + - type: boolean + nullable: true + explode: false + Common.PaginationOptions.offset: + name: offset + in: query + required: true + description: Offset the items returned + schema: + $ref: '#/components/schemas/Common.offset' + default: 0 + explode: false + Common.PaginationOptions.sort_by: + name: sort_by + in: query + required: true + description: Sort by a field + schema: + type: string + enum: + - created_at + - updated_at + default: created_at + explode: false + Sessions.CreateOrUpdateSessionRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Tasks.CreateOrUpdateTaskRequest.id: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + Users.CreateOrUpdateUserRequest: + name: id + in: path + required: true + schema: + $ref: '#/components/schemas/Common.uuid' + schemas: + Agents.Agent: + type: object + required: + - id + - created_at + - updated_at + - name + - about + - model + - instructions + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + Agents.CreateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for creating a agent (and associated documents) + Agents.CreateOrUpdateAgentRequest: + type: object + required: + - id + - name + - about + - model + - instructions + properties: + id: + $ref: '#/components/schemas/Common.uuid' + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + allOf: + - $ref: '#/components/schemas/Agents.CreateAgentRequest' + Agents.PatchAgentRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for patching a agent + Agents.UpdateAgentRequest: + type: object + required: + - name + - about + - model + - instructions + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the agent + default: '' + about: + type: string + description: About the agent + default: '' + model: + type: string + description: Model name to use (gpt-4-turbo, gemini-nano etc) + default: '' + instructions: + anyOf: + - type: string + - type: array + items: + type: string + description: Instructions for the agent + default: [] + default_settings: + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + description: Default settings for all sessions created by this agent + description: Payload for updating a agent + Chat.BaseChatOutput: + type: object + required: + - index + - finish_reason + properties: + index: + type: integer + format: uint32 + finish_reason: + allOf: + - $ref: '#/components/schemas/Chat.FinishReason' + description: The reason the model stopped generating tokens + default: stop + logprobs: + allOf: + - $ref: '#/components/schemas/Chat.LogProbResponse' + description: The log probabilities of tokens + Chat.BaseChatResponse: + type: object + required: + - jobs + - docs + - created_at + - id + properties: + usage: + allOf: + - $ref: '#/components/schemas/Chat.CompetionUsage' + description: Usage statistics for the completion request + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: Background job IDs that may have been spawned from this interaction. + default: [] + readOnly: true + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: Documents referenced for this request (for citation purposes). + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Chat.BaseTokenLogProb: + type: object + required: + - token + - logprob + properties: + token: + type: string + logprob: + type: number + format: float + description: The log probability of the token + bytes: + type: array + items: + type: integer + format: uint16 + Chat.ChatInput: + type: object + required: + - remember + - recall + - save + - stream + - stop + properties: + remember: + type: boolean + description: 'DISABLED: Whether this interaction should form new memories or not (will be enabled in a future release)' + default: false + readOnly: true + recall: + type: boolean + description: Whether previous memories and docs should be recalled or not + default: true + save: + type: boolean + description: Whether this interaction should be stored in the session history or not + default: true + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + allOf: + - $ref: '#/components/schemas/Chat.ChatInputData' + Chat.ChatInputData: + type: object + required: + - messages + - tools + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + minItems: 1 + description: A list of new input messages comprising the conversation so far. + tools: + type: array + items: + $ref: '#/components/schemas/Tools.Tool' + description: (Advanced) List of tools that are provided in addition to agent's default set of tools. + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: Can be one of existing tools given to the agent earlier or the ones provided in this request. + Chat.ChatOutputChunk: + type: object + required: + - delta + properties: + delta: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The message generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: Streaming chat completion output + Chat.ChatSettings: + type: object + required: + - stream + - stop + properties: + model: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Identifier of the model to be used + stream: + type: boolean + description: Indicates if the server should stream the response as it's generated + default: false + stop: + type: array + items: + type: string + maxItems: 4 + description: Up to 4 sequences where the API will stop generating further tokens. + default: [] + seed: + type: integer + format: int16 + minimum: -1 + maximum: 1000 + description: If specified, the system will make a best effort to sample deterministically for that particular seed value + max_tokens: + type: integer + format: uint32 + minimum: 1 + description: The maximum number of tokens to generate in the chat completion + logit_bias: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.logit_bias' + description: Modify the likelihood of specified tokens appearing in the completion + response_format: + anyOf: + - $ref: '#/components/schemas/Chat.SimpleCompletionResponseFormat' + - $ref: '#/components/schemas/Chat.SchemaCompletionResponseFormat' + description: Response format (set to `json_object` to restrict output to JSON) + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of the agent to use for this interaction. (Only applicable for multi-agent sessions) + allOf: + - $ref: '#/components/schemas/Chat.DefaultChatSettings' + Chat.ChunkChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + $ref: '#/components/schemas/Chat.ChatOutputChunk' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.CompetionUsage: + type: object + properties: + completion_tokens: + type: integer + format: uint32 + description: Number of tokens in the generated completion + readOnly: true + prompt_tokens: + type: integer + format: uint32 + description: Number of tokens in the prompt + readOnly: true + total_tokens: + type: integer + format: uint32 + description: Total number of tokens used in the request (prompt + completion) + readOnly: true + description: Usage statistics for the completion request + Chat.DefaultChatSettings: + type: object + properties: + repetition_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + length_penalty: + type: number + format: float + minimum: 0 + maximum: 2 + description: Number between 0 and 2.0. 1.0 is neutral and values larger than that penalize number of tokens generated. + min_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Minimum probability compared to leading token to be considered + allOf: + - $ref: '#/components/schemas/Chat.OpenAISettings' + description: Default settings for the chat session (also used by the agent) + Chat.FinishReason: + type: string + enum: + - stop + - length + - content_filter + - tool_calls + description: |- + The reason the model stopped generating tokens. This will be `stop` + if the model hit a natural stop point or a provided stop sequence, + `length` if the maximum number of tokens specified in the request + was reached, `content_filter` if content was omitted due to a flag + from our content filters, `tool_calls` if the model called a tool. + Chat.LogProbResponse: + type: object + required: + - content + properties: + content: + type: array + items: + $ref: '#/components/schemas/Chat.TokenLogProb' + nullable: true + description: The log probabilities of the tokens + Chat.MessageChatResponse: + type: object + required: + - choices + properties: + choices: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Chat.SingleChatOutput' + - $ref: '#/components/schemas/Chat.MultipleChatOutput' + description: The deltas generated by the model + allOf: + - $ref: '#/components/schemas/Chat.BaseChatResponse' + Chat.MultipleChatOutput: + type: object + required: + - messages + properties: + messages: + type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + minItems: 1 + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.OpenAISettings: + type: object + properties: + frequency_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + presence_penalty: + type: number + format: float + minimum: -2 + maximum: 2 + description: Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim. + temperature: + type: number + format: float + minimum: 0 + maximum: 5 + description: What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. + top_p: + type: number + format: float + minimum: 0 + maximum: 1 + description: Defaults to 1 An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both. + Chat.SchemaCompletionResponseFormat: + type: object + required: + - type + - json_schema + properties: + type: + type: string + enum: + - json_schema + description: The format of the response + default: json_schema + json_schema: + type: object + additionalProperties: {} + description: The schema of the response + Chat.SimpleCompletionResponseFormat: + type: object + required: + - type + properties: + type: + type: string + enum: + - text + - json_object + description: The format of the response + default: text + Chat.SingleChatOutput: + type: object + required: + - message + properties: + message: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - type: string + - type: array + items: + type: string + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + tool_calls: + type: array + items: + $ref: '#/components/schemas/Tools.ChosenToolCall' + nullable: true + description: Tool calls generated by the model. + default: [] + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseChatOutput' + description: The output returned by the model. Note that, depending on the model provider, they might return more than one message. + Chat.TokenLogProb: + type: object + required: + - top_logprobs + properties: + top_logprobs: + type: array + items: + $ref: '#/components/schemas/Chat.BaseTokenLogProb' + minItems: 1 + description: The log probabilities of the tokens + readOnly: true + allOf: + - $ref: '#/components/schemas/Chat.BaseTokenLogProb' + Common.JinjaTemplate: + type: string + description: A valid jinja template. + Common.PyExpression: + type: string + description: A simple python expression compatible with SimpleEval. + Common.ResourceCreatedResponse: + type: object + required: + - id + - created_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of created resource + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceDeletedResponse: + type: object + required: + - id + - deleted_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of deleted resource + deleted_at: + type: string + format: date-time + description: When this resource was deleted as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.ResourceUpdatedResponse: + type: object + required: + - id + - updated_at + - jobs + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: ID of updated resource + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + jobs: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + description: IDs (if any) of jobs created as part of this request + default: [] + readOnly: true + Common.identifierSafeUnicode: + type: string + maxLength: 120 + pattern: ^[\p{L}\p{Nl}\p{Pattern_Syntax}\p{Pattern_White_Space}]+[\p{ID_Start}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Pattern_Syntax}\p{Pattern_White_Space}]*$ + description: |- + For Unicode character safety + See: https://unicode.org/reports/tr31/ + See: https://www.unicode.org/reports/tr39/#Identifier_Characters + Common.limit: + type: integer + format: uint16 + minimum: 1 + maximum: 1000 + exclusiveMaximum: true + description: Limit the number of results + Common.logit_bias: + type: number + format: float + minimum: -100 + maximum: 100 + Common.offset: + type: integer + format: uint32 + minimum: 0 + description: Offset to apply to the results + Common.uuid: + type: string + format: uuid + Common.validPythonIdentifier: + type: string + maxLength: 40 + pattern: ^[^\W0-9]\w*$ + description: Valid python identifier names + Docs.BaseDocSearchRequest: + type: object + required: + - limit + - lang + properties: + limit: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + default: 10 + lang: + type: string + enum: + - en-US + description: The language to be used for text-only search. Support for other languages coming soon. + default: en-US + Docs.CreateDocRequest: + type: object + required: + - title + - content + properties: + metadata: + type: object + additionalProperties: {} + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + description: Payload for creating a doc + Docs.Doc: + type: object + required: + - id + - created_at + - title + - content + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + title: + type: string + maxLength: 800 + description: Title describing what this document contains + content: + anyOf: + - type: string + - type: array + items: + type: string + description: Contents of the document + embeddings: + anyOf: + - type: array + items: + type: number + format: float + - type: array + items: + type: array + items: + type: number + format: float + description: Embeddings for the document + readOnly: true + Docs.DocOwner: + type: object + required: + - id + - role + properties: + id: + anyOf: + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + - allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + role: + type: string + enum: + - user + - agent + Docs.DocReference: + type: object + required: + - owner + - id + - snippets + - distance + properties: + owner: + allOf: + - $ref: '#/components/schemas/Docs.DocOwner' + description: The owner of this document. + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: ID of the document + title: + type: string + snippets: + type: array + items: + $ref: '#/components/schemas/Docs.Snippet' + minItems: 1 + distance: + type: number + nullable: true + default: null + Docs.DocSearchResponse: + type: object + required: + - docs + - time + properties: + docs: + type: array + items: + $ref: '#/components/schemas/Docs.DocReference' + description: The documents that were found + time: + type: number + minimum: 0 + exclusiveMinimum: true + description: The time taken to search in seconds + Docs.EmbedQueryRequest: + type: object + required: + - text + properties: + text: + anyOf: + - type: string + - type: array + items: + type: string + description: Text or texts to embed + Docs.EmbedQueryResponse: + type: object + required: + - vectors + properties: + vectors: + type: array + items: + type: array + items: + type: number + description: The embedded vectors + Docs.HybridDocSearchRequest: + type: object + required: + - confidence + - alpha + - text + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + alpha: + type: number + minimum: 0 + maximum: 1 + description: The weight to apply to BM25 vs Vector search results. 0 => pure BM25; 1 => pure vector; + default: 0.75 + text: + type: string + description: Text to use in the search. In `hybrid` search mode, either `text` or both `text` and `vector` fields are required. + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.Snippet: + type: object + required: + - index + - content + properties: + index: + type: integer + format: uint16 + content: + type: string + Docs.TextOnlyDocSearchRequest: + type: object + required: + - text + properties: + text: + type: string + description: Text to use in the search. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Docs.VectorDocSearchRequest: + type: object + required: + - confidence + - vector + properties: + confidence: + type: number + minimum: 0 + maximum: 1 + description: The confidence cutoff level + default: 0.5 + vector: + type: array + items: + type: number + description: Vector to use in the search. Must be the same dimensions as the embedding model or else an error will be thrown. + allOf: + - $ref: '#/components/schemas/Docs.BaseDocSearchRequest' + Entries.BaseEntry: + type: object + required: + - role + - name + - content + - source + - tokenizer + - token_count + - timestamp + properties: + role: + $ref: '#/components/schemas/Entries.ChatMLRole' + name: + type: string + nullable: true + default: null + content: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + - type: array + items: + anyOf: + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + type: string + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + - $ref: '#/components/schemas/Tools.Tool' + - $ref: '#/components/schemas/Tools.ChosenToolCall' + - type: string + - $ref: '#/components/schemas/Tools.ToolResponse' + source: + type: string + enum: + - api_request + - api_response + - tool_response + - internal + - summarizer + - meta + tokenizer: + type: string + token_count: + type: integer + format: uint16 + timestamp: + type: number + minimum: 0 + description: This is the time that this event refers to. + Entries.ChatMLRole: + type: string + enum: + - user + - assistant + - system + - function + - function_response + - function_call + - auto + description: ChatML role (system|assistant|user|function_call|function|function_response|auto) + Entries.Entry: + type: object + required: + - created_at + - id + properties: + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + allOf: + - $ref: '#/components/schemas/Entries.BaseEntry' + Entries.History: + type: object + required: + - entries + - relations + - session_id + - created_at + properties: + entries: + type: array + items: + $ref: '#/components/schemas/Entries.Entry' + relations: + type: array + items: + $ref: '#/components/schemas/Entries.Relation' + session_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + Entries.ImageDetail: + type: string + enum: + - low + - high + - auto + description: Image detail level + Entries.Relation: + type: object + required: + - head + - relation + - tail + properties: + head: + $ref: '#/components/schemas/Common.uuid' + relation: + type: string + tail: + $ref: '#/components/schemas/Common.uuid' + Executions.CreateExecutionRequest: + type: object + required: + - input + properties: + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + metadata: + type: object + additionalProperties: {} + description: Payload for creating an execution + Executions.Execution: + type: object + required: + - task_id + - status + - input + - created_at + - updated_at + - id + properties: + task_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + description: The ID of the task that the execution is running + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + description: The status of the execution + readOnly: true + input: + type: object + additionalProperties: {} + description: The input to the execution + output: + description: The output of the execution if it succeeded + error: + type: string + description: The error of the execution if it failed + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Executions.ResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.StopExecutionRequest: + type: object + required: + - status + - reason + properties: + status: + type: string + enum: + - cancelled + default: cancelled + reason: + type: string + nullable: true + description: The reason for stopping the execution + default: null + allOf: + - $ref: '#/components/schemas/Executions.UpdateExecutionRequest' + Executions.TaskTokenResumeExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - running + default: running + input: + type: object + additionalProperties: {} + description: The input to resume the execution with + Executions.Transition: + type: object + required: + - execution_id + - current + - next + - id + properties: + execution_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + current: + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + readOnly: true + next: + type: object + allOf: + - $ref: '#/components/schemas/Executions.TransitionTarget' + nullable: true + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Executions.TransitionEvent' + Executions.TransitionEvent: + type: object + required: + - type + - output + - created_at + - updated_at + properties: + type: + type: string + enum: + - init + - init_branch + - finish + - finish_branch + - wait + - resume + - error + - step + - cancelled + readOnly: true + output: + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + Executions.TransitionTarget: + type: object + required: + - workflow + - step + properties: + workflow: + $ref: '#/components/schemas/Common.identifierSafeUnicode' + step: + type: integer + format: uint16 + Executions.UpdateExecutionRequest: + type: object + required: + - status + properties: + status: + type: string + enum: + - queued + - starting + - running + - awaiting_input + - succeeded + - failed + - cancelled + discriminator: + propertyName: status + mapping: + cancelled: '#/components/schemas/Executions.StopExecutionRequest' + running: '#/components/schemas/Executions.ResumeExecutionRequest' + Jobs.JobState: + type: string + enum: + - pending + - in_progress + - retrying + - succeeded + - aborted + - failed + - unknown + description: 'Current state (one of: pending, in_progress, retrying, succeeded, aborted, failed)' + Jobs.JobStatus: + type: object + required: + - id + - created_at + - updated_at + - name + - reason + - has_progress + - progress + - state + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the job + default: '' + reason: + type: string + description: Reason for the current state of the job + default: '' + has_progress: + type: boolean + description: Whether this Job supports progress updates + default: false + progress: + type: number + format: float + minimum: 0 + maximum: 100 + description: Progress percentage + default: 0 + state: + allOf: + - $ref: '#/components/schemas/Jobs.JobState' + description: Current state of the job + default: pending + Sessions.ContextOverflowType: + type: string + enum: + - truncate + - adaptive + Sessions.CreateOrUpdateSessionRequest: + type: object + required: + - id + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + id: + $ref: '#/components/schemas/Common.uuid' + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + allOf: + - $ref: '#/components/schemas/Sessions.CreateSessionRequest' + Sessions.CreateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + user: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: User ID of user associated with this session + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + agent: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Agent ID of agent associated with this session + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for creating a session + Sessions.MultiAgentMultiUserSession: + type: object + required: + - agents + - users + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentNoUserSession: + type: object + required: + - agents + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.MultiAgentSingleUserSession: + type: object + required: + - agents + - user + properties: + agents: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.PatchSessionRequest: + type: object + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for patching a session + Sessions.Session: + type: object + required: + - situation + - summary + - render_templates + - token_budget + - context_overflow + - forward_tool_results + - id + - created_at + - updated_at + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + summary: + type: string + nullable: true + description: Summary (null at the beginning) - generated automatically after every interaction + default: null + readOnly: true + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + kind: + type: string + description: Discriminator property for Session. + discriminator: + propertyName: kind + mapping: + single_agent_no_user: '#/components/schemas/Sessions.SingleAgentNoUserSession' + single_agent_single_user: '#/components/schemas/Sessions.SingleAgentSingleUserSession' + single_agent_multi_user: '#/components/schemas/Sessions.SingleAgentMultiUserSession' + multi_agent_no_user: '#/components/schemas/Sessions.MultiAgentNoUserSession' + multi_agent_single_user: '#/components/schemas/Sessions.MultiAgentSingleUserSession' + multi_agent_multi_user: '#/components/schemas/Sessions.MultiAgentMultiUserSession' + Sessions.SingleAgentMultiUserSession: + type: object + required: + - agent + - users + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + users: + type: array + items: + $ref: '#/components/schemas/Common.uuid' + minItems: 2 + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentNoUserSession: + type: object + required: + - agent + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.SingleAgentSingleUserSession: + type: object + required: + - agent + - user + properties: + agent: + $ref: '#/components/schemas/Common.uuid' + user: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Sessions.Session' + Sessions.UpdateSessionRequest: + type: object + required: + - situation + - render_templates + - token_budget + - context_overflow + - forward_tool_results + properties: + situation: + type: string + description: A specific situation that sets the background for this session + default: |- + {%- if agent.name -%} + You are {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if agent.about -%} + About you: {{agent.name}}.{{" "}} + {%- endif -%} + + {%- if user -%} + You are talking to a user + {%- if user.name -%}{{" "}} and their name is {{user.name}} + {%- if user.about -%}. About the user: {{user.about}}.{%- else -%}.{%- endif -%} + {%- endif -%} + {%- endif -%} + + {{" + + "}} + + {%- if agent.instructions -%} + Instructions:{{" + "}} + {%- if agent.instructions is string -%} + {{agent.instructions}}{{" + "}} + {%- else -%} + {%- for instruction in agent.instructions -%} + - {{instruction}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{" + "}} + {%- endif -%} + + {%- if tools -%} + Tools:{{" + "}} + {%- for tool in tools -%} + {%- if tool.type == "function" -%} + - {{tool.function.name}} + {%- if tool.function.description -%}: {{tool.function.description}}{%- endif -%}{{" + "}} + {%- else -%} + - {{ 0/0 }} {# Error: Other tool types aren't supported yet. #} + {%- endif -%} + {%- endfor -%} + {{" + + "}} + {%- endif -%} + + {%- if docs -%} + Relevant documents:{{" + "}} + {%- for doc in docs -%} + {{doc.title}}{{" + "}} + {%- if doc.content is string -%} + {{doc.content}}{{" + "}} + {%- else -%} + {%- for snippet in doc.content -%} + {{snippet}}{{" + "}} + {%- endfor -%} + {%- endif -%} + {{"---"}} + {%- endfor -%} + {%- endif -%} + render_templates: + type: boolean + description: Render system and assistant message content as jinja templates + default: true + token_budget: + type: integer + format: uint16 + nullable: true + description: Threshold value for the adaptive context functionality + default: null + context_overflow: + oneOf: + - $ref: '#/components/schemas/Sessions.ContextOverflowType' + nullable: true + description: Action to start on context window overflow + default: null + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be sent back to the model as the model's input. + If a tool call is not made, the model's output will be returned as is. + default: null + metadata: + type: object + additionalProperties: {} + description: Payload for updating a session + Tasks.CaseThen: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CaseThenUpdateItem: + type: object + required: + - case + - then + properties: + case: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + Tasks.CreateTaskRequest: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for creating a task + Tasks.ErrorWorkflowStep: + type: object + required: + - kind_ + - error + properties: + kind_: + type: string + enum: + - error + default: error + readOnly: true + error: + type: string + description: The error message + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - error + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.EvaluateStep: + type: object + required: + - kind_ + - evaluate + properties: + kind_: + type: string + enum: + - evaluate + default: evaluate + readOnly: true + evaluate: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The expression to evaluate + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - evaluate + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachDo: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachDoUpdateItem: + type: object + required: + - in + - do + properties: + in: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The variable to iterate over. + VALIDATION: Should NOT return more than 1000 elements. + do: + anyOf: + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + Tasks.ForeachStep: + type: object + required: + - kind_ + - foreach + properties: + kind_: + type: string + enum: + - foreach + default: foreach + readOnly: true + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDo' + description: The steps to run for each iteration + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - foreach + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ForeachStepUpdateItem: + type: object + required: + - foreach + properties: + foreach: + allOf: + - $ref: '#/components/schemas/Tasks.ForeachDoUpdateItem' + description: The steps to run for each iteration + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.GetStep: + type: object + required: + - kind_ + - get + properties: + kind_: + type: string + enum: + - get + default: get + readOnly: true + get: + type: string + description: The key to get + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - get + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStep: + type: object + required: + - kind_ + - if + - then + - else + properties: + kind_: + type: string + enum: + - if_else + default: if_else + readOnly: true + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - if_else + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.IfElseWorkflowStepUpdateItem: + type: object + required: + - if + - then + - else + properties: + if: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The condition to evaluate + then: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + description: The steps to run if the condition is true + else: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + nullable: true + description: The steps to run if the condition is false + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.LogStep: + type: object + required: + - kind_ + - log + properties: + kind_: + type: string + enum: + - log + default: log + readOnly: true + log: + allOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + description: The value to log + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - log + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStep: + type: object + required: + - kind_ + - parallel + properties: + kind_: + type: string + enum: + - parallel + default: parallel + readOnly: true + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - parallel + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ParallelStepUpdateItem: + type: object + required: + - parallel + properties: + parallel: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + maxItems: 100 + description: The steps to run in parallel. Max concurrency will depend on the platform. + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PatchTaskRequest: + type: object + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStepUpdateItem' + - $ref: '#/components/schemas/Tasks.SwitchStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ForeachStepUpdateItem' + - $ref: '#/components/schemas/Tasks.ParallelStepUpdateItem' + - type: object + required: + - over + - map + properties: + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStepUpdateItem' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + description: Payload for patching a task + Tasks.PromptStep: + type: object + required: + - kind_ + - prompt + - tools + - forward_tool_results + properties: + kind_: + type: string + enum: + - prompt + default: prompt + readOnly: true + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRef' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - prompt + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.PromptStepUpdateItem: + type: object + required: + - prompt + - tools + - forward_tool_results + properties: + prompt: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + type: object + required: + - role + - content + properties: + role: + allOf: + - $ref: '#/components/schemas/Entries.ChatMLRole' + description: The role of the message + content: + anyOf: + - $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + $ref: '#/components/schemas/Common.JinjaTemplate' + - type: array + items: + anyOf: + - type: object + required: + - text + - type + properties: + text: + $ref: '#/components/schemas/Common.JinjaTemplate' + type: + type: string + enum: + - text + description: The type (fixed to 'text') + default: text + - type: object + required: + - image_url + - type + properties: + image_url: + type: object + required: + - url + - detail + properties: + url: + type: string + description: Image URL or base64 data url (e.g. `data:image/jpeg;base64,`) + detail: + allOf: + - $ref: '#/components/schemas/Entries.ImageDetail' + description: The detail level of the image + default: auto + description: The image URL + type: + type: string + enum: + - image_url + description: The type (fixed to 'image_url') + default: image_url + description: The content parts of the message + name: + type: string + description: Name + continue: + type: boolean + description: Whether to continue this message or return a new one + description: The prompt to run + tools: + anyOf: + - type: string + enum: + - all + - type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefUpdateItem' + - $ref: '#/components/schemas/Tools.CreateToolRequest' + description: The tools to use for the prompt + default: [] + tool_choice: + anyOf: + - type: string + enum: + - auto + - none + - $ref: '#/components/schemas/Tools.NamedToolChoice' + description: The tool choice for the prompt + settings: + allOf: + - $ref: '#/components/schemas/Chat.ChatSettings' + description: Settings for the prompt + unwrap: + type: boolean + description: Whether to unwrap the output of the prompt step, equivalent to `response.choices[0].message.content` + default: false + forward_tool_results: + type: boolean + nullable: true + description: |- + Whether to forward the tool results to the model when available. + "true" => always forward + "false" => never forward + null => forward if applicable (default) + + If a tool call is made, the tool's output will be used as the model's input. + If a tool call is not made, the model's output will be used as the next step's input. + default: null + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ReturnStep: + type: object + required: + - kind_ + - return + properties: + kind_: + type: string + enum: + - return + default: return + readOnly: true + return: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to return + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - return + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SetStep: + type: object + required: + - kind_ + - set + properties: + kind_: + type: string + enum: + - set + default: set + readOnly: true + set: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: The value to set + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - set + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SleepFor: + type: object + required: + - seconds + - minutes + - hours + - days + properties: + seconds: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of seconds to sleep for + default: 0 + minutes: + type: integer + format: uint16 + minimum: 0 + maximum: 60 + description: The number of minutes to sleep for + default: 0 + hours: + type: integer + format: uint16 + minimum: 0 + maximum: 24 + description: The number of hours to sleep for + default: 0 + days: + type: integer + format: uint16 + minimum: 0 + maximum: 30 + description: The number of days to sleep for + default: 0 + Tasks.SleepStep: + type: object + required: + - kind_ + - sleep + properties: + kind_: + type: string + enum: + - sleep + default: sleep + readOnly: true + sleep: + allOf: + - $ref: '#/components/schemas/Tasks.SleepFor' + description: The duration to sleep for (max 31 days) + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - sleep + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStep: + type: object + required: + - kind_ + - switch + properties: + kind_: + type: string + enum: + - switch + default: switch + readOnly: true + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThen' + minItems: 1 + description: The cond tree + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - switch + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.SwitchStepUpdateItem: + type: object + required: + - switch + properties: + switch: + type: array + items: + $ref: '#/components/schemas/Tasks.CaseThenUpdateItem' + minItems: 1 + description: The cond tree + allOf: + - type: object + properties: + kind_: + type: string + description: Discriminator property for BaseWorkflowStep. + discriminator: + propertyName: kind_ + mapping: {} + Tasks.Task: + type: object + required: + - name + - description + - main + - input_schema + - tools + - inherit_tools + - id + - created_at + - updated_at + properties: + name: + type: string + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Object describing a Task + Tasks.TaskTool: + type: object + properties: + inherited: + type: boolean + description: 'Read-only: Whether the tool was inherited or not. Only applies within tasks.' + default: false + readOnly: true + allOf: + - $ref: '#/components/schemas/Tools.CreateToolRequest' + Tasks.ToolCallStep: + type: object + required: + - kind_ + - tool + - arguments + properties: + kind_: + type: string + enum: + - tool_call + default: tool_call + readOnly: true + tool: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: The tool to run + arguments: + anyOf: + - type: object + additionalProperties: + anyOf: + - $ref: '#/components/schemas/Common.PyExpression' + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the tool (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - tool_call + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.ToolRef: + type: object + required: + - ref + properties: + ref: + anyOf: + - $ref: '#/components/schemas/Tasks.ToolRefById' + - $ref: '#/components/schemas/Tasks.ToolRefByName' + description: Reference to a tool + Tasks.ToolRefById: + type: object + properties: + id: + $ref: '#/components/schemas/Common.uuid' + description: Reference to a tool by id + Tasks.ToolRefByName: + type: object + properties: + name: + $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Reference to a tool by name + Tasks.ToolRefUpdateItem: + type: object + description: Reference to a tool + Tasks.UpdateTaskRequest: + type: object + required: + - description + - main + - input_schema + - tools + - inherit_tools + properties: + description: + type: string + default: '' + main: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + minItems: 1 + description: The entrypoint of the task. + input_schema: + type: object + additionalProperties: {} + nullable: true + description: The schema for the input to the task. `null` means all inputs are valid. + default: null + tools: + type: array + items: + $ref: '#/components/schemas/Tasks.TaskTool' + description: Tools defined specifically for this task not included in the Agent itself. + default: [] + inherit_tools: + type: boolean + description: Whether to inherit tools from the parent agent or not. Defaults to true. + default: true + metadata: + type: object + additionalProperties: {} + additionalProperties: + type: array + items: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + - $ref: '#/components/schemas/Tasks.ReturnStep' + - $ref: '#/components/schemas/Tasks.SleepStep' + - $ref: '#/components/schemas/Tasks.ErrorWorkflowStep' + - $ref: '#/components/schemas/Tasks.WaitForInputStep' + - $ref: '#/components/schemas/Tasks.IfElseWorkflowStep' + - $ref: '#/components/schemas/Tasks.SwitchStep' + - $ref: '#/components/schemas/Tasks.ForeachStep' + - $ref: '#/components/schemas/Tasks.ParallelStep' + - type: object + required: + - kind_ + - over + - map + properties: + kind_: + type: string + enum: + - map_reduce + default: map_reduce + readOnly: true + over: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: The variable to iterate over + map: + anyOf: + - $ref: '#/components/schemas/Tasks.EvaluateStep' + - $ref: '#/components/schemas/Tasks.ToolCallStep' + - $ref: '#/components/schemas/Tasks.PromptStep' + - $ref: '#/components/schemas/Tasks.GetStep' + - $ref: '#/components/schemas/Tasks.SetStep' + - $ref: '#/components/schemas/Tasks.LogStep' + - $ref: '#/components/schemas/Tasks.YieldStep' + description: The steps to run for each iteration + reduce: + allOf: + - $ref: '#/components/schemas/Common.PyExpression' + description: |- + The expression to reduce the results. + If not provided, the results are collected and returned as a list. + A special parameter named `results` is the accumulator and `_` is the current value. + initial: + description: The initial value of the reduce expression + default: [] + parallelism: + type: integer + format: uint16 + minimum: 1 + maximum: 100 + description: Whether to run the reduce expression in parallel and how many items to run in each batch + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - map_reduce + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + description: Payload for updating a task + Tasks.WaitForInputInfo: + type: object + required: + - info + properties: + info: + type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + description: Any additional info or data + Tasks.WaitForInputStep: + type: object + required: + - kind_ + - wait_for_input + properties: + kind_: + type: string + enum: + - wait_for_input + default: wait_for_input + readOnly: true + wait_for_input: + allOf: + - $ref: '#/components/schemas/Tasks.WaitForInputInfo' + description: Any additional info or data + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - wait_for_input + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tasks.YieldStep: + type: object + required: + - kind_ + - workflow + - arguments + properties: + kind_: + type: string + enum: + - yield + default: yield + readOnly: true + workflow: + type: string + description: |- + The subworkflow to run. + VALIDATION: Should resolve to a defined subworkflow. + arguments: + anyOf: + - type: object + additionalProperties: + $ref: '#/components/schemas/Common.PyExpression' + - type: string + enum: + - _ + description: The input parameters for the subworkflow (defaults to last step output) + default: _ + allOf: + - type: object + required: + - kind_ + properties: + kind_: + type: string + enum: + - yield + description: The kind of step + readOnly: true + discriminator: + propertyName: kind_ + mapping: {} + Tools.ApiCallDef: + type: object + required: + - method + - url + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ApiCallDefUpdate: + type: object + properties: + method: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + - HEAD + - OPTIONS + - CONNECT + - TRACE + description: The HTTP method to use + url: + type: string + format: uri + description: The URL to call + headers: + type: object + additionalProperties: + type: string + description: The headers to send with the request + content: + type: string + description: The content as base64 to send with the request + data: + type: object + additionalProperties: {} + description: The data to send as form data + json: + type: object + additionalProperties: {} + description: JSON body to send with the request + cookies: + type: object + additionalProperties: + type: string + description: Cookies + params: + anyOf: + - type: string + - type: object + additionalProperties: {} + description: The parameters to send with the request + follow_redirects: + type: boolean + description: Follow redirects + timeout: + type: integer + format: uint8 + description: The timeout for the request + description: API call definition + Tools.ChosenFunctionCall: + type: object + required: + - type + - function + properties: + type: + type: string + enum: + - function + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionCallOption' + description: The function to call + allOf: + - $ref: '#/components/schemas/Tools.ChosenToolCall' + Tools.ChosenToolCall: + type: object + required: + - type + - id + properties: + type: + allOf: + - $ref: '#/components/schemas/Tools.ToolType' + description: Whether this tool is a `function`, `api_call`, `system` etc. (Only `function` tool supported right now) + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + discriminator: + propertyName: type + mapping: + function: '#/components/schemas/Tools.ChosenFunctionCall' + description: The response tool value generated by the model + Tools.CreateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for creating a tool + Tools.FunctionCallOption: + type: object + required: + - name + properties: + name: + type: string + description: The name of the function + Tools.FunctionDef: + type: object + properties: + name: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool name. Here only for compatibility reasons.' + default: null + description: + nullable: true + description: 'DO NOT USE: This will be overriden by the tool description. Here only for compatibility reasons.' + default: null + parameters: + type: object + additionalProperties: {} + description: The parameters the function accepts + description: Function definition + Tools.IntegrationDef: + type: object + required: + - provider + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - email + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.IntegrationDefUpdate: + type: object + properties: + provider: + anyOf: + - type: string + enum: + - dummy + - hacker_news + - weather + - wikipedia + - spider + - brave + - browserbase + - email + - type: string + description: The provider of the integration + method: + type: string + description: The specific method of the integration to call + setup: + type: object + additionalProperties: {} + description: The setup parameters the integration accepts + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the integration call + description: Integration definition + Tools.NamedToolChoice: + type: object + properties: + function: + $ref: '#/components/schemas/Tools.FunctionCallOption' + Tools.PatchToolRequest: + type: object + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDefUpdate' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDefUpdate' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDefUpdate' + description: The API call to make + description: Payload for patching a tool + Tools.SystemDef: + type: object + required: + - resource + - operation + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.SystemDefUpdate: + type: object + properties: + resource: + type: string + enum: + - agent + - user + - task + - execution + - doc + - session + - job + description: Resource is the name of the resource to use + operation: + type: string + enum: + - create + - update + - patch + - create_or_update + - embed + - change_status + - search + - chat + - history + - delete + - get + - list + description: Operation is the name of the operation to perform + resource_id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + description: Resource id (if applicable) + subresource: + type: string + enum: + - tool + - doc + - execution + - transition + description: Sub-resource type (if applicable) + arguments: + type: object + additionalProperties: {} + description: The arguments to pre-apply to the system call + description: System definition + Tools.Tool: + type: object + required: + - name + - created_at + - updated_at + - id + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + Tools.ToolResponse: + type: object + required: + - id + - output + properties: + id: + $ref: '#/components/schemas/Common.uuid' + output: + type: object + additionalProperties: {} + description: The output of the tool + Tools.ToolType: + type: string + enum: + - function + - integration + - system + - api_call + Tools.UpdateToolRequest: + type: object + required: + - name + properties: + name: + allOf: + - $ref: '#/components/schemas/Common.validPythonIdentifier' + description: Name of the tool (must be unique for this agent and a valid python identifier string ) + description: + type: string + description: Description of the tool + function: + allOf: + - $ref: '#/components/schemas/Tools.FunctionDef' + description: The function to call + integration: + allOf: + - $ref: '#/components/schemas/Tools.IntegrationDef' + description: The integration to call + system: + allOf: + - $ref: '#/components/schemas/Tools.SystemDef' + description: The system to call + api_call: + allOf: + - $ref: '#/components/schemas/Tools.ApiCallDef' + description: The API call to make + description: Payload for updating a tool + Users.CreateOrUpdateUserRequest: + type: object + required: + - id + properties: + id: + $ref: '#/components/schemas/Common.uuid' + allOf: + - $ref: '#/components/schemas/Users.CreateUserRequest' + Users.CreateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for creating a user (and associated documents) + Users.PatchUserRequest: + type: object + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for patching a user + Users.UpdateUserRequest: + type: object + required: + - name + - about + properties: + metadata: + type: object + additionalProperties: {} + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + description: Payload for updating a user + Users.User: + type: object + required: + - id + - created_at + - updated_at + - name + - about + properties: + id: + allOf: + - $ref: '#/components/schemas/Common.uuid' + readOnly: true + metadata: + type: object + additionalProperties: {} + created_at: + type: string + format: date-time + description: When this resource was created as UTC date-time + readOnly: true + updated_at: + type: string + format: date-time + description: When this resource was updated as UTC date-time + readOnly: true + name: + allOf: + - $ref: '#/components/schemas/Common.identifierSafeUnicode' + description: Name of the user + default: '' + about: + type: string + description: About the user + default: '' + securitySchemes: + ApiKeyAuth: + type: apiKey + in: header + name: Authorization + ApiKeyAuth_: + type: apiKey + in: header + name: X-Auth-Key +servers: + - url: https://{serverEnv}.julep.ai/api + description: The julep cloud service endpoint + variables: + serverEnv: + default: api-alpha + description: The environment to use + enum: + - api + - api-alpha diff --git a/typespec/tspconfig.yaml b/typespec/tspconfig.yaml index c5b3491f6..7bd4e8d1e 100644 --- a/typespec/tspconfig.yaml +++ b/typespec/tspconfig.yaml @@ -6,4 +6,4 @@ options: file-type: yaml output-file: "openapi-{version}.yaml" new-line: lf - # omit-unreachable-types: true + omit-unreachable-types: true diff --git a/typespec/versions.tsp b/typespec/versions.tsp index 590e07a59..4739bbdf2 100644 --- a/typespec/versions.tsp +++ b/typespec/versions.tsp @@ -2,4 +2,5 @@ namespace Versions; enum ApiVersions { v0_4: "0.4.0", + v1_0: "1.0.0", } diff --git a/v0.3_README-CN.md b/v0.3_README-CN.md deleted file mode 100644 index 2c88ad382..000000000 --- a/v0.3_README-CN.md +++ /dev/null @@ -1,230 +0,0 @@ -[English](/) | 中文翻译 - -
- julep -
- ---- - -💸🤑 **宣布我们的赏金计划:** 帮助 Julep 社区修复错误并发布功能,即可获得报酬。更多详情[点击这里](https://github.com/julep-ai/julep/discussions/categories/bounty-program)。 - ---- -## 在对话历史记录、支持任何LLM、代理式工作流、集成等方面开始您的项目。 - -

-
- 探索文档 » -
-
- 报告错误 - · - 请求功能 - · - 加入我们的Discord - · - X - · - 领英 -

- - -

- NPM Version -   - PyPI - Version -   - Docker Image Version -   - GitHub License -

- ---- - -## 为什么选择 Julep? -我们构建了许多人工智能应用程序,并且了解评估数百种工具、技术和模型,然后使它们良好地配合在一起有多么困难。 - -**问题** -1. 具有记忆、知识和工具的LLM应用的门槛太高了。 -2. 通过多代理框架进行代理行为的控制很难。 - ---- -## 特性 -- **设计时状态性**: 默认情况下管理对话历史记录。使用简单的标志 `remember` 和 `recall` 来调整是否保存或检索对话历史记录。 -- **支持用户和代理**: 允许创建不同的用户 <-> 代理交互,如 `一个代理 <-> 多个用户`;`多个代理 <-> 一个用户`等。[了解更多](https://docs.julep.ai/concepts/)。 -- **内置RAG**: 添加、删除和更新文档,为LLM提供关于用户或代理的上下文,具体取决于您的用例。[在此处阅读更多](https://docs.julep.ai/guides/build-a-retrieval-augmented-generation-rag-agent)。 -- **内置90+工具**: 使用[Composio](https://docs.composio.dev/framework/julep/)本地连接您的AI应用到90+第三方应用程序。`toolset.handle_tool_calls(julep_client, session.id, response)` 将为您调用和处理工具![查看示例](https://docs.julep.ai/guides/use-julep-with-composio) -- **本地优先**: Julep 可以使用 Docker Compose 部署到生产环境。对于 k8s 的支持即将推出! -- **动态切换LLM**: 更新代理以在OpenAI、Anthropic或Ollama之间切换LLM。同时保留状态。 -- **为代理分配任务**: 定义异步执行的代理工作流,一个或多个代理无需担心超时或幻觉增多。[正在进行中](https://github.com/julep-ai/julep/discussions/387) - -> (*) 即将推出! - ---- -## 指南 -您可以在 [指南文档](https://docs.julep.ai/guides/) 中查看 Julep 的不同功能。 -1. [简单的对话机器人](https://deepnote.com/app/julep-ai-761c/Julep-Mixers-4dfff09a-84f2-4278-baa3-d1a00b88ba26) -2. [搜索代理](https://docs.julep.ai/guides/) -3. [RAG 代理](https://docs.julep.ai/guides/build-a-retrieval-augmented-generation-rag-agent) -4. [使用 Composio 的 GitHub 代理](https://docs.julep.ai/guides/use-julep-with-composio) -5. [用于视觉的 GPT 4o](https://docs.julep.ai/guides/image-+-text-with-gpt-4o) - ---- - - -## 快速开始 -### 选项1:使用 Julep 云 -我们的托管平台处于测试版! - -获取访问权限: -- 前往 https://platform.julep.ai -- 生成并添加您的 `JULEP_API_KEY` 到 `.env` 文件中 - -### 选项2:在本地安装和运行 Julep -前往 [自托管](https://docs.julep.ai/guides/self-hosting) 文档了解如何在本地运行 Julep! - -### 安装 - -``` -pip install julep -``` - -### 设置 `client` - -```py -from julep import Client -from pprint import pprint -import textwrap -import os - -base_url = os.environ.get("JULEP_API_URL") -api_key = os.environ.get("JULEP_API_KEY") - -client = Client(api_key=api_key, base_url=base_url) -``` - -### 创建代理 -代理是 LLM 设置的对象,例如模型、温度以及工具。 - -```py -agent = client.agents.create( - name="Jessica", - model="gpt-4", - tools=[] # 在此处定义工具 -) -``` - -### 创建用户 -用户是应用程序的用户对象。 - -为每个用户形成和保存记忆,许多用户可以与一个代理交谈。 - -```py -user = client.users.create( - name="Anon", - about="每天花8小时在笔记本电脑上的普通技术宅/女孩", -) -``` - ---- - -### 创建会话 -一个 "用户" 和一个 "代理" 在一个 "会话" 中进行通信。系统提示在这里。 -会话历史记录和摘要存储在一个 "会话" 中,该会话保存了对话历史记录。 - -会话范式允许许多用户与一个代理进行交互,并允许对话历史记录和记忆的分离。 - -```py -situation_prompt = """你是 Jessica。你是一个自命不凡的加州少年。 你基本上抱怨一切。 你住在洛杉矶的贝尔埃尔,必要时你会去科蒂斯高中上学。 -""" -session = client.sessions.create( - user_id=user.id, agent_id=agent.id, situation=situation_prompt -) -``` - -### 开始有状态的对话 -`session.chat` 控制 "代理" 和 "用户" 之间的通信。 - -它有两个重要的参数; -- `recall`: 检索之前的对话和记忆。 -- `remember`: 将当前的对话转换为内存存储。 - -要保持会话有状态,两者都需要设置为 `True` - -```py -user_msg = "嗨,你觉得星巴克怎么样" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - "name": "Anon", - } - ], - recall=True, - remember=True, -) - -print("\n".join(textwrap.wrap(response.response[0][0].content, width=100))) -``` - ---- - -## API 和 SDK -要直接使用 API 或查看请求和响应格式、认证、可用端点等信息,请参阅 [API 文档](https://docs.julep.ai/api-reference/agents-api/agents-api)。 - -您也可以使用 [Postman 集合](https://god.gw.postman.com/run-collection/33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336%26entityType%3Dcollection%26workspaceId%3D183380b4-f2ac-44ef-b018-1f65dfc8256b) 进行参考。 - -### Python SDK - -要安装 Python SDK,请运行: - -```bash -pip install julep -``` - -有关使用 Python SDK 的更多信息,请参阅 [Python SDK 文档](https://docs.julep.ai/api-reference/python-sdk-docs)。 - - -### TypeScript SDK -要使用 `npm` 安装 TypeScript SDK,请运行: - -```bash -npm install @julep/sdk -``` - -有关使用 TypeScript SDK 的更多信息,请参阅 [TypeScript SDK 文档](https://docs.julep.ai/api-reference/js-sdk-docs)。 - ---- - -## 部署 -查看 [自托管指南](https://docs.julep.ai/agents/self-hosting) 以自行托管平台。 - -如果您想将 Julep 部署到生产环境中,请 [与我们通话](https://cal.com/ishitaj/15min)! - -我们将帮助您自定义平台并帮助您设置: -- 多租户 -- 反向代理以及认证和授权 -- 自托管 LLMs -- 等等 - ---- - -## 贡献 -我们欢迎社区的贡献,以帮助改进和扩展 Julep AI 平台。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 - ---- - -## 许可证 -Julep AI 使用 Apache 2.0 许可证发布。通过使用、贡献或分发 Julep AI 平台,您同意此许可证的条款和条件。 - ---- - -## 联系和支持 -如果您有任何问题,需要帮助,或想要联系 Julep AI 团队,请使用以下渠道: - -- [Discord](https://discord.com/invite/JTSBGRZrzj):加入我们的社区论坛,讨论想法,提出问题,并从其他 Julep AI 用户和开发团队中获取帮助。 -- GitHub Issues:对于技术问题、错误报告和功能请求,请在 Julep AI GitHub 存储库上开启一个 issue。 -- 电子邮件支持:如果您需要直接向我们的支持团队寻求帮助,请发送电子邮件至 hey@julep.ai,我们会尽快回复您。 -- 关注 [X](https://twitter.com/julep_ai) & [LinkedIn](https://www.linkedin.com/company/julep-ai/) -- [与我们通话](https://cal.com/ishitaj/15min):我们想了解您正在构建什么以及我们如何调整和优化 Julep 以帮助您构建下一个 AI 应用程序。 diff --git a/v0.3_README.md b/v0.3_README.md deleted file mode 100644 index 2f9b12e9e..000000000 --- a/v0.3_README.md +++ /dev/null @@ -1,228 +0,0 @@ - -English | [中文翻译](/v0.3_README-CN.md) - -
- julep -
- -

-Start your project with conversation history, support for any LLM, agentic workflows, integrations & more. -

- -

-
- Explore the docs » -
-
- Report Bug - · - Request Feature - · - Join Our Discord - · - X - · - LinkedIn - -

- - -

- NPM Version -   - PyPI - Version -   - Docker Image Version -   - GitHub License -

- ---- -## Why Julep? -We've built a lot of AI apps and understand how difficult it is to evaluate hundreds of tools, techniques, and models, and then make them work well together. - -**The Problems** -1. The barrier to making LLM apps with memory, knowledge & tools is too high. -2. Agentic behaviour is hard to control when done through multi-agent frameworks. - ---- -## Features -- **Statefulness By Design**: Manages conversation history by default. Use simple flags; `remember` & `recall` to tune whether to save or retrieve conversation history. -- **Support for Users & Agents**: Allows creating different user <-> agent interactions like `One Agent <-> Many Users`; `Many Agents <-> One User` etc. [Read more,](https://docs.julep.ai/concepts/). -- **Built-in RAG**: Add, delete & update documents to give the LLM context about the user or an agent depending on your use case. [Read more here.](https://docs.julep.ai/guides/build-a-retrieval-augmented-generation-rag-agent) -- **90+ tools built-in**: Connect your AI app to 90+ third-party applications using [Composio](https://docs.composio.dev/framework/julep/) natively. `toolset.handle_tool_calls(julep_client, session.id, response)` will call and handle your tools for you! [See example](https://docs.julep.ai/guides/use-julep-with-composio) -- **Local-first**: Julep comes ready to be deployed to production using Docker Compose. Support for k8s coming soon! -- **Switch LLMs on the fly**: Update the Agent to switch between LLMs from OpenAI, Anthropic or Ollama. All the while preserving state. -- ***Assign Tasks to Agents**: Define agentic workflows to be executed asynchronously with one ore more without worrying about timeouts or multiplying hallucinations. [Work in progress](https://github.com/julep-ai/julep/discussions/387) - -> (*) Coming soon! - ---- -## Guides -You can view the different features of Julep in action in the [guide docs](https://docs.julep.ai/guides/). -1. [Simple Conversational Bot](https://deepnote.com/app/julep-ai-761c/Julep-Mixers-4dfff09a-84f2-4278-baa3-d1a00b88ba26) -2. [Search Agent](https://docs.julep.ai/guides/) -3. [RAG Agent](https://docs.julep.ai/guides/build-a-retrieval-augmented-generation-rag-agent) -5. [GitHub Agent with Composio](https://docs.julep.ai/guides/use-julep-with-composio) -5. [GPT 4o for Vision](https://docs.julep.ai/guides/image-+-text-with-gpt-4o) ---- - -## Quickstart -### Option 1: Use the Julep Cloud -Our hosted platform is in Beta! - -To get access: -- Head over to https://platform.julep.ai -- Generate and add your `JULEP_API_KEY` in `.env` - -### Option 2: Install and run Julep locally -Head over to docs on [self-hosting](https://docs.julep.ai/guides/self-hosting) to see how to run Julep locally! -### Installation - -``` -pip install julep -``` -### Setting up the `client` - -```py -from julep import Client -from pprint import pprint -import textwrap -import os - -base_url = os.environ.get("JULEP_API_URL") -api_key = os.environ.get("JULEP_API_KEY") - -client = Client(api_key=api_key, base_url=base_url) -``` - -### Create an agent -Agent is the object to which LLM settings like model, temperature along with tools are scoped to. -```py -agent = client.agents.create( - name="Jessica" - model="gpt-4", - tools=[] # Tools defined here -) -``` - -### Create a user -User is the object which represents the user of the application. - -Memories are formed and saved for each user and many users can talk to one agent. -```py -user = client.users.create( - name="Anon", - about="Average nerdy techbro/girl spending 8 hours a day on a laptop, -) -``` - -### Create a session -A "user" and an "agent" communicate in a "session". System prompt goes here. -Conversation history and summary are stored in a "session" which saves the conversation history. - -The session paradigm allows for; many users to interact with one agent and allow separation of conversation history and memories. - -```py -situation_prompt = """You are Jessica. You're a stuck up Cali teenager. -You basically complain about everything. You live in Bel-Air, Los Angeles and drag yourself to Curtis High School when you must. -""" -session = client.sessions.create( - user_id=user.id, agent_id=agent.id, situation=situation_prompt -) -``` - -### Start a stateful conversation -`session.chat` controls the communication between the "agent" and the "user". - -It has two important arguments; -- `recall`: Retrieves the previous conversations and memories. -- `remember`: Saves the current conversation turn into the memory store. - -To keep the session stateful, both need to be `True` - -```py -user_msg = "hey. what do u think of starbucks" -response = client.sessions.chat( - session_id=session.id, - messages=[ - { - "role": "user", - "content": user_msg, - "name": "Anon", - } - ], - recall=True, - remember=True, -) - -print("\n".join(textwrap.wrap(response.response[0][0].content, width=100))) -``` ---- - -## API and SDKs -To use the API directly or to take a look at request & response formats, authentication, available endpoints and more, please refer to the [API Documentation](https://docs.julep.ai/api-reference/agents-api/agents-api) - -You can also use the [Postman Collection](https://god.gw.postman.com/run-collection/33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D33213061-a0a1e3a9-9681-44ae-a5c2-703912b32336%26entityType%3Dcollection%26workspaceId%3D183380b4-f2ac-44ef-b018-1f65dfc8256b) for reference. - -### Python SDK - -To install the Python SDK, run: - -```bash -pip install julep -``` -For more information on using the Python SDK, please refer to the [Python SDK documentation](https://docs.julep.ai/api-reference/python-sdk-docs). - - -### TypeScript SDK -To install the TypeScript SDK using `npm`, run: - -```bash -npm install @julep/sdk -``` - -For more information on using the TypeScript SDK, please refer to the [TypeScript SDK documentation](https://docs.julep.ai/api-reference/js-sdk-docs). - ---- - -## Deployment -Check out the [self-hosting guide](https://docs.julep.ai/agents/self-hosting) to host the platform yourself. - -If you want to deploy Julep to production, [let's hop on a call](https://cal.com/ishitaj/15min)! - -We'll help you customise the platform and help you get set up with: -- Multi-tenancy -- Reverse proxy along with authentication and authorisation -- Self-hosted LLMs -- & more - ---- -## Contributing -We welcome contributions from the community to help improve and expand the Julep AI platform. See [CONTRIBUTING.md](CONTRIBUTING.md) - ---- -## License -Julep AI is released under the Apache 2.0 License. By using, contributing to, or distributing the Julep AI platform, you agree to the terms and conditions of this license. - ---- -## Contact and Support -If you have any questions, need assistance, or want to get in touch with the Julep AI team, please use the following channels: - -- [Discord](https://discord.com/invite/JTSBGRZrzj): Join our community forum to discuss ideas, ask questions, and get help from other Julep AI users and the development team. -- GitHub Issues: For technical issues, bug reports, and feature requests, please open an issue on the Julep AI GitHub repository. -- Email Support: If you need direct assistance from our support team, send an email to hey@julep.ai, and we'll get back to you as soon as possible. -- Follow for updates on [X](https://twitter.com/julep_ai) & [LinkedIn](https://www.linkedin.com/company/julep-ai/) -- [Hop on a call](https://cal.com/ishitaj/15min): We wanna know what you're building and how we can tweak and tune Julep to help you build your next AI app.