diff --git a/.github/security.md b/.github/security.md index 5bc967228..4f5c32bfd 100644 --- a/.github/security.md +++ b/.github/security.md @@ -1,19 +1,27 @@ -CrewAI takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organization. -If you believe you have found a security vulnerability in any CrewAI product or service, please report it to us as described below. +## CrewAI Security Vulnerability Reporting Policy - ## Reporting a Vulnerability - Please do not report security vulnerabilities through public GitHub issues. - To report a vulnerability, please email us at security@crewai.com. - Please include the requested information listed below so that we can triage your report more quickly +CrewAI prioritizes the security of our software products, services, and GitHub repositories. To promptly address vulnerabilities, follow these steps for reporting security issues: - - Type of issue (e.g. SQL injection, cross-site scripting, etc.) - - Full paths of source file(s) related to the manifestation of the issue - - The location of the affected source code (tag/branch/commit or direct URL) - - Any special configuration required to reproduce the issue - - Step-by-step instructions to reproduce the issue (please include screenshots if needed) - - Proof-of-concept or exploit code (if possible) - - Impact of the issue, including how an attacker might exploit the issue +### Reporting Process +Do **not** report vulnerabilities via public GitHub issues. - Once we have received your report, we will respond to you at the email address you provide. If the issue is confirmed, we will release a patch as soon as possible depending on the complexity of the issue. +Email all vulnerability reports directly to: +**security@crewai.com** - At this time, we are not offering a bug bounty program. Any rewards will be at our discretion. \ No newline at end of file +### Required Information +To help us quickly validate and remediate the issue, your report must include: + +- **Vulnerability Type:** Clearly state the vulnerability type (e.g., SQL injection, XSS, privilege escalation). +- **Affected Source Code:** Provide full file paths and direct URLs (branch, tag, or commit). +- **Reproduction Steps:** Include detailed, step-by-step instructions. Screenshots are recommended. +- **Special Configuration:** Document any special settings or configurations required to reproduce. +- **Proof-of-Concept (PoC):** Provide exploit or PoC code (if available). +- **Impact Assessment:** Clearly explain the severity and potential exploitation scenarios. + +### Our Response +- We will acknowledge receipt of your report promptly via your provided email. +- Confirmed vulnerabilities will receive priority remediation based on severity. +- Patches will be released as swiftly as possible following verification. + +### Reward Notice +Currently, we do not offer a bug bounty program. Rewards, if issued, are discretionary. diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index f9853cf7c..3e1571830 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -5,12 +5,29 @@ on: [pull_request] jobs: lint: runs-on: ubuntu-latest + env: + TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 - - name: Install Requirements + - name: Fetch Target Branch + run: git fetch origin $TARGET_BRANCH --depth=1 + + - name: Install Ruff + run: pip install ruff + + - name: Get Changed Python Files + id: changed-files run: | - pip install ruff + merge_base=$(git merge-base origin/"$TARGET_BRANCH" HEAD) + changed_files=$(git diff --name-only --diff-filter=ACMRTUB "$merge_base" | grep '\.py$' || true) + echo "files<> $GITHUB_OUTPUT + echo "$changed_files" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT - - name: Run Ruff Linter - run: ruff check + - name: Run Ruff on Changed Files + if: ${{ steps.changed-files.outputs.files != '' }} + run: | + echo "${{ steps.changed-files.outputs.files }}" | tr " " "\n" | xargs -I{} ruff check "{}" diff --git a/.ruff.toml b/.ruff.toml index acc241bd4..4f8811cef 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -2,8 +2,3 @@ exclude = [ "templates", "__init__.py", ] - -[lint] -select = [ - "I", # isort rules -] diff --git a/README.md b/README.md index 4d563daee..57cb26e39 100644 --- a/README.md +++ b/README.md @@ -504,7 +504,7 @@ This example demonstrates how to: CrewAI supports using various LLMs through a variety of connection options. By default your agents will use the OpenAI API when querying the model. However, there are several other ways to allow your agents to connect to models. For example, you can configure your agents to use a local model via the Ollama tool. -Please refer to the [Connect CrewAI to LLMs](https://docs.crewai.com/how-to/LLM-Connections/) page for details on configuring you agents' connections to models. +Please refer to the [Connect CrewAI to LLMs](https://docs.crewai.com/how-to/LLM-Connections/) page for details on configuring your agents' connections to models. ## How CrewAI Compares diff --git a/docs/concepts/agents.mdx b/docs/concepts/agents.mdx index 4234e6428..fb992ba0a 100644 --- a/docs/concepts/agents.mdx +++ b/docs/concepts/agents.mdx @@ -21,7 +21,7 @@ Think of an agent as a specialized team member with specific skills, expertise, CrewAI Enterprise includes a Visual Agent Builder that simplifies agent creation and configuration without writing code. Design your agents visually and test them in real-time. -![Visual Agent Builder Screenshot](../images/enterprise/crew-studio-quickstart) +![Visual Agent Builder Screenshot](/images/enterprise/crew-studio-interface.png) The Visual Agent Builder enables: - Intuitive agent configuration with form-based interfaces diff --git a/docs/concepts/cli.mdx b/docs/concepts/cli.mdx index a275f6542..6ab37c5ef 100644 --- a/docs/concepts/cli.mdx +++ b/docs/concepts/cli.mdx @@ -4,7 +4,7 @@ description: Learn how to use the CrewAI CLI to interact with CrewAI. icon: terminal --- -# CrewAI CLI Documentation +## Overview The CrewAI CLI provides a set of commands to interact with CrewAI, allowing you to create, train, run, and manage crews & flows. @@ -110,6 +110,8 @@ crewai reset-memories [OPTIONS] - `-s, --short`: Reset SHORT TERM memory - `-e, --entities`: Reset ENTITIES memory - `-k, --kickoff-outputs`: Reset LATEST KICKOFF TASK OUTPUTS +- `-kn, --knowledge`: Reset KNOWLEDGE storage +- `-akn, --agent-knowledge`: Reset AGENT KNOWLEDGE storage - `-a, --all`: Reset ALL memories Example: diff --git a/docs/concepts/collaboration.mdx b/docs/concepts/collaboration.mdx index 63e59cb97..bfe87df04 100644 --- a/docs/concepts/collaboration.mdx +++ b/docs/concepts/collaboration.mdx @@ -4,7 +4,7 @@ description: Exploring the dynamics of agent collaboration within the CrewAI fra icon: screen-users --- -## Collaboration Fundamentals +## Overview Collaboration in CrewAI is fundamental, enabling agents to combine their skills, share information, and assist each other in task execution, embodying a truly cooperative ecosystem. diff --git a/docs/concepts/crews.mdx b/docs/concepts/crews.mdx index 76268457e..4e4c2eeff 100644 --- a/docs/concepts/crews.mdx +++ b/docs/concepts/crews.mdx @@ -4,7 +4,7 @@ description: Understanding and utilizing crews in the crewAI framework with comp icon: people-group --- -## What is a Crew? +## Overview A crew in crewAI represents a collaborative group of agents working together to achieve a set of tasks. Each crew defines the strategy for task execution, agent collaboration, and the overall workflow. @@ -27,7 +27,7 @@ A crew in crewAI represents a collaborative group of agents working together to | **Step Callback** _(optional)_ | `step_callback` | A function that is called after each step of every agent. This can be used to log the agent's actions or to perform other operations; it won't override the agent-specific `step_callback`. | | **Task Callback** _(optional)_ | `task_callback` | A function that is called after the completion of each task. Useful for monitoring or additional operations post-task execution. | | **Share Crew** _(optional)_ | `share_crew` | Whether you want to share the complete crew information and execution with the crewAI team to make the library better, and allow us to train models. | -| **Output Log File** _(optional)_ | `output_log_file` | Set to True to save logs as logs.txt in the current directory or provide a file path. Logs will be in JSON format if the filename ends in .json, otherwise .txt. Defautls to `None`. | +| **Output Log File** _(optional)_ | `output_log_file` | Set to True to save logs as logs.txt in the current directory or provide a file path. Logs will be in JSON format if the filename ends in .json, otherwise .txt. Defaults to `None`. | | **Manager Agent** _(optional)_ | `manager_agent` | `manager` sets a custom agent that will be used as a manager. | | **Prompt File** _(optional)_ | `prompt_file` | Path to the prompt JSON file to be used for the crew. | | **Planning** *(optional)* | `planning` | Adds planning ability to the Crew. When activated before each Crew iteration, all Crew data is sent to an AgentPlanner that will plan the tasks and this plan will be added to each task description. | @@ -117,6 +117,12 @@ class YourCrewName: ) ``` +How to run the above code: + +```python code +YourCrewName().crew().kickoff(inputs={"any": "input here"}) +``` + Tasks will be executed in the order they are defined. @@ -184,6 +190,11 @@ class YourCrewName: verbose=True ) ``` +How to run the above code: + +```python code +YourCrewName().crew().kickoff(inputs={}) +``` In this example: @@ -246,7 +257,7 @@ print(f"Token Usage: {crew_output.token_usage}") You can see real time log of the crew execution, by setting `output_log_file` as a `True(Boolean)` or a `file_name(str)`. Supports logging of events as both `file_name.txt` and `file_name.json`. In case of `True(Boolean)` will save as `logs.txt`. -In case of `output_log_file` is set as `False(Booelan)` or `None`, the logs will not be populated. +In case of `output_log_file` is set as `False(Boolean)` or `None`, the logs will not be populated. ```python Code # Save crew logs diff --git a/docs/concepts/event-listener.mdx b/docs/concepts/event-listener.mdx index 95726e23a..9e7d638e2 100644 --- a/docs/concepts/event-listener.mdx +++ b/docs/concepts/event-listener.mdx @@ -4,7 +4,7 @@ description: 'Tap into CrewAI events to build custom integrations and monitoring icon: spinner --- -# Event Listeners +## Overview CrewAI provides a powerful event system that allows you to listen for and react to various events that occur during the execution of your Crew. This feature enables you to build custom integrations, monitoring solutions, logging systems, or any other functionality that needs to be triggered based on CrewAI's internal events. @@ -21,7 +21,7 @@ When specific actions occur in CrewAI (like a Crew starting execution, an Agent CrewAI Enterprise provides a built-in Prompt Tracing feature that leverages the event system to track, store, and visualize all prompts, completions, and associated metadata. This provides powerful debugging capabilities and transparency into your agent operations. -![Prompt Tracing Dashboard](../images/enterprise/prompt-tracing.png) +![Prompt Tracing Dashboard](/images/enterprise/traces-overview.png) With Prompt Tracing you can: - View the complete history of all prompts sent to your LLM @@ -224,6 +224,15 @@ CrewAI provides a wide range of events that you can listen for: - **ToolExecutionErrorEvent**: Emitted when a tool execution encounters an error - **ToolSelectionErrorEvent**: Emitted when there's an error selecting a tool +### Knowledge Events + +- **KnowledgeRetrievalStartedEvent**: Emitted when a knowledge retrieval is started +- **KnowledgeRetrievalCompletedEvent**: Emitted when a knowledge retrieval is completed +- **KnowledgeQueryStartedEvent**: Emitted when a knowledge query is started +- **KnowledgeQueryCompletedEvent**: Emitted when a knowledge query is completed +- **KnowledgeQueryFailedEvent**: Emitted when a knowledge query fails +- **KnowledgeSearchQueryFailedEvent**: Emitted when a knowledge search query fails + ### Flow Events - **FlowCreatedEvent**: Emitted when a Flow is created diff --git a/docs/concepts/flows.mdx b/docs/concepts/flows.mdx index b7793c60c..9d868ca5e 100644 --- a/docs/concepts/flows.mdx +++ b/docs/concepts/flows.mdx @@ -4,7 +4,7 @@ description: Learn how to create and manage AI workflows using CrewAI Flows. icon: arrow-progress --- -## Introduction +## Overview CrewAI Flows is a powerful feature designed to streamline the creation and management of AI workflows. Flows allow developers to combine and coordinate coding tasks and Crews efficiently, providing a robust framework for building sophisticated AI automations. @@ -75,11 +75,12 @@ class ExampleFlow(Flow): flow = ExampleFlow() +flow.plot() result = flow.kickoff() print(f"Generated fun fact: {result}") ``` - +![Flow Visual image](/images/crewai-flow-1.png) In the above example, we have created a simple Flow that generates a random city using OpenAI and then generates a fun fact about that city. The Flow consists of two tasks: `generate_city` and `generate_fun_fact`. The `generate_city` task is the starting point of the Flow, and the `generate_fun_fact` task listens for the output of the `generate_city` task. Each Flow instance automatically receives a unique identifier (UUID) in its state, which helps track and manage flow executions. The state can also store additional data (like the generated city and fun fact) that persists throughout the flow's execution. @@ -146,6 +147,7 @@ class OutputExampleFlow(Flow): flow = OutputExampleFlow() +flow.plot("my_flow_plot") final_output = flow.kickoff() print("---- Final Output ----") @@ -158,9 +160,10 @@ Second method received: Output from first_method ``` +![Flow Visual image](/images/crewai-flow-2.png) In this example, the `second_method` is the last method to complete, so its output will be the final output of the Flow. -The `kickoff()` method will return the final output, which is then printed to the console. +The `kickoff()` method will return the final output, which is then printed to the console. The `plot()` method will generate the HTML file, which will help you understand the flow. #### Accessing and Updating State @@ -192,6 +195,7 @@ class StateExampleFlow(Flow[ExampleState]): return self.state.message flow = StateExampleFlow() +flow.plot("my_flow_plot") final_output = flow.kickoff() print(f"Final Output: {final_output}") print("Final State:") @@ -206,6 +210,8 @@ counter=2 message='Hello from first_method - updated by second_method' +![Flow Visual image](/images/crewai-flow-2.png) + In this example, the state is updated by both `first_method` and `second_method`. After the Flow has run, you can access the final state to see the updates made by these methods. @@ -249,9 +255,12 @@ class UnstructuredExampleFlow(Flow): flow = UnstructuredExampleFlow() +flow.plot("my_flow_plot") flow.kickoff() ``` +![Flow Visual image](/images/crewai-flow-3.png) + **Note:** The `id` field is automatically generated and preserved throughout the flow's execution. You don't need to manage or set it manually, and it will be maintained even when updating the state with new data. **Key Points:** @@ -302,6 +311,8 @@ flow = StructuredExampleFlow() flow.kickoff() ``` +![Flow Visual image](/images/crewai-flow-3.png) + **Key Points:** - **Defined Schema:** `ExampleState` clearly outlines the state structure, enhancing code readability and maintainability. @@ -436,6 +447,7 @@ class OrExampleFlow(Flow): flow = OrExampleFlow() +flow.plot("my_flow_plot") flow.kickoff() ``` @@ -446,6 +458,8 @@ Logger: Hello from the second method +![Flow Visual image](/images/crewai-flow-4.png) + When you run this Flow, the `logger` method will be triggered by the output of either the `start_method` or the `second_method`. The `or_` function is used to listen to multiple methods and trigger the listener method when any of the specified methods emit an output. @@ -474,6 +488,7 @@ class AndExampleFlow(Flow): print(self.state) flow = AndExampleFlow() +flow.plot() flow.kickoff() ``` @@ -484,6 +499,8 @@ flow.kickoff() +![Flow Visual image](/images/crewai-flow-5.png) + When you run this Flow, the `logger` method will be triggered only when both the `start_method` and the `second_method` emit an output. The `and_` function is used to listen to multiple methods and trigger the listener method only when all the specified methods emit an output. @@ -527,6 +544,7 @@ class RouterFlow(Flow[ExampleState]): flow = RouterFlow() +flow.plot("my_flow_plot") flow.kickoff() ``` @@ -538,6 +556,8 @@ Fourth method running +![Flow Visual image](/images/crewai-flow-6.png) + In the above example, the `start_method` generates a random boolean value and sets it in the state. The `second_method` uses the `@router()` decorator to define conditional routing logic based on the value of the boolean. If the boolean is `True`, the method returns `"success"`, and if it is `False`, the method returns `"failed"`. @@ -641,6 +661,7 @@ class MarketResearchFlow(Flow[MarketResearchState]): # Usage example async def run_flow(): flow = MarketResearchFlow() + flow.plot("MarketResearchFlowPlot") result = await flow.kickoff_async(inputs={"product": "AI-powered chatbots"}) return result @@ -650,6 +671,8 @@ if __name__ == "__main__": asyncio.run(run_flow()) ``` +![Flow Visual image](/images/crewai-flow-7.png) + This example demonstrates several key features of using Agents in flows: 1. **Structured Output**: Using Pydantic models to define the expected output format (`MarketAnalysis`) ensures type safety and structured data throughout the flow. @@ -746,13 +769,16 @@ def kickoff(): def plot(): poem_flow = PoemFlow() - poem_flow.plot() + poem_flow.plot("PoemFlowPlot") if __name__ == "__main__": kickoff() + plot() ``` -In this example, the `PoemFlow` class defines a flow that generates a sentence count, uses the `PoemCrew` to generate a poem, and then saves the poem to a file. The flow is kicked off by calling the `kickoff()` method. +In this example, the `PoemFlow` class defines a flow that generates a sentence count, uses the `PoemCrew` to generate a poem, and then saves the poem to a file. The flow is kicked off by calling the `kickoff()` method. The PoemFlowPlot will be generated by `plot()` method. + +![Flow Visual image](/images/crewai-flow-8.png) ### Running the Flow diff --git a/docs/concepts/knowledge.mdx b/docs/concepts/knowledge.mdx index 9d1d0beab..774847abc 100644 --- a/docs/concepts/knowledge.mdx +++ b/docs/concepts/knowledge.mdx @@ -4,7 +4,7 @@ description: What is knowledge in CrewAI and how to use it. icon: book --- -## What is Knowledge? +## Overview Knowledge in CrewAI is a powerful system that allows AI agents to access and utilize external information sources during their tasks. Think of it as giving your agents a reference library they can consult while working. @@ -36,12 +36,15 @@ CrewAI supports various types of knowledge sources out of the box: ## Supported Knowledge Parameters -| Parameter | Type | Required | Description | -| :--------------------------- | :---------------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sources` | **List[BaseKnowledgeSource]** | Yes | List of knowledge sources that provide content to be stored and queried. Can include PDF, CSV, Excel, JSON, text files, or string content. | -| `collection_name` | **str** | No | Name of the collection where the knowledge will be stored. Used to identify different sets of knowledge. Defaults to "knowledge" if not provided. | -| `storage` | **Optional[KnowledgeStorage]** | No | Custom storage configuration for managing how the knowledge is stored and retrieved. If not provided, a default storage will be created. | - + + List of knowledge sources that provide content to be stored and queried. Can include PDF, CSV, Excel, JSON, text files, or string content. + + + Name of the collection where the knowledge will be stored. Used to identify different sets of knowledge. Defaults to \"knowledge\" if not provided. + + +Custom storage configuration for managing how the knowledge is stored and retrieved. If not provided, a default storage will be created. + Unlike retrieval from a vector database using a tool, agents preloaded with knowledge will not need a retrieval persona or task. @@ -397,6 +400,93 @@ result = crew.kickoff(inputs={"question": "What city does John live in and how o John is 30 years old and lives in San Francisco. ``` + +## Query Rewriting + +CrewAI implements an intelligent query rewriting mechanism to optimize knowledge retrieval. When an agent needs to search through knowledge sources, the raw task prompt is automatically transformed into a more effective search query. + +### How Query Rewriting Works + +1. When an agent executes a task with knowledge sources available, the `_get_knowledge_search_query` method is triggered +2. The agent's LLM is used to transform the original task prompt into an optimized search query +3. This optimized query is then used to retrieve relevant information from knowledge sources + +### Benefits of Query Rewriting + + + + By focusing on key concepts and removing irrelevant content, query rewriting helps retrieve more relevant information. + + + The rewritten queries are designed to be more specific and context-aware for vector database retrieval. + + + +### Implementation Details + +Query rewriting happens transparently using a system prompt that instructs the LLM to: + +- Focus on key words of the intended task +- Make the query more specific and context-aware +- Remove irrelevant content like output format instructions +- Generate only the rewritten query without preamble or postamble + + + This mechanism is fully automatic and requires no configuration from users. The agent's LLM is used to perform the query rewriting, so using a more capable LLM can improve the quality of rewritten queries. + + +## Knowledge Events + +CrewAI emits events during the knowledge retrieval process that you can listen for using the event system. These events allow you to monitor, debug, and analyze how knowledge is being retrieved and used by your agents. + +### Available Knowledge Events + +- **KnowledgeRetrievalStartedEvent**: Emitted when an agent starts retrieving knowledge from sources +- **KnowledgeRetrievalCompletedEvent**: Emitted when knowledge retrieval is completed, including the query used and the retrieved content +- **KnowledgeQueryStartedEvent**: Emitted when a query to knowledge sources begins +- **KnowledgeQueryCompletedEvent**: Emitted when a query completes successfully +- **KnowledgeQueryFailedEvent**: Emitted when a query to knowledge sources fails +- **KnowledgeSearchQueryFailedEvent**: Emitted when a search query fails + +### Example: Monitoring Knowledge Retrieval + +```python +from crewai.utilities.events import ( + KnowledgeRetrievalStartedEvent, + KnowledgeRetrievalCompletedEvent, +) +from crewai.utilities.events.base_event_listener import BaseEventListener + +class KnowledgeMonitorListener(BaseEventListener): + def setup_listeners(self, crewai_event_bus): + @crewai_event_bus.on(KnowledgeRetrievalStartedEvent) + def on_knowledge_retrieval_started(source, event): + print(f"Agent '{event.agent.role}' started retrieving knowledge") + + @crewai_event_bus.on(KnowledgeRetrievalCompletedEvent) + def on_knowledge_retrieval_completed(source, event): + print(f"Agent '{event.agent.role}' completed knowledge retrieval") + print(f"Query: {event.query}") + print(f"Retrieved {len(event.retrieved_knowledge)} knowledge chunks") + +# Create an instance of your listener +knowledge_monitor = KnowledgeMonitorListener() +``` + +For more information on using events, see the [Event Listeners](https://docs.crewai.com/concepts/event-listener) documentation. + +### Example + +```python +# Original task prompt +task_prompt = "Answer the following questions about the user's favorite movies: What movie did John watch last week? Format your answer in JSON." + +# Behind the scenes, this might be rewritten as: +rewritten_query = "What movies did John watch last week?" +``` + +The rewritten query is more focused on the core information need and removes irrelevant instructions about output formatting. + ## Clearing Knowledge If you need to clear the knowledge stored in CrewAI, you can use the `crewai reset-memories` command with the `--knowledge` option. @@ -450,6 +540,13 @@ crew = Crew( result = crew.kickoff( inputs={"question": "What is the storage capacity of the XPS 13?"} ) + +# Resetting the agent specific knowledge via crew object +crew.reset_memories(command_type = 'agent_knowledge') + +# Resetting the agent specific knowledge via CLI +crewai reset-memories --agent-knowledge +crewai reset-memories -akn ``` @@ -653,4 +750,11 @@ recent_news = SpaceNewsKnowledgeSource( - Configure appropriate embedding models - Consider using local embedding providers for faster processing + + + - With the typical file structure provided by CrewAI, knowledge sources are embedded every time the kickoff is triggered. + - If the knowledge sources are large, this leads to inefficiency and increased latency, as the same data is embedded each time. + - To resolve this, directly initialize the knowledge parameter instead of the knowledge_sources parameter. + - Link to the issue to get complete idea [Github Issue](https://github.com/crewAIInc/crewAI/issues/2755) + diff --git a/docs/concepts/llms.mdx b/docs/concepts/llms.mdx index 560448f21..7802c4964 100644 --- a/docs/concepts/llms.mdx +++ b/docs/concepts/llms.mdx @@ -4,9 +4,10 @@ description: 'A comprehensive guide to configuring and using Large Language Mode icon: 'microchip-ai' --- - - CrewAI integrates with multiple LLM providers through LiteLLM, giving you the flexibility to choose the right model for your specific use case. This guide will help you understand how to configure and use different LLM providers in your CrewAI projects. - +## Overview + +CrewAI integrates with multiple LLM providers through LiteLLM, giving you the flexibility to choose the right model for your specific use case. This guide will help you understand how to configure and use different LLM providers in your CrewAI projects. + ## What are LLMs? @@ -27,23 +28,19 @@ Large Language Models (LLMs) are the core intelligence behind CrewAI agents. The -## Setting Up Your LLM +## Setting up your LLM -There are three ways to configure LLMs in CrewAI. Choose the method that best fits your workflow: +There are different places in CrewAI code where you can specify the model to use. Once you specify the model you are using, you will need to provide the configuration (like an API key) for each of the model providers you use. See the [provider configuration examples](#provider-configuration-examples) section for your provider. - The simplest way to get started. Set these variables in your environment: + The simplest way to get started. Set the model in your environment directly, through an `.env` file or in your app code. If you used `crewai create` to bootstrap your project, it will be set already. - ```bash - # Required: Your API key for authentication - OPENAI_API_KEY= + ```bash .env + MODEL=model-id # e.g. gpt-4o, gemini-2.0-flash, claude-3-sonnet-... - # Optional: Default model selection - OPENAI_MODEL_NAME=gpt-4o-mini # Default if not set - - # Optional: Organization ID (if applicable) - OPENAI_ORGANIZATION_ID= + # Be sure to set your API keys here too. See the Provider + # section below. ``` @@ -53,13 +50,13 @@ There are three ways to configure LLMs in CrewAI. Choose the method that best fi Create a YAML file to define your agent configurations. This method is great for version control and team collaboration: - ```yaml + ```yaml agents.yaml {6} researcher: role: Research Specialist goal: Conduct comprehensive research and analysis backstory: A dedicated research professional with years of experience verbose: true - llm: openai/gpt-4o-mini # your model here + llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude... # (see provider configuration examples below for more) ``` @@ -74,23 +71,23 @@ There are three ways to configure LLMs in CrewAI. Choose the method that best fi For maximum flexibility, configure LLMs directly in your Python code: - ```python + ```python {4,8} from crewai import LLM # Basic configuration - llm = LLM(model="gpt-4") + llm = LLM(model="model-id-here") # gpt-4o, gemini-2.0-flash, anthropic/claude... # Advanced configuration with detailed parameters llm = LLM( - model="gpt-4o-mini", + model="model-id-here", # gpt-4o, gemini-2.0-flash, anthropic/claude... temperature=0.7, # Higher for more creative outputs - timeout=120, # Seconds to wait for response - max_tokens=4000, # Maximum length of response - top_p=0.9, # Nucleus sampling parameter - frequency_penalty=0.1, # Reduce repetition - presence_penalty=0.1, # Encourage topic diversity + timeout=120, # Seconds to wait for response + max_tokens=4000, # Maximum length of response + top_p=0.9, # Nucleus sampling parameter + frequency_penalty=0.1 , # Reduce repetition + presence_penalty=0.1, # Encourage topic diversity response_format={"type": "json"}, # For structured outputs - seed=42 # For reproducible results + seed=42 # For reproducible results ) ``` @@ -110,7 +107,6 @@ There are three ways to configure LLMs in CrewAI. Choose the method that best fi ## Provider Configuration Examples - CrewAI supports a multitude of LLM providers, each offering unique features, authentication methods, and model capabilities. In this section, you'll find detailed examples that help you select, configure, and optimize the LLM that best fits your project's needs. @@ -174,19 +170,55 @@ In this section, you'll find detailed examples that help you select, configure, ``` - - Set the following environment variables in your `.env` file: + + Set your API key in your `.env` file. If you need a key, or need to find an + existing key, check [AI Studio](https://aistudio.google.com/apikey). - ```toml Code - # Option 1: Gemini accessed with an API key. + ```toml .env # https://ai.google.dev/gemini-api/docs/api-key GEMINI_API_KEY= - - # Option 2: Vertex AI IAM credentials for Gemini, Anthropic, and Model Garden. - # https://cloud.google.com/vertex-ai/generative-ai/docs/overview ``` - Get credentials from your Google Cloud Console and save it to a JSON file with the following code: + Example usage in your CrewAI project: + ```python Code + from crewai import LLM + + llm = LLM( + model="gemini/gemini-2.0-flash", + temperature=0.7, + ) + ``` + + ### Gemini models + + Google offers a range of powerful models optimized for different use cases. + + | Model | Context Window | Best For | + |--------------------------------|----------------|-------------------------------------------------------------------| + | gemini-2.5-flash-preview-04-17 | 1M tokens | Adaptive thinking, cost efficiency | + | gemini-2.5-pro-preview-05-06 | 1M tokens | Enhanced thinking and reasoning, multimodal understanding, advanced coding, and more | + | gemini-2.0-flash | 1M tokens | Next generation features, speed, thinking, and realtime streaming | + | gemini-2.0-flash-lite | 1M tokens | Cost efficiency and low latency | + | gemini-1.5-flash | 1M tokens | Balanced multimodal model, good for most tasks | + | gemini-1.5-flash-8B | 1M tokens | Fastest, most cost-efficient, good for high-frequency tasks | + | gemini-1.5-pro | 2M tokens | Best performing, wide variety of reasoning tasks including logical reasoning, coding, and creative collaboration | + + The full list of models is available in the [Gemini model docs](https://ai.google.dev/gemini-api/docs/models). + + ### Gemma + + The Gemini API also allows you to use your API key to access [Gemma models](https://ai.google.dev/gemma/docs) hosted on Google infrastructure. + + | Model | Context Window | + |----------------|----------------| + | gemma-3-1b-it | 32k tokens | + | gemma-3-4b-it | 32k tokens | + | gemma-3-12b-it | 32k tokens | + | gemma-3-27b-it | 128k tokens | + + + + Get credentials from your Google Cloud Console and save it to a JSON file, then load it with the following code: ```python Code import json @@ -210,14 +242,18 @@ In this section, you'll find detailed examples that help you select, configure, vertex_credentials=vertex_credentials_json ) ``` + Google offers a range of powerful models optimized for different use cases: - | Model | Context Window | Best For | - |-----------------------|----------------|------------------------------------------------------------------| - | gemini-2.0-flash-exp | 1M tokens | Higher quality at faster speed, multimodal model, good for most tasks | - | gemini-1.5-flash | 1M tokens | Balanced multimodal model, good for most tasks | - | gemini-1.5-flash-8B | 1M tokens | Fastest, most cost-efficient, good for high-frequency tasks | - | gemini-1.5-pro | 2M tokens | Best performing, wide variety of reasoning tasks including logical reasoning, coding, and creative collaboration | + | Model | Context Window | Best For | + |--------------------------------|----------------|-------------------------------------------------------------------| + | gemini-2.5-flash-preview-04-17 | 1M tokens | Adaptive thinking, cost efficiency | + | gemini-2.5-pro-preview-05-06 | 1M tokens | Enhanced thinking and reasoning, multimodal understanding, advanced coding, and more | + | gemini-2.0-flash | 1M tokens | Next generation features, speed, thinking, and realtime streaming | + | gemini-2.0-flash-lite | 1M tokens | Cost efficiency and low latency | + | gemini-1.5-flash | 1M tokens | Balanced multimodal model, good for most tasks | + | gemini-1.5-flash-8B | 1M tokens | Fastest, most cost-efficient, good for high-frequency tasks | + | gemini-1.5-pro | 2M tokens | Best performing, wide variety of reasoning tasks including logical reasoning, coding, and creative collaboration | @@ -383,7 +419,7 @@ In this section, you'll find detailed examples that help you select, configure, | microsoft/phi-3-medium-4k-instruct | 4,096 tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. | | microsoft/phi-3-medium-128k-instruct | 128K tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. | | microsoft/phi-3.5-mini-instruct | 128K tokens | Lightweight multilingual LLM powering AI applications in latency bound, memory/compute constrained environments | - | microsoft/phi-3.5-moe-instruct | 128K tokens | Advanced LLM based on Mixture of Experts architecure to deliver compute efficient content generation | + | microsoft/phi-3.5-moe-instruct | 128K tokens | Advanced LLM based on Mixture of Experts architecture to deliver compute efficient content generation | | microsoft/kosmos-2 | 1,024 tokens | Groundbreaking multimodal model designed to understand and reason about visual elements in images. | | microsoft/phi-3-vision-128k-instruct | 128k tokens | Cutting-edge open multimodal model exceling in high-quality reasoning from images. | | microsoft/phi-3.5-vision-instruct | 128k tokens | Cutting-edge open multimodal model exceling in high-quality reasoning from images. | @@ -407,19 +443,19 @@ In this section, you'll find detailed examples that help you select, configure, - - NVIDIA NIM enables you to run powerful LLMs locally on your Windows machine using WSL2 (Windows Subsystem for Linux). - This approach allows you to leverage your NVIDIA GPU for private, secure, and cost-effective AI inference without relying on cloud services. + + NVIDIA NIM enables you to run powerful LLMs locally on your Windows machine using WSL2 (Windows Subsystem for Linux). + This approach allows you to leverage your NVIDIA GPU for private, secure, and cost-effective AI inference without relying on cloud services. Perfect for development, testing, or production scenarios where data privacy or offline capabilities are required. - + Here is a step-by-step guide to setting up a local NVIDIA NIM model: - + 1. Follow installation instructions from [NVIDIA Website](https://docs.nvidia.com/nim/wsl2/latest/getting-started.html) 2. Install the local model. For Llama 3.1-8b follow [instructions](https://build.nvidia.com/meta/llama-3_1-8b-instruct/deploy) 3. Configure your crewai local models: - + ```python Code from crewai.llm import LLM @@ -441,7 +477,7 @@ In this section, you'll find detailed examples that help you select, configure, config=self.agents_config['researcher'], # type: ignore[index] llm=local_nvidia_nim_llm ) - + # ... ``` @@ -637,23 +673,29 @@ CrewAI supports streaming responses from LLMs, allowing your application to rece When streaming is enabled, responses are delivered in chunks as they're generated, creating a more responsive user experience. - + CrewAI emits events for each chunk received during streaming: - + ```python - from crewai import LLM - from crewai.utilities.events import EventHandler, LLMStreamChunkEvent - - class MyEventHandler(EventHandler): - def on_llm_stream_chunk(self, event: LLMStreamChunkEvent): - # Process each chunk as it arrives - print(f"Received chunk: {event.chunk}") - - # Register the event handler - from crewai.utilities.events import crewai_event_bus - crewai_event_bus.register_handler(MyEventHandler()) + from crewai.utilities.events import ( + LLMStreamChunkEvent + ) + from crewai.utilities.events.base_event_listener import BaseEventListener + + class MyCustomListener(BaseEventListener): + def setup_listeners(self, crewai_event_bus): + @crewai_event_bus.on(LLMStreamChunkEvent) + def on_llm_stream_chunk(self, event: LLMStreamChunkEvent): + # Process each chunk as it arrives + print(f"Received chunk: {event.chunk}") + + my_listener = MyCustomListener() ``` + + + [Click here](https://docs.crewai.com/concepts/event-listener#event-listeners) for more details + @@ -750,6 +792,24 @@ Learn how to get the most out of your LLM configuration: Remember to regularly monitor your token usage and adjust your configuration as needed to optimize costs and performance. + + + CrewAI internally uses Litellm for LLM calls, which allows you to drop additional parameters that are not needed for your specific use case. This can help simplify your code and reduce the complexity of your LLM configuration. + For example, if you don't need to send the stop parameter, you can simply omit it from your LLM call: + + ```python + from crewai import LLM + import os + + os.environ["OPENAI_API_KEY"] = "" + + o3_llm = LLM( + model="o3", + drop_params=True, + additional_drop_params=["stop"] + ) + ``` + ## Common Issues and Solutions @@ -785,7 +845,7 @@ Learn how to get the most out of your LLM configuration: Use larger context models for extensive tasks - + ```python # Large context model llm = LLM(model="openai/gpt-4o") # 128K tokens diff --git a/docs/concepts/memory.mdx b/docs/concepts/memory.mdx index c375d4898..df9e34ac9 100644 --- a/docs/concepts/memory.mdx +++ b/docs/concepts/memory.mdx @@ -4,7 +4,7 @@ description: Leveraging memory systems in the CrewAI framework to enhance agent icon: database --- -## Introduction to Memory Systems in CrewAI +## Overview The crewAI framework introduces a sophisticated memory system designed to significantly enhance the capabilities of AI agents. This system comprises `short-term memory`, `long-term memory`, `entity memory`, and `contextual memory`, each serving a unique purpose in aiding agents to remember, @@ -679,6 +679,7 @@ crewai reset-memories [OPTIONS] | `-e`, `--entities` | Reset ENTITIES memory. | Flag (boolean) | False | | `-k`, `--kickoff-outputs` | Reset LATEST KICKOFF TASK OUTPUTS. | Flag (boolean) | False | | `-kn`, `--knowledge` | Reset KNOWLEDEGE storage | Flag (boolean) | False | +| `-akn`, `--agent-knowledge` | Reset AGENT KNOWLEDGE storage | Flag (boolean) | False | | `-a`, `--all` | Reset ALL memories. | Flag (boolean) | False | Note: To use the cli command you need to have your crew in a file called crew.py in the same directory. @@ -716,9 +717,11 @@ my_crew.reset_memories(command_type = 'all') # Resets all the memory | `entities` | Reset ENTITIES memory. | | `kickoff_outputs` | Reset LATEST KICKOFF TASK OUTPUTS. | | `knowledge` | Reset KNOWLEDGE memory. | +| `agent_knowledge` | Reset AGENT KNOWLEDGE memory. | | `all` | Reset ALL memories. | + ## Benefits of Using CrewAI's Memory System - 🦾 **Adaptive Learning:** Crews become more efficient over time, adapting to new information and refining their approach to tasks. diff --git a/docs/concepts/planning.mdx b/docs/concepts/planning.mdx index c92d64ebe..6161a6dbb 100644 --- a/docs/concepts/planning.mdx +++ b/docs/concepts/planning.mdx @@ -1,10 +1,10 @@ --- title: Planning description: Learn how to add planning to your CrewAI Crew and improve their performance. -icon: brain +icon: ruler-combined --- -## Introduction +## Overview The planning feature in CrewAI allows you to add planning capability to your crew. When enabled, before each Crew iteration, all Crew information is sent to an AgentPlanner that will plan the tasks step by step, and this plan will be added to each task description. diff --git a/docs/concepts/processes.mdx b/docs/concepts/processes.mdx index ee3ed72b2..6daa67a0f 100644 --- a/docs/concepts/processes.mdx +++ b/docs/concepts/processes.mdx @@ -4,7 +4,8 @@ description: Detailed guide on workflow management through processes in CrewAI, icon: bars-staggered --- -## Understanding Processes +## Overview + Processes orchestrate the execution of tasks by agents, akin to project management in human teams. These processes ensure tasks are distributed and executed efficiently, in alignment with a predefined strategy. diff --git a/docs/concepts/reasoning.mdx b/docs/concepts/reasoning.mdx new file mode 100644 index 000000000..c6890f71c --- /dev/null +++ b/docs/concepts/reasoning.mdx @@ -0,0 +1,147 @@ +--- +title: Reasoning +description: "Learn how to enable and use agent reasoning to improve task execution." +icon: brain +--- + +## Overview + +Agent reasoning is a feature that allows agents to reflect on a task and create a plan before execution. This helps agents approach tasks more methodically and ensures they're ready to perform the assigned work. + +## Usage + +To enable reasoning for an agent, simply set `reasoning=True` when creating the agent: + +```python +from crewai import Agent + +agent = Agent( + role="Data Analyst", + goal="Analyze complex datasets and provide insights", + backstory="You are an experienced data analyst with expertise in finding patterns in complex data.", + reasoning=True, # Enable reasoning + max_reasoning_attempts=3 # Optional: Set a maximum number of reasoning attempts +) +``` + +## How It Works + +When reasoning is enabled, before executing a task, the agent will: + +1. Reflect on the task and create a detailed plan +2. Evaluate whether it's ready to execute the task +3. Refine the plan as necessary until it's ready or max_reasoning_attempts is reached +4. Inject the reasoning plan into the task description before execution + +This process helps the agent break down complex tasks into manageable steps and identify potential challenges before starting. + +## Configuration Options + + + Enable or disable reasoning + + + + Maximum number of attempts to refine the plan before proceeding with execution. If None (default), the agent will continue refining until it's ready. + + +## Example + +Here's a complete example: + +```python +from crewai import Agent, Task, Crew + +# Create an agent with reasoning enabled +analyst = Agent( + role="Data Analyst", + goal="Analyze data and provide insights", + backstory="You are an expert data analyst.", + reasoning=True, + max_reasoning_attempts=3 # Optional: Set a limit on reasoning attempts +) + +# Create a task +analysis_task = Task( + description="Analyze the provided sales data and identify key trends.", + expected_output="A report highlighting the top 3 sales trends.", + agent=analyst +) + +# Create a crew and run the task +crew = Crew(agents=[analyst], tasks=[analysis_task]) +result = crew.kickoff() + +print(result) +``` + +## Error Handling + +The reasoning process is designed to be robust, with error handling built in. If an error occurs during reasoning, the agent will proceed with executing the task without the reasoning plan. This ensures that tasks can still be executed even if the reasoning process fails. + +Here's how to handle potential errors in your code: + +```python +from crewai import Agent, Task +import logging + +# Set up logging to capture any reasoning errors +logging.basicConfig(level=logging.INFO) + +# Create an agent with reasoning enabled +agent = Agent( + role="Data Analyst", + goal="Analyze data and provide insights", + reasoning=True, + max_reasoning_attempts=3 +) + +# Create a task +task = Task( + description="Analyze the provided sales data and identify key trends.", + expected_output="A report highlighting the top 3 sales trends.", + agent=agent +) + +# Execute the task +# If an error occurs during reasoning, it will be logged and execution will continue +result = agent.execute_task(task) +``` + +## Example Reasoning Output + +Here's an example of what a reasoning plan might look like for a data analysis task: + +``` +Task: Analyze the provided sales data and identify key trends. + +Reasoning Plan: +I'll analyze the sales data to identify the top 3 trends. + +1. Understanding of the task: + I need to analyze sales data to identify key trends that would be valuable for business decision-making. + +2. Key steps I'll take: + - First, I'll examine the data structure to understand what fields are available + - Then I'll perform exploratory data analysis to identify patterns + - Next, I'll analyze sales by time periods to identify temporal trends + - I'll also analyze sales by product categories and customer segments + - Finally, I'll identify the top 3 most significant trends + +3. Approach to challenges: + - If the data has missing values, I'll decide whether to fill or filter them + - If the data has outliers, I'll investigate whether they're valid data points or errors + - If trends aren't immediately obvious, I'll apply statistical methods to uncover patterns + +4. Use of available tools: + - I'll use data analysis tools to explore and visualize the data + - I'll use statistical tools to identify significant patterns + - I'll use knowledge retrieval to access relevant information about sales analysis + +5. Expected outcome: + A concise report highlighting the top 3 sales trends with supporting evidence from the data. + +READY: I am ready to execute the task. +``` + +This reasoning plan helps the agent organize its approach to the task, consider potential challenges, and ensure it delivers the expected output. diff --git a/docs/concepts/tasks.mdx b/docs/concepts/tasks.mdx index b88d52a92..89e290b30 100644 --- a/docs/concepts/tasks.mdx +++ b/docs/concepts/tasks.mdx @@ -4,7 +4,7 @@ description: Detailed guide on managing and creating tasks within the CrewAI fra icon: list-check --- -## Overview of a Task +## Overview In the CrewAI framework, a `Task` is a specific assignment completed by an `Agent`. @@ -15,7 +15,7 @@ Tasks within CrewAI can be collaborative, requiring multiple agents to work toge CrewAI Enterprise includes a Visual Task Builder in Crew Studio that simplifies complex task creation and chaining. Design your task flows visually and test them in real-time without writing code. -![Task Builder Screenshot](../images/enterprise/crew-studio-quickstart.png) +![Task Builder Screenshot](/images/enterprise/crew-studio-interface.png) The Visual Task Builder enables: - Drag-and-drop task creation diff --git a/docs/concepts/testing.mdx b/docs/concepts/testing.mdx index ec6edda02..61d08e0e9 100644 --- a/docs/concepts/testing.mdx +++ b/docs/concepts/testing.mdx @@ -4,7 +4,7 @@ description: Learn how to test your CrewAI Crew and evaluate their performance. icon: vial --- -## Introduction +## Overview Testing is a crucial part of the development process, and it is essential to ensure that your crew is performing as expected. With crewAI, you can easily test your crew and evaluate its performance using the built-in testing capabilities. diff --git a/docs/concepts/tools.mdx b/docs/concepts/tools.mdx index d5f9d9cfc..1f04836ad 100644 --- a/docs/concepts/tools.mdx +++ b/docs/concepts/tools.mdx @@ -4,7 +4,7 @@ description: Understanding and leveraging tools within the CrewAI framework for icon: screwdriver-wrench --- -## Introduction +## Overview CrewAI tools empower agents with capabilities ranging from web searching and data analysis to collaboration and delegating tasks among coworkers. This documentation outlines how to create, integrate, and leverage these tools within the CrewAI framework, including a new focus on collaboration tools. @@ -18,8 +18,6 @@ enabling everything from simple searches to complex interactions and effective t CrewAI Enterprise provides a comprehensive Tools Repository with pre-built integrations for common business systems and APIs. Deploy agents with enterprise tools in minutes instead of days. -![Tools Repository Screenshot](../images/enterprise/tools-repository.png) - The Enterprise Tools Repository includes: - Pre-built connectors for popular enterprise systems - Custom tool creation interface diff --git a/docs/concepts/training.mdx b/docs/concepts/training.mdx index 549763fde..2784c87db 100644 --- a/docs/concepts/training.mdx +++ b/docs/concepts/training.mdx @@ -4,7 +4,7 @@ description: Learn how to train your CrewAI agents by giving them feedback early icon: dumbbell --- -## Introduction +## Overview The training feature in CrewAI allows you to train your AI agents using the command-line interface (CLI). By running the command `crewai train -n `, you can specify the number of iterations for the training process. diff --git a/docs/docs.json b/docs/docs.json index ce5498a0f..c669739dd 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -74,6 +74,7 @@ "concepts/collaboration", "concepts/training", "concepts/memory", + "concepts/reasoning", "concepts/planning", "concepts/testing", "concepts/cli", @@ -129,6 +130,7 @@ "tools/seleniumscrapingtool", "tools/snowflakesearchtool", "tools/spidertool", + "tools/stagehandtool", "tools/txtsearchtool", "tools/visiontool", "tools/weaviatevectorsearchtool", @@ -138,6 +140,12 @@ "tools/youtubevideosearchtool" ] }, + { + "group": "MCP Integration", + "pages": [ + "mcp/crewai-mcp-integration" + ] + }, { "group": "Agent Monitoring & Observability", "pages": [ diff --git a/docs/enterprise/introduction.mdx b/docs/enterprise/introduction.mdx index 3d6e85214..c76410a83 100644 --- a/docs/enterprise/introduction.mdx +++ b/docs/enterprise/introduction.mdx @@ -64,14 +64,14 @@ CrewAI Enterprise extends the power of the open-source framework with features d Sign Up - - Use code or Crew Studio to create your crew + + Use code or Crew Studio to build your crew - Create Crew + Build Crew diff --git a/docs/guides/advanced/customizing-prompts.mdx b/docs/guides/advanced/customizing-prompts.mdx index 4458184fc..fb7c3c02a 100644 --- a/docs/guides/advanced/customizing-prompts.mdx +++ b/docs/guides/advanced/customizing-prompts.mdx @@ -4,8 +4,6 @@ description: Dive deeper into low-level prompt customization for CrewAI, enablin icon: message-pen --- -# Customizing Prompts at a Low Level - ## Why Customize Prompts? Although CrewAI's default prompts work well for many scenarios, low-level customization opens the door to significantly more flexible and powerful agent behavior. Here’s why you might want to take advantage of this deeper control: diff --git a/docs/guides/advanced/fingerprinting.mdx b/docs/guides/advanced/fingerprinting.mdx index 4de78423a..2d5267f74 100644 --- a/docs/guides/advanced/fingerprinting.mdx +++ b/docs/guides/advanced/fingerprinting.mdx @@ -4,8 +4,6 @@ description: Learn how to use CrewAI's fingerprinting system to uniquely identif icon: fingerprint --- -# Fingerprinting in CrewAI - ## Overview Fingerprints in CrewAI provide a way to uniquely identify and track components throughout their lifecycle. Each `Agent`, `Crew`, and `Task` automatically receives a unique fingerprint when created, which cannot be manually overridden. diff --git a/docs/guides/agents/crafting-effective-agents.mdx b/docs/guides/agents/crafting-effective-agents.mdx index 411b78f65..3eb208b0a 100644 --- a/docs/guides/agents/crafting-effective-agents.mdx +++ b/docs/guides/agents/crafting-effective-agents.mdx @@ -4,8 +4,6 @@ description: Learn best practices for designing powerful, specialized AI agents icon: robot --- -# Crafting Effective Agents - ## The Art and Science of Agent Design At the heart of CrewAI lies the agent - a specialized AI entity designed to perform specific roles within a collaborative framework. While creating basic agents is simple, crafting truly effective agents that produce exceptional results requires understanding key design principles and best practices. diff --git a/docs/guides/concepts/evaluating-use-cases.mdx b/docs/guides/concepts/evaluating-use-cases.mdx index 9aec99fa3..3b2498cbe 100644 --- a/docs/guides/concepts/evaluating-use-cases.mdx +++ b/docs/guides/concepts/evaluating-use-cases.mdx @@ -4,8 +4,6 @@ description: Learn how to assess your AI application needs and choose the right icon: scale-balanced --- -# Evaluating Use Cases for CrewAI - ## Understanding the Decision Framework When building AI applications with CrewAI, one of the most important decisions you'll make is choosing the right approach for your specific use case. Should you use a Crew? A Flow? A combination of both? This guide will help you evaluate your requirements and make informed architectural decisions. diff --git a/docs/guides/crews/first-crew.mdx b/docs/guides/crews/first-crew.mdx index 8eb2619d1..3a54bfd55 100644 --- a/docs/guides/crews/first-crew.mdx +++ b/docs/guides/crews/first-crew.mdx @@ -4,8 +4,6 @@ description: Step-by-step tutorial to create a collaborative AI team that works icon: users-gear --- -# Build Your First Crew - ## Unleashing the Power of Collaborative AI Imagine having a team of specialized AI agents working together seamlessly to solve complex problems, each contributing their unique skills to achieve a common goal. This is the power of CrewAI - a framework that enables you to create collaborative AI systems that can accomplish tasks far beyond what a single AI could achieve alone. @@ -35,7 +33,8 @@ Let's get started building your first crew! Before starting, make sure you have: 1. Installed CrewAI following the [installation guide](/installation) -2. Set up your OpenAI API key in your environment variables +2. Set up your LLM API key in your environment, following the [LLM setup + guide](/concepts/llms#setting-up-your-llm) 3. Basic understanding of Python ## Step 1: Create a New CrewAI Project @@ -92,7 +91,8 @@ For our research crew, we'll create two agents: 1. A **researcher** who excels at finding and organizing information 2. An **analyst** who can interpret research findings and create insightful reports -Let's modify the `agents.yaml` file to define these specialized agents: +Let's modify the `agents.yaml` file to define these specialized agents. Be sure +to set `llm` to the provider you are using. ```yaml # src/research_crew/config/agents.yaml @@ -107,7 +107,7 @@ researcher: finding relevant information from various sources. You excel at organizing information in a clear and structured manner, making complex topics accessible to others. - llm: openai/gpt-4o-mini + llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude... analyst: role: > @@ -120,7 +120,7 @@ analyst: and technical writing. You have a talent for identifying patterns and extracting meaningful insights from research data, then communicating those insights effectively through well-crafted reports. - llm: openai/gpt-4o-mini + llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude... ``` Notice how each agent has a distinct role, goal, and backstory. These elements aren't just descriptive - they actively shape how the agent approaches its tasks. By crafting these carefully, you can create agents with specialized skills and perspectives that complement each other. @@ -282,12 +282,12 @@ This script prepares the environment, specifies our research topic, and kicks of Create a `.env` file in your project root with your API keys: -``` -OPENAI_API_KEY=your_openai_api_key +```sh SERPER_API_KEY=your_serper_api_key +# Add your provider's API key here too. ``` -You can get a Serper API key from [Serper.dev](https://serper.dev/). +See the [LLM Setup guide](/concepts/llms#setting-up-your-llm) for details on configuring your provider of choice. You can get a Serper API key from [Serper.dev](https://serper.dev/). ## Step 8: Install Dependencies diff --git a/docs/guides/flows/first-flow.mdx b/docs/guides/flows/first-flow.mdx index d5784f0a9..efac7700f 100644 --- a/docs/guides/flows/first-flow.mdx +++ b/docs/guides/flows/first-flow.mdx @@ -4,8 +4,6 @@ description: Learn how to create structured, event-driven workflows with precise icon: diagram-project --- -# Build Your First Flow - ## Taking Control of AI Workflows with Flows CrewAI Flows represent the next level in AI orchestration - combining the collaborative power of AI agent crews with the precision and flexibility of procedural programming. While crews excel at agent collaboration, flows give you fine-grained control over exactly how and when different components of your AI system interact. @@ -45,7 +43,8 @@ Let's dive in and build your first flow! Before starting, make sure you have: 1. Installed CrewAI following the [installation guide](/installation) -2. Set up your OpenAI API key in your environment variables +2. Set up your LLM API key in your environment, following the [LLM setup + guide](/concepts/llms#setting-up-your-llm) 3. Basic understanding of Python ## Step 1: Create a New CrewAI Flow Project @@ -107,6 +106,8 @@ Now, let's modify the generated files for the content writer crew. We'll set up 1. First, update the agents configuration file to define our content creation team: + Remember to set `llm` to the provider you are using. + ```yaml # src/guide_creator_flow/crews/content_crew/config/agents.yaml content_writer: @@ -119,7 +120,7 @@ content_writer: You are a talented educational writer with expertise in creating clear, engaging content. You have a gift for explaining complex concepts in accessible language and organizing information in a way that helps readers build their understanding. - llm: openai/gpt-4o-mini + llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude... content_reviewer: role: > @@ -132,7 +133,7 @@ content_reviewer: content. You have an eye for detail, clarity, and coherence. You excel at improving content while maintaining the original author's voice and ensuring consistent quality across multiple sections. - llm: openai/gpt-4o-mini + llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude... ``` These agent definitions establish the specialized roles and perspectives that will shape how our AI agents approach content creation. Notice how each agent has a distinct purpose and expertise. @@ -441,10 +442,15 @@ This is the power of flows - combining different types of processing (user inter ## Step 6: Set Up Your Environment Variables -Create a `.env` file in your project root with your API keys: +Create a `.env` file in your project root with your API keys. See the [LLM setup +guide](/concepts/llms#setting-up-your-llm) for details on configuring a provider. -``` +```sh .env OPENAI_API_KEY=your_openai_api_key +# or +GEMINI_API_KEY=your_gemini_api_key +# or +ANTHROPIC_API_KEY=your_anthropic_api_key ``` ## Step 7: Install Dependencies @@ -547,7 +553,10 @@ Let's break down the key components of flows to help you understand how to build Flows allow you to make direct calls to language models when you need simple, structured responses: ```python -llm = LLM(model="openai/gpt-4o-mini", response_format=GuideOutline) +llm = LLM( + model="model-id-here", # gpt-4o, gemini-2.0-flash, anthropic/claude... + response_format=GuideOutline +) response = llm.call(messages=messages) ``` diff --git a/docs/guides/flows/mastering-flow-state.mdx b/docs/guides/flows/mastering-flow-state.mdx index 24a852322..22ce2a797 100644 --- a/docs/guides/flows/mastering-flow-state.mdx +++ b/docs/guides/flows/mastering-flow-state.mdx @@ -4,8 +4,6 @@ description: A comprehensive guide to managing, persisting, and leveraging state icon: diagram-project --- -# Mastering Flow State Management - ## Understanding the Power of State in Flows State management is the backbone of any sophisticated AI workflow. In CrewAI Flows, the state system allows you to maintain context, share data between steps, and build complex application logic. Mastering state management is essential for creating reliable, maintainable, and powerful AI applications. diff --git a/docs/how-to/arize-phoenix-observability.mdx b/docs/how-to/arize-phoenix-observability.mdx index 4a28e846c..39271e222 100644 --- a/docs/how-to/arize-phoenix-observability.mdx +++ b/docs/how-to/arize-phoenix-observability.mdx @@ -68,7 +68,13 @@ We'll create a CrewAI application where two agents collaborate to research and w ```python from crewai import Agent, Crew, Process, Task from crewai_tools import SerperDevTool +from openinference.instrumentation.crewai import CrewAIInstrumentor +from phoenix.otel import register +# setup monitoring for your crew +tracer_provider = register( + endpoint="http://localhost:6006/v1/traces") +CrewAIInstrumentor().instrument(skip_dep_check=True, tracer_provider=tracer_provider) search_tool = SerperDevTool() # Define your agents with roles and goals diff --git a/docs/images/crewai-flow-1.png b/docs/images/crewai-flow-1.png new file mode 100644 index 000000000..ff92bc60d Binary files /dev/null and b/docs/images/crewai-flow-1.png differ diff --git a/docs/images/crewai-flow-2.png b/docs/images/crewai-flow-2.png new file mode 100644 index 000000000..61677b607 Binary files /dev/null and b/docs/images/crewai-flow-2.png differ diff --git a/docs/images/crewai-flow-3.png b/docs/images/crewai-flow-3.png new file mode 100644 index 000000000..594b523c7 Binary files /dev/null and b/docs/images/crewai-flow-3.png differ diff --git a/docs/images/crewai-flow-4.png b/docs/images/crewai-flow-4.png new file mode 100644 index 000000000..5af239850 Binary files /dev/null and b/docs/images/crewai-flow-4.png differ diff --git a/docs/images/crewai-flow-5.png b/docs/images/crewai-flow-5.png new file mode 100644 index 000000000..188b67d13 Binary files /dev/null and b/docs/images/crewai-flow-5.png differ diff --git a/docs/images/crewai-flow-6.png b/docs/images/crewai-flow-6.png new file mode 100644 index 000000000..dfe80244f Binary files /dev/null and b/docs/images/crewai-flow-6.png differ diff --git a/docs/images/crewai-flow-7.png b/docs/images/crewai-flow-7.png new file mode 100644 index 000000000..ce46d9222 Binary files /dev/null and b/docs/images/crewai-flow-7.png differ diff --git a/docs/images/crewai-flow-8.png b/docs/images/crewai-flow-8.png new file mode 100644 index 000000000..16afe8c47 Binary files /dev/null and b/docs/images/crewai-flow-8.png differ diff --git a/docs/images/enterprise/crew-secrets.png b/docs/images/enterprise/crew-secrets.png new file mode 100644 index 000000000..a5c456055 Binary files /dev/null and b/docs/images/enterprise/crew-secrets.png differ diff --git a/docs/images/enterprise/mcp-enterprise-download.png b/docs/images/enterprise/mcp-enterprise-download.png new file mode 100644 index 000000000..f4ca0ad2e Binary files /dev/null and b/docs/images/enterprise/mcp-enterprise-download.png differ diff --git a/docs/installation.mdx b/docs/installation.mdx index 7c1e09a3b..7a0c8f20c 100644 --- a/docs/installation.mdx +++ b/docs/installation.mdx @@ -71,6 +71,10 @@ If you haven't installed `uv` yet, follow **step 1** to quickly get it set up on ``` + + If you encounter the `chroma-hnswlib==0.7.6` build error (`fatal error C1083: Cannot open include file: 'float.h'`) on Windows, install (Visual Studio Build Tools)[https://visualstudio.microsoft.com/downloads/] with *Desktop development with C++*. + + - To verify that `crewai` is installed, run: ```shell uv tool list diff --git a/docs/mcp/crewai-mcp-integration.mdx b/docs/mcp/crewai-mcp-integration.mdx new file mode 100644 index 000000000..1df16eb73 --- /dev/null +++ b/docs/mcp/crewai-mcp-integration.mdx @@ -0,0 +1,229 @@ +--- +title: 'MCP Servers as Tools in CrewAI' +description: 'Learn how to integrate MCP servers as tools in your CrewAI agents using the `crewai-tools` library.' +icon: 'plug' +--- + +## Overview + +The [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) provides a standardized way for AI agents to provide context to LLMs by communicating with external services, known as MCP Servers. +The `crewai-tools` library extends CrewAI's capabilities by allowing you to seamlessly integrate tools from these MCP servers into your agents. +This gives your crews access to a vast ecosystem of functionalities. For now, we support **Standard Input/Output** (Stdio) and **Server-Sent Events** (SSE) transport mechanisms. + + +We will also be integrating **Streamable HTTP** transport in the near future. +Streamable HTTP is designed for efficient, bi-directional communication over a single HTTP connection. + + +## Installation + +Before you start using MCP with `crewai-tools`, you need to install the `mcp` extra `crewai-tools` dependency with the following command: + +```shell +uv pip install 'crewai-tools[mcp]' +``` + +### Integrating MCP Tools with `MCPServerAdapter` + +The `MCPServerAdapter` class from `crewai-tools` is the primary way to connect to an MCP server and make its tools available to your CrewAI agents. +It supports different transport mechanisms, primarily **Stdio** (for local servers) and **SSE** (Server-Sent Events).You have two main options for managing the connection lifecycle: + +### Option 1: Fully Managed Connection (Recommended) + +Using a Python context manager (`with` statement) is the recommended approach. It automatically handles starting and stopping the connection to the MCP server. + +**For a local Stdio-based MCP server:** + +```python +from crewai import Agent, Task, Crew +from crewai_tools import MCPServerAdapter +from mcp import StdioServerParameters +import os + +server_params=StdioServerParameters( + command="uxv", # Or your python3 executable i.e. "python3" + args=["mock_server.py"], + env={"UV_PYTHON": "3.12", **os.environ}, +) + +with MCPServerAdapter(server_params) as tools: + print(f"Available tools from Stdio MCP server: {[tool.name for tool in tools]}") + + # Example: Using the tools from the Stdio MCP server in a CrewAI Agent + agent = Agent( + role="Web Information Retriever", + goal="Scrape content from a specified URL.", + backstory="An AI that can fetch and process web page data via an MCP tool.", + tools=tools, + verbose=True, + ) + task = Task( + description="Scrape content from a specified URL.", + expected_output="Scraped content from the specified URL.", + agent=agent, + ) + crew = Crew( + agents=[agent], + tasks=[task], + verbose=True, + ) + result = crew.kickoff() + print(result) +``` + +**For a remote SSE-based MCP server:** + +```python +from crewai_tools import MCPServerAdapter +from crewai import Agent, Task, Crew + +server_params = {"url": "http://localhost:8000/sse"} + +with MCPServerAdapter(server_params) as tools: + print(f"Available tools from SSE MCP server: {[tool.name for tool in tools]}") + + # Example: Using the tools from the SSE MCP server in a CrewAI Agent + agent = Agent( + role="Web Information Retriever", + goal="Scrape content from a specified URL.", + backstory="An AI that can fetch and process web page data via an MCP tool.", + tools=tools, + verbose=True, + ) + task = Task( + description="Scrape content from a specified URL.", + expected_output="Scraped content from the specified URL.", + agent=agent, + ) + crew = Crew( + agents=[agent], + tasks=[task], + verbose=True, + ) + result = crew.kickoff() + print(result) +``` + +### Option 2: More control over the MCP server connection lifecycle + +If you need finer-grained control over the MCP server connection lifecycle, you can instantiate `MCPServerAdapter` directly and manage its `start()` and `stop()` methods. + + +You **MUST** call `mcp_server_adapter.stop()` to ensure the connection is closed and resources are released. Using a `try...finally` block is highly recommended. + + +#### Stdio Transport Example (Manual) + +```python +from mcp import StdioServerParameters +from crewai_tools import MCPServerAdapter +from crewai import Agent, Task, Crew +import os + +stdio_params = StdioServerParameters( + command="uvx", # Or your python3 executable i.e. "python3" + args=["--quiet", "your-mcp-server@0.1.3"], + env={"UV_PYTHON": "3.12", **os.environ}, +) + +mcp_server_adapter = MCPServerAdapter(server_params=stdio_params) +try: + mcp_server_adapter.start() # Manually start the connection + tools = mcp_server_adapter.tools + print(f"Available tools (manual Stdio): {[tool.name for tool in tools]}") + + # Use 'tools' with your Agent, Task, Crew setup as in Option 1 + agent = Agent( + role="Medical Researcher", + goal="Find recent studies on a given topic using PubMed.", + backstory="An AI assistant specialized in biomedical literature research.", + tools=tools, + verbose=True + ) + + task = Task( + description="Search for recent articles on 'crispr gene editing'.", + expected_output="A summary of the top 3 recent articles.", + agent=agent + ) + + crew = Crew( + agents=[agent], + tasks=[task], + verbose=True, + process=Process.sequential + ) + + result = crew.kickoff() + print(result) +finally: + print("Stopping Stdio MCP server connection (manual)...") + mcp_server_adapter.stop() # **Crucial: Ensure stop is called** +``` + + +#### SSE Transport Example (Manual) + +```python +from crewai_tools import MCPServerAdapter +from crewai import Agent, Task, Crew, Process +from mcp import StdioServerParameters + + +server_params = {"url": "http://localhost:8000/sse"} + +try: + mcp_server_adapter = MCPServerAdapter(server_params) + mcp_server_adapter.start() + tools = mcp_server_adapter.tools + print(f"Available tools (manual SSE): {[tool.name for tool in tools]}") + + agent = Agent( + role="Medical Researcher", + goal="Find recent studies on a given topic using PubMed.", + backstory="An AI assistant specialized in biomedical literature research.", + tools=tools, + verbose=True + ) + + task = Task( + description="Search for recent articles on 'crispr gene editing'.", + expected_output="A summary of the top 3 recent articles.", + agent=agent + ) + + crew = Crew( + agents=[agent], + tasks=[task], + verbose=True, + process=Process.sequential + ) + + result = crew.kickoff() + print(result) +finally: + print("Stopping SSE MCP server connection (manual)...") + mcp_server_adapter.stop() # **Crucial: Ensure stop is called** +``` + +## Staying Safe with MCP + +Always ensure that you trust an MCP Server before using it. + + +#### Security Warning: DNS Rebinding Attacks +SSE transports can be vulnerable to DNS rebinding attacks if not properly secured. +To prevent this: + +1. **Always validate Origin headers** on incoming SSE connections to ensure they come from expected sources +2. **Avoid binding servers to all network interfaces** (0.0.0.0) when running locally - bind only to localhost (127.0.0.1) instead +3. **Implement proper authentication** for all SSE connections + +Without these protections, attackers could use DNS rebinding to interact with local MCP servers from remote websites. + +For more details, see the [MCP Transport Security](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations) documentation. + +### Limitations +* **Supported Primitives**: Currently, `MCPServerAdapter` primarily supports adapting MCP `tools`. +Other MCP primitives like `prompts` or `resources` are not directly integrated as CrewAI components through this adapter at this time. +* **Output Handling**: The adapter typically processes the primary text output from an MCP tool (e.g., `.content[0].text`). Complex or multi-modal outputs might require custom handling if not fitting this pattern. diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx index 1f773fb23..b9f04dba4 100644 --- a/docs/quickstart.mdx +++ b/docs/quickstart.mdx @@ -180,8 +180,9 @@ Follow the steps below to get Crewing! 🚣‍♂️ Before running your crew, make sure you have the following keys set as environment variables in your `.env` file: - - An [OpenAI API key](https://platform.openai.com/account/api-keys) (or other LLM API key): `OPENAI_API_KEY=sk-...` - A [Serper.dev](https://serper.dev/) API key: `SERPER_API_KEY=YOUR_KEY_HERE` + - The configuration for your choice of model, such as an API key. See the + [LLM setup guide](/concepts/llms#setting-up-your-llm) to learn how to configure models from any provider. - Lock the dependencies and install them by using the CLI command: @@ -317,7 +318,7 @@ email_summarizer: Summarize emails into a concise and clear summary backstory: > You will create a 5 bullet point summary of the report - llm: openai/gpt-4o + llm: provider/model-id # Add your choice of model here ``` diff --git a/docs/tools/docxsearchtool.mdx b/docs/tools/docxsearchtool.mdx index c3a501dc6..9e7ebee44 100644 --- a/docs/tools/docxsearchtool.mdx +++ b/docs/tools/docxsearchtool.mdx @@ -22,7 +22,7 @@ streamlining the process of finding specific information within large document c Install the crewai_tools package by running the following command in your terminal: ```shell -pip install 'crewai[tools]' +uv pip install docx2txt 'crewai[tools]' ``` ## Example @@ -76,4 +76,4 @@ tool = DOCXSearchTool( ), ) ) -``` \ No newline at end of file +``` diff --git a/docs/tools/nl2sqltool.mdx b/docs/tools/nl2sqltool.mdx index ebf535847..582d25383 100644 --- a/docs/tools/nl2sqltool.mdx +++ b/docs/tools/nl2sqltool.mdx @@ -8,10 +8,10 @@ icon: language ## Description -This tool is used to convert natural language to SQL queries. When passsed to the agent it will generate queries and then use them to interact with the database. +This tool is used to convert natural language to SQL queries. When passed to the agent it will generate queries and then use them to interact with the database. This enables multiple workflows like having an Agent to access the database fetch information based on the goal and then use the information to generate a response, report or any other output. -Along with that proivdes the ability for the Agent to update the database based on its goal. +Along with that provides the ability for the Agent to update the database based on its goal. **Attention**: Make sure that the Agent has access to a Read-Replica or that is okay for the Agent to run insert/update queries on the database. @@ -81,4 +81,4 @@ The Tool provides endless possibilities on the logic of the Agent and how it can ```md DB -> Agent -> ... -> Agent -> DB -``` \ No newline at end of file +``` diff --git a/docs/tools/stagehandtool.mdx b/docs/tools/stagehandtool.mdx new file mode 100644 index 000000000..13de0853e --- /dev/null +++ b/docs/tools/stagehandtool.mdx @@ -0,0 +1,244 @@ +--- +title: Stagehand Tool +description: Web automation tool that integrates Stagehand with CrewAI for browser interaction and automation +icon: hand +--- + + +# Overview + +The `StagehandTool` integrates the [Stagehand](https://docs.stagehand.dev/get_started/introduction) framework with CrewAI, enabling agents to interact with websites and automate browser tasks using natural language instructions. + +## Overview + +Stagehand is a powerful browser automation framework built by Browserbase that allows AI agents to: + +- Navigate to websites +- Click buttons, links, and other elements +- Fill in forms +- Extract data from web pages +- Observe and identify elements +- Perform complex workflows + +The StagehandTool wraps the Stagehand Python SDK to provide CrewAI agents with browser control capabilities through three core primitives: + +1. **Act**: Perform actions like clicking, typing, or navigating +2. **Extract**: Extract structured data from web pages +3. **Observe**: Identify and analyze elements on the page + +## Prerequisites + +Before using this tool, ensure you have: + +1. A [Browserbase](https://www.browserbase.com/) account with API key and project ID +2. An API key for an LLM (OpenAI or Anthropic Claude) +3. The Stagehand Python SDK installed + +Install the required dependency: + +```bash +pip install stagehand-py +``` + +## Usage + +### Basic Implementation + +The StagehandTool can be implemented in two ways: + +#### 1. Using Context Manager (Recommended) + + The context manager approach is recommended as it ensures proper cleanup of resources even if exceptions occur. + + +```python +from crewai import Agent, Task, Crew +from crewai_tools import StagehandTool +from stagehand.schemas import AvailableModel + +# Initialize the tool with your API keys using a context manager +with StagehandTool( + api_key="your-browserbase-api-key", + project_id="your-browserbase-project-id", + model_api_key="your-llm-api-key", # OpenAI or Anthropic API key + model_name=AvailableModel.CLAUDE_3_7_SONNET_LATEST, # Optional: specify which model to use +) as stagehand_tool: + # Create an agent with the tool + researcher = Agent( + role="Web Researcher", + goal="Find and summarize information from websites", + backstory="I'm an expert at finding information online.", + verbose=True, + tools=[stagehand_tool], + ) + + # Create a task that uses the tool + research_task = Task( + description="Go to https://www.example.com and tell me what you see on the homepage.", + agent=researcher, + ) + + # Run the crew + crew = Crew( + agents=[researcher], + tasks=[research_task], + verbose=True, + ) + + result = crew.kickoff() + print(result) +``` + +#### 2. Manual Resource Management + +```python +from crewai import Agent, Task, Crew +from crewai_tools import StagehandTool +from stagehand.schemas import AvailableModel + +# Initialize the tool with your API keys +stagehand_tool = StagehandTool( + api_key="your-browserbase-api-key", + project_id="your-browserbase-project-id", + model_api_key="your-llm-api-key", + model_name=AvailableModel.CLAUDE_3_7_SONNET_LATEST, +) + +try: + # Create an agent with the tool + researcher = Agent( + role="Web Researcher", + goal="Find and summarize information from websites", + backstory="I'm an expert at finding information online.", + verbose=True, + tools=[stagehand_tool], + ) + + # Create a task that uses the tool + research_task = Task( + description="Go to https://www.example.com and tell me what you see on the homepage.", + agent=researcher, + ) + + # Run the crew + crew = Crew( + agents=[researcher], + tasks=[research_task], + verbose=True, + ) + + result = crew.kickoff() + print(result) +finally: + # Explicitly clean up resources + stagehand_tool.close() +``` + +## Command Types + +The StagehandTool supports three different command types for specific web automation tasks: + +### 1. Act Command + +The `act` command type (default) enables webpage interactions like clicking buttons, filling forms, and navigation. + +```python +# Perform an action (default behavior) +result = stagehand_tool.run( + instruction="Click the login button", + url="https://example.com", + command_type="act" # Default, so can be omitted +) + +# Fill out a form +result = stagehand_tool.run( + instruction="Fill the contact form with name 'John Doe', email 'john@example.com', and message 'Hello world'", + url="https://example.com/contact" +) +``` + +### 2. Extract Command + +The `extract` command type retrieves structured data from webpages. + +```python +# Extract all product information +result = stagehand_tool.run( + instruction="Extract all product names, prices, and descriptions", + url="https://example.com/products", + command_type="extract" +) + +# Extract specific information with a selector +result = stagehand_tool.run( + instruction="Extract the main article title and content", + url="https://example.com/blog/article", + command_type="extract", + selector=".article-container" # Optional CSS selector +) +``` + +### 3. Observe Command + +The `observe` command type identifies and analyzes webpage elements. + +```python +# Find interactive elements +result = stagehand_tool.run( + instruction="Find all interactive elements in the navigation menu", + url="https://example.com", + command_type="observe" +) + +# Identify form fields +result = stagehand_tool.run( + instruction="Identify all the input fields in the registration form", + url="https://example.com/register", + command_type="observe", + selector="#registration-form" +) +``` + +## Configuration Options + +Customize the StagehandTool behavior with these parameters: + +```python +stagehand_tool = StagehandTool( + api_key="your-browserbase-api-key", + project_id="your-browserbase-project-id", + model_api_key="your-llm-api-key", + model_name=AvailableModel.CLAUDE_3_7_SONNET_LATEST, + dom_settle_timeout_ms=5000, # Wait longer for DOM to settle + headless=True, # Run browser in headless mode + self_heal=True, # Attempt to recover from errors + wait_for_captcha_solves=True, # Wait for CAPTCHA solving + verbose=1, # Control logging verbosity (0-3) +) +``` + +## Best Practices + +1. **Be Specific**: Provide detailed instructions for better results +2. **Choose Appropriate Command Type**: Select the right command type for your task +3. **Use Selectors**: Leverage CSS selectors to improve accuracy +4. **Break Down Complex Tasks**: Split complex workflows into multiple tool calls +5. **Implement Error Handling**: Add error handling for potential issues + +## Troubleshooting + + +Common issues and solutions: + +- **Session Issues**: Verify API keys for both Browserbase and LLM provider +- **Element Not Found**: Increase `dom_settle_timeout_ms` for slower pages +- **Action Failures**: Use `observe` to identify correct elements first +- **Incomplete Data**: Refine instructions or provide specific selectors + + +## Additional Resources + +For questions about the CrewAI integration: +- Join Stagehand's [Slack community](https://stagehand.dev/slack) +- Open an issue in the [Stagehand repository](https://github.com/browserbase/stagehand) +- Visit [Stagehand documentation](https://docs.stagehand.dev/) diff --git a/pyproject.toml b/pyproject.toml index 1bea8bded..5b68d12e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "crewai" -version = "0.118.0" +version = "0.120.1" description = "Cutting-edge framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks." readme = "README.md" requires-python = ">=3.10,<3.13" @@ -44,7 +44,7 @@ Documentation = "https://docs.crewai.com" Repository = "https://github.com/crewAIInc/crewAI" [project.optional-dependencies] -tools = ["crewai-tools~=0.42.2"] +tools = ["crewai-tools~=0.45.0"] embeddings = [ "tiktoken~=0.7.0" ] diff --git a/src/crewai/__init__.py b/src/crewai/__init__.py index 50bd9e6b7..2144c36c8 100644 --- a/src/crewai/__init__.py +++ b/src/crewai/__init__.py @@ -17,7 +17,7 @@ warnings.filterwarnings( category=UserWarning, module="pydantic.main", ) -__version__ = "0.118.0" +__version__ = "0.120.1" __all__ = [ "Agent", "Crew", diff --git a/src/crewai/agent.py b/src/crewai/agent.py index 73fbcd2fb..783be5668 100644 --- a/src/crewai/agent.py +++ b/src/crewai/agent.py @@ -20,6 +20,7 @@ from crewai.tools.agent_tools.agent_tools import AgentTools from crewai.utilities import Converter, Prompts from crewai.utilities.agent_utils import ( get_tool_names, + load_agent_from_repository, parse_tools, render_text_description_and_args, ) @@ -31,6 +32,14 @@ from crewai.utilities.events.agent_events import ( AgentExecutionStartedEvent, ) from crewai.utilities.events.crewai_event_bus import crewai_event_bus +from crewai.utilities.events.knowledge_events import ( + KnowledgeQueryCompletedEvent, + KnowledgeQueryFailedEvent, + KnowledgeQueryStartedEvent, + KnowledgeRetrievalCompletedEvent, + KnowledgeRetrievalStartedEvent, + KnowledgeSearchQueryFailedEvent, +) from crewai.utilities.llm_utils import create_llm from crewai.utilities.token_counter_callback import TokenCalcHandler from crewai.utilities.training_handler import CrewTrainingHandler @@ -110,6 +119,14 @@ class Agent(BaseAgent): default="safe", description="Mode for code execution: 'safe' (using Docker) or 'unsafe' (direct execution).", ) + reasoning: bool = Field( + default=False, + description="Whether the agent should reflect and create a plan before executing a task.", + ) + max_reasoning_attempts: Optional[int] = Field( + default=None, + description="Maximum number of reasoning attempts before executing the task. If None, will try until ready.", + ) embedder: Optional[Dict[str, Any]] = Field( default=None, description="Embedder configuration for the agent.", @@ -122,6 +139,20 @@ class Agent(BaseAgent): default=None, description="Knowledge context for the crew.", ) + knowledge_search_query: Optional[str] = Field( + default=None, + description="Knowledge search query for the agent dynamically generated by the agent.", + ) + from_repository: Optional[str] = Field( + default=None, + description="The Agent's role to be used from your repository.", + ) + + @model_validator(mode="before") + def validate_from_repository(cls, v): + if v is not None and (from_repository := v.get("from_repository")): + return load_agent_from_repository(from_repository) | v + return v @model_validator(mode="after") def post_init_setup(self): @@ -185,7 +216,7 @@ class Agent(BaseAgent): self, task: Task, context: Optional[str] = None, - tools: Optional[List[BaseTool]] = None + tools: Optional[List[BaseTool]] = None, ) -> str: """Execute a task with the agent. @@ -202,6 +233,21 @@ class Agent(BaseAgent): ValueError: If the max execution time is not a positive integer. RuntimeError: If the agent execution fails for other reasons. """ + if self.reasoning: + try: + from crewai.utilities.reasoning_handler import AgentReasoning, AgentReasoningOutput + + reasoning_handler = AgentReasoning(task=task, agent=self) + reasoning_output: AgentReasoningOutput = reasoning_handler.handle_agent_reasoning() + + # Add the reasoning plan to the task description + task.description += f"\n\nReasoning Plan:\n{reasoning_output.plan.plan}" + except Exception as e: + if hasattr(self, '_logger'): + self._logger.log("error", f"Error during reasoning process: {str(e)}") + else: + print(f"Error during reasoning process: {str(e)}") + if self.tools_handler: self.tools_handler.last_used_tool = {} # type: ignore # Incompatible types in assignment (expression has type "dict[Never, Never]", variable has type "ToolCalling") @@ -245,27 +291,65 @@ class Agent(BaseAgent): knowledge_config = ( self.knowledge_config.model_dump() if self.knowledge_config else {} ) - if self.knowledge: - agent_knowledge_snippets = self.knowledge.query( - [task.prompt()], **knowledge_config - ) - if agent_knowledge_snippets: - self.agent_knowledge_context = extract_knowledge_context( - agent_knowledge_snippets - ) - if self.agent_knowledge_context: - task_prompt += self.agent_knowledge_context - if self.crew: - knowledge_snippets = self.crew.query_knowledge( - [task.prompt()], **knowledge_config + if self.knowledge: + crewai_event_bus.emit( + self, + event=KnowledgeRetrievalStartedEvent( + agent=self, + ), ) - if knowledge_snippets: - self.crew_knowledge_context = extract_knowledge_context( - knowledge_snippets + try: + self.knowledge_search_query = self._get_knowledge_search_query( + task_prompt + ) + if self.knowledge_search_query: + agent_knowledge_snippets = self.knowledge.query( + [self.knowledge_search_query], **knowledge_config + ) + if agent_knowledge_snippets: + self.agent_knowledge_context = extract_knowledge_context( + agent_knowledge_snippets + ) + if self.agent_knowledge_context: + task_prompt += self.agent_knowledge_context + if self.crew: + knowledge_snippets = self.crew.query_knowledge( + [self.knowledge_search_query], **knowledge_config + ) + if knowledge_snippets: + self.crew_knowledge_context = extract_knowledge_context( + knowledge_snippets + ) + if self.crew_knowledge_context: + task_prompt += self.crew_knowledge_context + + crewai_event_bus.emit( + self, + event=KnowledgeRetrievalCompletedEvent( + query=self.knowledge_search_query, + agent=self, + retrieved_knowledge=( + (self.agent_knowledge_context or "") + + ( + "\n" + if self.agent_knowledge_context + and self.crew_knowledge_context + else "" + ) + + (self.crew_knowledge_context or "") + ), + ), + ) + except Exception as e: + crewai_event_bus.emit( + self, + event=KnowledgeSearchQueryFailedEvent( + query=self.knowledge_search_query or "", + agent=self, + error=str(e), + ), ) - if self.crew_knowledge_context: - task_prompt += self.crew_knowledge_context tools = tools or self.tools or [] self.create_agent_executor(tools=tools, task=task) @@ -288,12 +372,19 @@ class Agent(BaseAgent): # Determine execution method based on timeout setting if self.max_execution_time is not None: - if not isinstance(self.max_execution_time, int) or self.max_execution_time <= 0: - raise ValueError("Max Execution time must be a positive integer greater than zero") - result = self._execute_with_timeout(task_prompt, task, self.max_execution_time) + if ( + not isinstance(self.max_execution_time, int) + or self.max_execution_time <= 0 + ): + raise ValueError( + "Max Execution time must be a positive integer greater than zero" + ) + result = self._execute_with_timeout( + task_prompt, task, self.max_execution_time + ) else: result = self._execute_without_timeout(task_prompt, task) - + except TimeoutError as e: # Propagate TimeoutError without retry crewai_event_bus.emit( @@ -345,54 +436,46 @@ class Agent(BaseAgent): ) return result - def _execute_with_timeout( - self, - task_prompt: str, - task: Task, - timeout: int - ) -> str: + def _execute_with_timeout(self, task_prompt: str, task: Task, timeout: int) -> str: """Execute a task with a timeout. - + Args: task_prompt: The prompt to send to the agent. task: The task being executed. timeout: Maximum execution time in seconds. - + Returns: The output of the agent. - + Raises: TimeoutError: If execution exceeds the timeout. RuntimeError: If execution fails for other reasons. """ import concurrent.futures + with concurrent.futures.ThreadPoolExecutor() as executor: future = executor.submit( - self._execute_without_timeout, - task_prompt=task_prompt, - task=task + self._execute_without_timeout, task_prompt=task_prompt, task=task ) - + try: return future.result(timeout=timeout) except concurrent.futures.TimeoutError: future.cancel() - raise TimeoutError(f"Task '{task.description}' execution timed out after {timeout} seconds. Consider increasing max_execution_time or optimizing the task.") + raise TimeoutError( + f"Task '{task.description}' execution timed out after {timeout} seconds. Consider increasing max_execution_time or optimizing the task." + ) except Exception as e: future.cancel() raise RuntimeError(f"Task execution failed: {str(e)}") - def _execute_without_timeout( - self, - task_prompt: str, - task: Task - ) -> str: + def _execute_without_timeout(self, task_prompt: str, task: Task) -> str: """Execute a task without a timeout. - + Args: task_prompt: The prompt to send to the agent. task: The task being executed. - + Returns: The output of the agent. """ @@ -560,6 +643,61 @@ class Agent(BaseAgent): def set_fingerprint(self, fingerprint: Fingerprint): self.security_config.fingerprint = fingerprint + def _get_knowledge_search_query(self, task_prompt: str) -> str | None: + """Generate a search query for the knowledge base based on the task description.""" + crewai_event_bus.emit( + self, + event=KnowledgeQueryStartedEvent( + task_prompt=task_prompt, + agent=self, + ), + ) + query = self.i18n.slice("knowledge_search_query").format( + task_prompt=task_prompt + ) + rewriter_prompt = self.i18n.slice("knowledge_search_query_system_prompt") + if not isinstance(self.llm, BaseLLM): + self._logger.log( + "warning", + f"Knowledge search query failed: LLM for agent '{self.role}' is not an instance of BaseLLM", + ) + crewai_event_bus.emit( + self, + event=KnowledgeQueryFailedEvent( + agent=self, + error="LLM is not compatible with knowledge search queries", + ), + ) + return None + + try: + rewritten_query = self.llm.call( + [ + { + "role": "system", + "content": rewriter_prompt, + }, + {"role": "user", "content": query}, + ] + ) + crewai_event_bus.emit( + self, + event=KnowledgeQueryCompletedEvent( + query=query, + agent=self, + ), + ) + return rewritten_query + except Exception as e: + crewai_event_bus.emit( + self, + event=KnowledgeQueryFailedEvent( + agent=self, + error=str(e), + ), + ) + return None + def kickoff( self, messages: Union[str, List[Dict[str, str]]], diff --git a/src/crewai/cli/authentication/token.py b/src/crewai/cli/authentication/token.py index 566812375..35c94e016 100644 --- a/src/crewai/cli/authentication/token.py +++ b/src/crewai/cli/authentication/token.py @@ -18,5 +18,5 @@ def get_auth_token() -> str: TokenManager().save_refresh_token(refresh_token) if not access_token: - raise Exception("Access token could not be obtained. Please sign in again.") + raise Exception("Session expired. Please sign in again with 'crewai login'.") return access_token diff --git a/src/crewai/cli/cli.py b/src/crewai/cli/cli.py index 21b67fc71..a2faa5231 100644 --- a/src/crewai/cli/cli.py +++ b/src/crewai/cli/cli.py @@ -1,6 +1,5 @@ -import os from importlib.metadata import version as get_version -from typing import Optional, Tuple +from typing import Optional import click @@ -138,12 +137,8 @@ def log_tasks_outputs() -> None: @click.option("-s", "--short", is_flag=True, help="Reset SHORT TERM memory") @click.option("-e", "--entities", is_flag=True, help="Reset ENTITIES memory") @click.option("-kn", "--knowledge", is_flag=True, help="Reset KNOWLEDGE storage") -@click.option( - "-k", - "--kickoff-outputs", - is_flag=True, - help="Reset LATEST KICKOFF TASK OUTPUTS", -) +@click.option("-akn", "--agent-knowledge", is_flag=True, help="Reset AGENT KNOWLEDGE storage") +@click.option("-k","--kickoff-outputs",is_flag=True,help="Reset LATEST KICKOFF TASK OUTPUTS") @click.option("-a", "--all", is_flag=True, help="Reset ALL memories") def reset_memories( long: bool, @@ -151,18 +146,20 @@ def reset_memories( entities: bool, knowledge: bool, kickoff_outputs: bool, + agent_knowledge: bool, all: bool, ) -> None: """ - Reset the crew memories (long, short, entity, latest_crew_kickoff_ouputs). This will delete all the data saved. + Reset the crew memories (long, short, entity, latest_crew_kickoff_ouputs, knowledge, agent_knowledge). This will delete all the data saved. """ try: - if not all and not (long or short or entities or knowledge or kickoff_outputs): + memory_types = [long, short, entities, knowledge, agent_knowledge, kickoff_outputs, all] + if not any(memory_types): click.echo( "Please specify at least one memory type to reset using the appropriate flags." ) return - reset_memories_command(long, short, entities, knowledge, kickoff_outputs, all) + reset_memories_command(long, short, entities, knowledge, agent_knowledge, kickoff_outputs, all) except Exception as e: click.echo(f"An error occurred while resetting memories: {e}", err=True) diff --git a/src/crewai/cli/constants.py b/src/crewai/cli/constants.py index 80183f8b0..306f1108b 100644 --- a/src/crewai/cli/constants.py +++ b/src/crewai/cli/constants.py @@ -13,7 +13,7 @@ ENV_VARS = { ], "gemini": [ { - "prompt": "Enter your GEMINI API key (press Enter to skip)", + "prompt": "Enter your GEMINI API key from https://ai.dev/apikey (press Enter to skip)", "key_name": "GEMINI_API_KEY", } ], diff --git a/src/crewai/cli/install_crew.py b/src/crewai/cli/install_crew.py index 9491932f1..bd0f35879 100644 --- a/src/crewai/cli/install_crew.py +++ b/src/crewai/cli/install_crew.py @@ -4,7 +4,7 @@ import click # Be mindful about changing this. -# on some enviorments we don't use this command but instead uv sync directly +# on some environments we don't use this command but instead uv sync directly # so if you expect this to support more things you will need to replicate it there # ask @joaomdmoura if you are unsure def install_crew(proxy_options: list[str]) -> None: diff --git a/src/crewai/cli/plus_api.py b/src/crewai/cli/plus_api.py index c56797a5b..058e21179 100644 --- a/src/crewai/cli/plus_api.py +++ b/src/crewai/cli/plus_api.py @@ -14,6 +14,7 @@ class PlusAPI: TOOLS_RESOURCE = "/crewai_plus/api/v1/tools" CREWS_RESOURCE = "/crewai_plus/api/v1/crews" + AGENTS_RESOURCE = "/crewai_plus/api/v1/agents" def __init__(self, api_key: str) -> None: self.api_key = api_key @@ -37,6 +38,9 @@ class PlusAPI: def get_tool(self, handle: str): return self._make_request("GET", f"{self.TOOLS_RESOURCE}/{handle}") + def get_agent(self, handle: str): + return self._make_request("GET", f"{self.AGENTS_RESOURCE}/{handle}") + def publish_tool( self, handle: str, diff --git a/src/crewai/cli/reset_memories_command.py b/src/crewai/cli/reset_memories_command.py index eaf54ffb7..d8910f735 100644 --- a/src/crewai/cli/reset_memories_command.py +++ b/src/crewai/cli/reset_memories_command.py @@ -10,6 +10,7 @@ def reset_memories_command( short, entity, knowledge, + agent_knowledge, kickoff_outputs, all, ) -> None: @@ -23,10 +24,11 @@ def reset_memories_command( kickoff_outputs (bool): Whether to reset the latest kickoff task outputs. all (bool): Whether to reset all memories. knowledge (bool): Whether to reset the knowledge. + agent_knowledge (bool): Whether to reset the agents knowledge. """ try: - if not any([long, short, entity, kickoff_outputs, knowledge, all]): + if not any([long, short, entity, kickoff_outputs, knowledge, agent_knowledge, all]): click.echo( "No memory type specified. Please specify at least one type to reset." ) @@ -67,6 +69,11 @@ def reset_memories_command( click.echo( f"[Crew ({crew.name if crew.name else crew.id})] Knowledge has been reset." ) + if agent_knowledge: + crew.reset_memories(command_type="agent_knowledge") + click.echo( + f"[Crew ({crew.name if crew.name else crew.id})] Agents knowledge has been reset." + ) except subprocess.CalledProcessError as e: click.echo(f"An error occurred while resetting the memories: {e}", err=True) diff --git a/src/crewai/cli/templates/crew/pyproject.toml b/src/crewai/cli/templates/crew/pyproject.toml index d47bd0c8c..3f5166bfc 100644 --- a/src/crewai/cli/templates/crew/pyproject.toml +++ b/src/crewai/cli/templates/crew/pyproject.toml @@ -5,7 +5,7 @@ description = "{{name}} using crewAI" authors = [{ name = "Your Name", email = "you@example.com" }] requires-python = ">=3.10,<3.13" dependencies = [ - "crewai[tools]>=0.118.0,<1.0.0" + "crewai[tools]>=0.120.1,<1.0.0" ] [project.scripts] diff --git a/src/crewai/cli/templates/flow/pyproject.toml b/src/crewai/cli/templates/flow/pyproject.toml index 954247cc6..5a86b4e6f 100644 --- a/src/crewai/cli/templates/flow/pyproject.toml +++ b/src/crewai/cli/templates/flow/pyproject.toml @@ -5,7 +5,7 @@ description = "{{name}} using crewAI" authors = [{ name = "Your Name", email = "you@example.com" }] requires-python = ">=3.10,<3.13" dependencies = [ - "crewai[tools]>=0.118.0,<1.0.0", + "crewai[tools]>=0.120.1,<1.0.0", ] [project.scripts] diff --git a/src/crewai/cli/templates/tool/pyproject.toml b/src/crewai/cli/templates/tool/pyproject.toml index fb2585f83..192b9b314 100644 --- a/src/crewai/cli/templates/tool/pyproject.toml +++ b/src/crewai/cli/templates/tool/pyproject.toml @@ -5,7 +5,7 @@ description = "Power up your crews with {{folder_name}}" readme = "README.md" requires-python = ">=3.10,<3.13" dependencies = [ - "crewai[tools]>=0.118.0" + "crewai[tools]>=0.120.1" ] [tool.crewai] diff --git a/src/crewai/cli/utils.py b/src/crewai/cli/utils.py index 74fc414d9..f88213a58 100644 --- a/src/crewai/cli/utils.py +++ b/src/crewai/cli/utils.py @@ -161,7 +161,7 @@ def tree_find_and_replace(directory, find, replace): for filename in files: filepath = os.path.join(path, filename) - with open(filepath, "r") as file: + with open(filepath, "r", encoding="utf-8", errors="ignore") as file: contents = file.read() with open(filepath, "w") as file: file.write(contents.replace(find, replace)) diff --git a/src/crewai/crew.py b/src/crewai/crew.py index 102f22881..0505e3b0b 100644 --- a/src/crewai/crew.py +++ b/src/crewai/crew.py @@ -52,7 +52,7 @@ from crewai.tools.agent_tools.agent_tools import AgentTools from crewai.tools.base_tool import BaseTool, Tool from crewai.types.usage_metrics import UsageMetrics from crewai.utilities import I18N, FileHandler, Logger, RPMController -from crewai.utilities.constants import TRAINING_DATA_FILE +from crewai.utilities.constants import NOT_SPECIFIED, TRAINING_DATA_FILE from crewai.utilities.evaluators.crew_evaluator_handler import CrewEvaluator from crewai.utilities.evaluators.task_evaluator import TaskEvaluator from crewai.utilities.events.crew_events import ( @@ -315,9 +315,7 @@ class Crew(FlowTrackable, BaseModel): """Initialize private memory attributes.""" self._external_memory = ( # External memory doesn’t support a default value since it was designed to be managed entirely externally - self.external_memory.set_crew(self) - if self.external_memory - else None + self.external_memory.set_crew(self) if self.external_memory else None ) self._long_term_memory = self.long_term_memory @@ -478,7 +476,7 @@ class Crew(FlowTrackable, BaseModel): separated by a synchronous task. """ for i, task in enumerate(self.tasks): - if task.async_execution and task.context: + if task.async_execution and isinstance(task.context, list): for context_task in task.context: if context_task.async_execution: for j in range(i - 1, -1, -1): @@ -496,7 +494,7 @@ class Crew(FlowTrackable, BaseModel): task_indices = {id(task): i for i, task in enumerate(self.tasks)} for task in self.tasks: - if task.context: + if isinstance(task.context, list): for context_task in task.context: if id(context_task) not in task_indices: continue # Skip context tasks not in the main tasks list @@ -1034,11 +1032,14 @@ class Crew(FlowTrackable, BaseModel): ) return cast(List[BaseTool], tools) - def _get_context(self, task: Task, task_outputs: List[TaskOutput]): + def _get_context(self, task: Task, task_outputs: List[TaskOutput]) -> str: + if not task.context: + return "" + context = ( - aggregate_raw_outputs_from_tasks(task.context) - if task.context - else aggregate_raw_outputs_from_task_outputs(task_outputs) + aggregate_raw_outputs_from_task_outputs(task_outputs) + if task.context is NOT_SPECIFIED + else aggregate_raw_outputs_from_tasks(task.context) ) return context @@ -1201,7 +1202,6 @@ class Crew(FlowTrackable, BaseModel): "_long_term_memory", "_entity_memory", "_external_memory", - "_telemetry", "agents", "tasks", "knowledge_sources", @@ -1226,7 +1226,7 @@ class Crew(FlowTrackable, BaseModel): task_mapping[task.key] = cloned_task for cloned_task, original_task in zip(cloned_tasks, self.tasks): - if original_task.context: + if isinstance(original_task.context, list): cloned_context = [ task_mapping[context_task.key] for context_task in original_task.context @@ -1353,7 +1353,7 @@ class Crew(FlowTrackable, BaseModel): Args: command_type: Type of memory to reset. - Valid options: 'long', 'short', 'entity', 'knowledge', + Valid options: 'long', 'short', 'entity', 'knowledge', 'agent_knowledge' 'kickoff_outputs', or 'all' Raises: @@ -1366,6 +1366,7 @@ class Crew(FlowTrackable, BaseModel): "short", "entity", "knowledge", + "agent_knowledge", "kickoff_outputs", "all", "external", @@ -1390,19 +1391,14 @@ class Crew(FlowTrackable, BaseModel): def _reset_all_memories(self) -> None: """Reset all available memory systems.""" - memory_systems = [ - ("short term", getattr(self, "_short_term_memory", None)), - ("entity", getattr(self, "_entity_memory", None)), - ("external", getattr(self, "_external_memory", None)), - ("long term", getattr(self, "_long_term_memory", None)), - ("task output", getattr(self, "_task_output_handler", None)), - ("knowledge", getattr(self, "knowledge", None)), - ] + memory_systems = self._get_memory_systems() - for name, system in memory_systems: - if system is not None: + for memory_type, config in memory_systems.items(): + if (system := config.get("system")) is not None: + name = config.get("name") try: - system.reset() + reset_fn: Callable = cast(Callable, config.get("reset")) + reset_fn(system) self._logger.log( "info", f"[Crew ({self.name if self.name else self.id})] {name} memory has been reset", @@ -1421,24 +1417,17 @@ class Crew(FlowTrackable, BaseModel): Raises: RuntimeError: If the specified memory system fails to reset """ - reset_functions = { - "long": (getattr(self, "_long_term_memory", None), "long term"), - "short": (getattr(self, "_short_term_memory", None), "short term"), - "entity": (getattr(self, "_entity_memory", None), "entity"), - "knowledge": (getattr(self, "knowledge", None), "knowledge"), - "kickoff_outputs": ( - getattr(self, "_task_output_handler", None), - "task output", - ), - "external": (getattr(self, "_external_memory", None), "external"), - } + memory_systems = self._get_memory_systems() + config = memory_systems[memory_type] + system = config.get("system") + name = config.get("name") - memory_system, name = reset_functions[memory_type] - if memory_system is None: + if system is None: raise RuntimeError(f"{name} memory system is not initialized") try: - memory_system.reset() + reset_fn: Callable = cast(Callable, config.get("reset")) + reset_fn(system) self._logger.log( "info", f"[Crew ({self.name if self.name else self.id})] {name} memory has been reset", @@ -1447,3 +1436,73 @@ class Crew(FlowTrackable, BaseModel): raise RuntimeError( f"[Crew ({self.name if self.name else self.id})] Failed to reset {name} memory: {str(e)}" ) from e + + def _get_memory_systems(self): + """Get all available memory systems with their configuration. + + Returns: + Dict containing all memory systems with their reset functions and display names. + """ + + def default_reset(memory): + return memory.reset() + + def knowledge_reset(memory): + return self.reset_knowledge(memory) + + # Get knowledge for agents + agent_knowledges = [ + getattr(agent, "knowledge", None) + for agent in self.agents + if getattr(agent, "knowledge", None) is not None + ] + # Get knowledge for crew and agents + crew_knowledge = getattr(self, "knowledge", None) + crew_and_agent_knowledges = ( + [crew_knowledge] if crew_knowledge is not None else [] + ) + agent_knowledges + + return { + "short": { + "system": getattr(self, "_short_term_memory", None), + "reset": default_reset, + "name": "Short Term", + }, + "entity": { + "system": getattr(self, "_entity_memory", None), + "reset": default_reset, + "name": "Entity", + }, + "external": { + "system": getattr(self, "_external_memory", None), + "reset": default_reset, + "name": "External", + }, + "long": { + "system": getattr(self, "_long_term_memory", None), + "reset": default_reset, + "name": "Long Term", + }, + "kickoff_outputs": { + "system": getattr(self, "_task_output_handler", None), + "reset": default_reset, + "name": "Task Output", + }, + "knowledge": { + "system": crew_and_agent_knowledges + if crew_and_agent_knowledges + else None, + "reset": knowledge_reset, + "name": "Crew Knowledge and Agent Knowledge", + }, + "agent_knowledge": { + "system": agent_knowledges if agent_knowledges else None, + "reset": knowledge_reset, + "name": "Agent Knowledge", + }, + } + + def reset_knowledge(self, knowledges: List[Knowledge]) -> None: + """Reset crew and agent knowledge storage.""" + for ks in knowledges: + ks.reset() diff --git a/src/crewai/llm.py b/src/crewai/llm.py index c8c456297..440cbf903 100644 --- a/src/crewai/llm.py +++ b/src/crewai/llm.py @@ -5,8 +5,7 @@ import sys import threading import warnings from collections import defaultdict -from contextlib import contextmanager -from types import SimpleNamespace +from contextlib import contextmanager, redirect_stderr, redirect_stdout from typing import ( Any, DefaultDict, @@ -31,7 +30,6 @@ from crewai.utilities.events.llm_events import ( LLMCallType, LLMStreamChunkEvent, ) -from crewai.utilities.events.tool_usage_events import ToolExecutionErrorEvent with warnings.catch_warnings(): warnings.simplefilter("ignore", UserWarning) @@ -45,6 +43,9 @@ with warnings.catch_warnings(): from litellm.utils import supports_response_schema +import io +from typing import TextIO + from crewai.llms.base_llm import BaseLLM from crewai.utilities.events import crewai_event_bus from crewai.utilities.exceptions.context_window_exceeding_exception import ( @@ -54,12 +55,17 @@ from crewai.utilities.exceptions.context_window_exceeding_exception import ( load_dotenv() -class FilteredStream: - def __init__(self, original_stream): +class FilteredStream(io.TextIOBase): + _lock = None + + def __init__(self, original_stream: TextIO): self._original_stream = original_stream self._lock = threading.Lock() - def write(self, s) -> int: + def write(self, s: str) -> int: + if not self._lock: + self._lock = threading.Lock() + with self._lock: # Filter out extraneous messages from LiteLLM if ( @@ -214,15 +220,11 @@ def suppress_warnings(): ) # Redirect stdout and stderr - old_stdout = sys.stdout - old_stderr = sys.stderr - sys.stdout = FilteredStream(old_stdout) - sys.stderr = FilteredStream(old_stderr) - try: + with ( + redirect_stdout(FilteredStream(sys.stdout)), + redirect_stderr(FilteredStream(sys.stderr)), + ): yield - finally: - sys.stdout = old_stdout - sys.stderr = old_stderr class Delta(TypedDict): diff --git a/src/crewai/task.py b/src/crewai/task.py index e4a25f438..96e52cad5 100644 --- a/src/crewai/task.py +++ b/src/crewai/task.py @@ -2,7 +2,6 @@ import datetime import inspect import json import logging -import re import threading import uuid from concurrent.futures import Future @@ -41,6 +40,7 @@ from crewai.tasks.output_format import OutputFormat from crewai.tasks.task_output import TaskOutput from crewai.tools.base_tool import BaseTool from crewai.utilities.config import process_config +from crewai.utilities.constants import NOT_SPECIFIED from crewai.utilities.converter import Converter, convert_to_model from crewai.utilities.events import ( TaskCompletedEvent, @@ -97,7 +97,7 @@ class Task(BaseModel): ) context: Optional[List["Task"]] = Field( description="Other tasks that will have their output used as context for this task.", - default=None, + default=NOT_SPECIFIED, ) async_execution: Optional[bool] = Field( description="Whether the task should be executed asynchronously or not.", @@ -135,6 +135,10 @@ class Task(BaseModel): description="Whether the task should have a human review the final answer of the agent", default=False, ) + markdown: Optional[bool] = Field( + description="Whether the task should instruct the agent to return the final answer formatted in Markdown", + default=False, + ) converter_cls: Optional[Type[Converter]] = Field( description="A converter class used to export structured output", default=None, @@ -522,10 +526,14 @@ class Task(BaseModel): return guardrail_result def prompt(self) -> str: - """Prompt the task. - + """Generates the task prompt with optional markdown formatting. + + When the markdown attribute is True, instructions for formatting the + response in Markdown syntax will be added to the prompt. + Returns: - Prompt of the task. + str: The formatted prompt string containing the task description, + expected output, and optional markdown formatting instructions. """ tasks_slices = [self.description] @@ -533,6 +541,17 @@ class Task(BaseModel): expected_output=self.expected_output ) tasks_slices = [self.description, output] + + if self.markdown: + markdown_instruction = """Your final answer MUST be formatted in Markdown syntax. +Follow these guidelines: +- Use # for headers +- Use ** for bold text +- Use * for italic text +- Use - or * for bullet points +- Use `code` for inline code +- Use ```language for code blocks""" + tasks_slices.append(markdown_instruction) return "\n".join(tasks_slices) def interpolate_inputs_and_add_conversation_history( @@ -643,7 +662,7 @@ class Task(BaseModel): cloned_context = ( [task_mapping[context_task.key] for context_task in self.context] - if self.context + if isinstance(self.context, list) else None ) diff --git a/src/crewai/tasks/hallucination_guardrail.py b/src/crewai/tasks/hallucination_guardrail.py new file mode 100644 index 000000000..3079bc243 --- /dev/null +++ b/src/crewai/tasks/hallucination_guardrail.py @@ -0,0 +1,96 @@ +"""Hallucination Guardrail Placeholder for CrewAI. + +This is a no-op version of the HallucinationGuardrail for the open-source repository. + +Classes: + HallucinationGuardrail: Placeholder guardrail that validates task outputs. +""" + +from typing import Any, Optional, Tuple + +from crewai.llm import LLM +from crewai.tasks.task_output import TaskOutput +from crewai.utilities.logger import Logger + + +class HallucinationGuardrail: + """Placeholder for the HallucinationGuardrail feature. + + Attributes: + context: The reference context that outputs would be checked against. + llm: The language model that would be used for evaluation. + threshold: Optional minimum faithfulness score that would be required to pass. + tool_response: Optional tool response information that would be used in evaluation. + + Examples: + >>> # Basic usage with default verdict logic + >>> guardrail = HallucinationGuardrail( + ... context="AI helps with various tasks including analysis and generation.", + ... llm=agent.llm + ... ) + + >>> # With custom threshold for stricter validation + >>> strict_guardrail = HallucinationGuardrail( + ... context="Quantum computing uses qubits in superposition.", + ... llm=agent.llm, + ... threshold=8.0 # Would require score >= 8 to pass in enterprise version + ... ) + + >>> # With tool response for additional context + >>> guardrail_with_tools = HallucinationGuardrail( + ... context="The current weather data", + ... llm=agent.llm, + ... tool_response="Weather API returned: Temperature 22°C, Humidity 65%" + ... ) + """ + + def __init__( + self, + context: str, + llm: LLM, + threshold: Optional[float] = None, + tool_response: str = "", + ): + """Initialize the HallucinationGuardrail placeholder. + + Args: + context: The reference context that outputs would be checked against. + llm: The language model that would be used for evaluation. + threshold: Optional minimum faithfulness score that would be required to pass. + tool_response: Optional tool response information that would be used in evaluation. + """ + self.context = context + self.llm: LLM = llm + self.threshold = threshold + self.tool_response = tool_response + self._logger = Logger(verbose=True) + self._logger.log( + "warning", + """Hallucination detection is a no-op in open source, use it for free at https://app.crewai.com\n""", + color="red", + ) + + @property + def description(self) -> str: + """Generate a description of this guardrail for event logging.""" + return "HallucinationGuardrail (no-op)" + + def __call__(self, task_output: TaskOutput) -> Tuple[bool, Any]: + """Validate a task output against hallucination criteria. + + In the open source, this method always returns that the output is valid. + + Args: + task_output: The output to be validated. + + Returns: + A tuple containing: + - True + - The raw task output + """ + self._logger.log( + "warning", + "Premium hallucination detection skipped (use for free at https://app.crewai.com)\n", + color="red", + ) + return True, task_output.raw diff --git a/src/crewai/telemetry/telemetry.py b/src/crewai/telemetry/telemetry.py index 142cafb2a..ffd78d28e 100644 --- a/src/crewai/telemetry/telemetry.py +++ b/src/crewai/telemetry/telemetry.py @@ -9,6 +9,19 @@ import warnings from contextlib import contextmanager from importlib.metadata import version from typing import TYPE_CHECKING, Any, Optional +import threading + +from opentelemetry import trace +from opentelemetry.exporter.otlp.proto.http.trace_exporter import ( + OTLPSpanExporter, +) +from opentelemetry.sdk.resources import SERVICE_NAME, Resource +from opentelemetry.sdk.trace import TracerProvider +from opentelemetry.sdk.trace.export import ( + BatchSpanProcessor, + SpanExportResult, +) +from opentelemetry.trace import Span, Status, StatusCode from crewai.telemetry.constants import ( CREWAI_TELEMETRY_BASE_URL, @@ -25,18 +38,6 @@ def suppress_warnings(): yield -from opentelemetry import trace # noqa: E402 -from opentelemetry.exporter.otlp.proto.http.trace_exporter import ( - OTLPSpanExporter, # noqa: E402 -) -from opentelemetry.sdk.resources import SERVICE_NAME, Resource # noqa: E402 -from opentelemetry.sdk.trace import TracerProvider # noqa: E402 -from opentelemetry.sdk.trace.export import ( # noqa: E402 - BatchSpanProcessor, - SpanExportResult, -) -from opentelemetry.trace import Span, Status, StatusCode # noqa: E402 - if TYPE_CHECKING: from crewai.crew import Crew from crewai.task import Task @@ -64,7 +65,17 @@ class Telemetry: attribute in the Crew class. """ - def __init__(self): + _instance = None + _lock = threading.Lock() + + def __new__(cls): + if cls._instance is None: + with cls._lock: + if cls._instance is None: + cls._instance = super(Telemetry, cls).__new__(cls) + return cls._instance + + def __init__(self) -> None: self.ready: bool = False self.trace_set: bool = False @@ -232,7 +243,7 @@ class Telemetry: "agent_key": task.agent.key if task.agent else None, "context": ( [task.description for task in task.context] - if task.context + if isinstance(task.context, list) else None ), "tools_names": [ @@ -748,7 +759,7 @@ class Telemetry: "agent_key": task.agent.key if task.agent else None, "context": ( [task.description for task in task.context] - if task.context + if isinstance(task.context, list) else None ), "tools_names": [ diff --git a/src/crewai/translations/en.json b/src/crewai/translations/en.json index c220e2279..d80ff103e 100644 --- a/src/crewai/translations/en.json +++ b/src/crewai/translations/en.json @@ -27,7 +27,9 @@ "feedback_instructions": "User feedback: {feedback}\nInstructions: Use this feedback to enhance the next output iteration.\nNote: Do not respond or add commentary.", "lite_agent_system_prompt_with_tools": "You are {role}. {backstory}\nYour personal goal is: {goal}\n\nYou ONLY have access to the following tools, and should NEVER make up tools that are not listed here:\n\n{tools}\n\nIMPORTANT: Use the following format in your response:\n\n```\nThought: you should always think about what to do\nAction: the action to take, only one name of [{tool_names}], just the name, exactly as it's written.\nAction Input: the input to the action, just a simple JSON object, enclosed in curly braces, using \" to wrap keys and values.\nObservation: the result of the action\n```\n\nOnce all necessary information is gathered, return the following format:\n\n```\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n```", "lite_agent_system_prompt_without_tools": "You are {role}. {backstory}\nYour personal goal is: {goal}\n\nTo give my best complete final answer to the task respond using the exact following format:\n\nThought: I now can give a great answer\nFinal Answer: Your final answer must be the great and the most complete as possible, it must be outcome described.\n\nI MUST use these formats, my job depends on it!", - "lite_agent_response_format": "\nIMPORTANT: Your final answer MUST contain all the information requested in the following format: {response_format}\n\nIMPORTANT: Ensure the final output does not include any code block markers like ```json or ```python." + "lite_agent_response_format": "\nIMPORTANT: Your final answer MUST contain all the information requested in the following format: {response_format}\n\nIMPORTANT: Ensure the final output does not include any code block markers like ```json or ```python.", + "knowledge_search_query": "The original query is: {task_prompt}.", + "knowledge_search_query_system_prompt": "Your goal is to rewrite the user query so that it is optimized for retrieval from a vector database. Consider how the query will be used to find relevant documents, and aim to make it more specific and context-aware. \n\n Do not include any other text than the rewritten query, especially any preamble or postamble and only add expected output format if its relevant to the rewritten query. \n\n Focus on the key words of the intended task and to retrieve the most relevant information. \n\n There will be some extra context provided that might need to be removed such as expected_output formats structured_outputs and other instructions." }, "errors": { "force_final_answer_error": "You can't keep going, here is the best final answer you generated:\n\n {formatted_answer}", @@ -49,5 +51,11 @@ "description": "See image to understand its content, you can optionally ask a question about the image", "default_action": "Please provide a detailed description of this image, including all visual elements, context, and any notable details you can observe." } + }, + "reasoning": { + "initial_plan": "You are {role}, a professional with the following background: {backstory}\n\nYour primary goal is: {goal}\n\nAs {role}, you are creating a strategic plan for a task that requires your expertise and unique perspective.", + "refine_plan": "You are {role}, a professional with the following background: {backstory}\n\nYour primary goal is: {goal}\n\nAs {role}, you are refining a strategic plan for a task that requires your expertise and unique perspective.", + "create_plan_prompt": "You are {role} with this background: {backstory}\n\nYour primary goal is: {goal}\n\nYou have been assigned the following task:\n{description}\n\nExpected output:\n{expected_output}\n\nAvailable tools: {tools}\n\nBefore executing this task, create a detailed plan that leverages your expertise as {role} and outlines:\n1. Your understanding of the task from your professional perspective\n2. The key steps you'll take to complete it, drawing on your background and skills\n3. How you'll approach any challenges that might arise, considering your expertise\n4. How you'll strategically use the available tools based on your experience\n5. The expected outcome and how it aligns with your goal\n\nAfter creating your plan, assess whether you feel ready to execute the task.\nConclude with one of these statements:\n- \"READY: I am ready to execute the task.\"\n- \"NOT READY: I need to refine my plan because [specific reason].\"", + "refine_plan_prompt": "You are {role} with this background: {backstory}\n\nYour primary goal is: {goal}\n\nYou created the following plan for this task:\n{current_plan}\n\nHowever, you indicated that you're not ready to execute the task yet.\n\nPlease refine your plan further, drawing on your expertise as {role} to address any gaps or uncertainties.\n\nAfter refining your plan, assess whether you feel ready to execute the task.\nConclude with one of these statements:\n- \"READY: I am ready to execute the task.\"\n- \"NOT READY: I need to refine my plan further because [specific reason].\"" } } diff --git a/src/crewai/utilities/agent_utils.py b/src/crewai/utilities/agent_utils.py index 8af665140..e580c26ce 100644 --- a/src/crewai/utilities/agent_utils.py +++ b/src/crewai/utilities/agent_utils.py @@ -16,6 +16,7 @@ from crewai.tools.base_tool import BaseTool from crewai.tools.structured_tool import CrewStructuredTool from crewai.tools.tool_types import ToolResult from crewai.utilities import I18N, Printer +from crewai.utilities.errors import AgentRepositoryError from crewai.utilities.exceptions.context_window_exceeding_exception import ( LLMContextLengthExceededException, ) @@ -428,3 +429,41 @@ def show_agent_logs( printer.print( content=f"\033[95m## Final Answer:\033[00m \033[92m\n{formatted_answer.output}\033[00m\n\n" ) + + +def load_agent_from_repository(from_repository: str) -> Dict[str, Any]: + attributes: Dict[str, Any] = {} + if from_repository: + import importlib + + from crewai.cli.authentication.token import get_auth_token + from crewai.cli.plus_api import PlusAPI + + client = PlusAPI(api_key=get_auth_token()) + response = client.get_agent(from_repository) + if response.status_code == 404: + raise AgentRepositoryError( + f"Agent {from_repository} does not exist, make sure the name is correct or the agent is available on your organization" + ) + + if response.status_code != 200: + raise AgentRepositoryError( + f"Agent {from_repository} could not be loaded: {response.text}" + ) + + agent = response.json() + for key, value in agent.items(): + if key == "tools": + attributes[key] = [] + for tool in value: + try: + module = importlib.import_module("crewai_tools") + tool_class = getattr(module, tool["name"]) + attributes[key].append(tool_class()) + except Exception as e: + raise AgentRepositoryError( + f"Tool {tool['name']} could not be loaded: {e}" + ) from e + else: + attributes[key] = value + return attributes diff --git a/src/crewai/utilities/constants.py b/src/crewai/utilities/constants.py index 9ff10f1d4..4dbace270 100644 --- a/src/crewai/utilities/constants.py +++ b/src/crewai/utilities/constants.py @@ -5,3 +5,14 @@ KNOWLEDGE_DIRECTORY = "knowledge" MAX_LLM_RETRY = 3 MAX_FILE_NAME_LENGTH = 255 EMITTER_COLOR = "bold_blue" + + +class _NotSpecified: + def __repr__(self): + return "NOT_SPECIFIED" + + +# Sentinel value used to detect when no value has been explicitly provided. +# Unlike `None`, which might be a valid value from the user, `NOT_SPECIFIED` allows +# us to distinguish between "not passed at all" and "explicitly passed None" or "[]". +NOT_SPECIFIED = _NotSpecified() diff --git a/src/crewai/utilities/errors.py b/src/crewai/utilities/errors.py index f673c0600..16c59321e 100644 --- a/src/crewai/utilities/errors.py +++ b/src/crewai/utilities/errors.py @@ -1,4 +1,5 @@ """Error message definitions for CrewAI database operations.""" + from typing import Optional @@ -37,3 +38,9 @@ class DatabaseError: The formatted error message """ return template.format(str(error)) + + +class AgentRepositoryError(Exception): + """Exception raised when an agent repository is not found.""" + + ... diff --git a/src/crewai/utilities/evaluators/crew_evaluator_handler.py b/src/crewai/utilities/evaluators/crew_evaluator_handler.py index 984dcf97f..70d762956 100644 --- a/src/crewai/utilities/evaluators/crew_evaluator_handler.py +++ b/src/crewai/utilities/evaluators/crew_evaluator_handler.py @@ -9,7 +9,8 @@ from crewai.agent import Agent from crewai.llm import BaseLLM from crewai.task import Task from crewai.tasks.task_output import TaskOutput -from crewai.telemetry import Telemetry +from crewai.utilities.events import crewai_event_bus +from crewai.utilities.events.crew_events import CrewTestResultEvent class TaskEvaluationPydanticOutput(BaseModel): @@ -36,7 +37,6 @@ class CrewEvaluator: def __init__(self, crew, eval_llm: InstanceOf[BaseLLM]): self.crew = crew self.llm = eval_llm - self._telemetry = Telemetry() self._setup_for_evaluating() def _setup_for_evaluating(self) -> None: @@ -178,11 +178,15 @@ class CrewEvaluator: evaluation_result = evaluation_task.execute_sync() if isinstance(evaluation_result.pydantic, TaskEvaluationPydanticOutput): - self._test_result_span = self._telemetry.individual_test_result_span( + crewai_event_bus.emit( self.crew, - evaluation_result.pydantic.quality, - current_task.execution_duration, - self.llm.model, + CrewTestResultEvent( + quality=evaluation_result.pydantic.quality, + execution_duration=current_task.execution_duration, + model=self.llm.model, + crew_name=self.crew.name, + crew=self.crew, + ), ) self.tasks_scores[self.iteration].append(evaluation_result.pydantic.quality) self.run_execution_times[self.iteration].append( diff --git a/src/crewai/utilities/events/crew_events.py b/src/crewai/utilities/events/crew_events.py index d73cd95d3..103f3ecd3 100644 --- a/src/crewai/utilities/events/crew_events.py +++ b/src/crewai/utilities/events/crew_events.py @@ -100,3 +100,12 @@ class CrewTestFailedEvent(CrewBaseEvent): error: str type: str = "crew_test_failed" + + +class CrewTestResultEvent(CrewBaseEvent): + """Event emitted when a crew test result is available""" + + quality: float + execution_duration: float + model: str + type: str = "crew_test_result" diff --git a/src/crewai/utilities/events/event_listener.py b/src/crewai/utilities/events/event_listener.py index 3b837d842..e147e9606 100644 --- a/src/crewai/utilities/events/event_listener.py +++ b/src/crewai/utilities/events/event_listener.py @@ -8,6 +8,14 @@ from crewai.telemetry.telemetry import Telemetry from crewai.utilities import Logger from crewai.utilities.constants import EMITTER_COLOR from crewai.utilities.events.base_event_listener import BaseEventListener +from crewai.utilities.events.knowledge_events import ( + KnowledgeQueryCompletedEvent, + KnowledgeQueryFailedEvent, + KnowledgeQueryStartedEvent, + KnowledgeRetrievalCompletedEvent, + KnowledgeRetrievalStartedEvent, + KnowledgeSearchQueryFailedEvent, +) from crewai.utilities.events.llm_events import ( LLMCallCompletedEvent, LLMCallFailedEvent, @@ -29,6 +37,7 @@ from .crew_events import ( CrewKickoffStartedEvent, CrewTestCompletedEvent, CrewTestFailedEvent, + CrewTestResultEvent, CrewTestStartedEvent, CrewTrainCompletedEvent, CrewTrainFailedEvent, @@ -48,6 +57,11 @@ from .tool_usage_events import ( ToolUsageFinishedEvent, ToolUsageStartedEvent, ) +from .reasoning_events import ( + AgentReasoningStartedEvent, + AgentReasoningCompletedEvent, + AgentReasoningFailedEvent, +) class EventListener(BaseEventListener): @@ -57,6 +71,8 @@ class EventListener(BaseEventListener): execution_spans: Dict[Task, Any] = Field(default_factory=dict) next_chunk = 0 text_stream = StringIO() + knowledge_retrieval_in_progress = False + knowledge_query_in_progress = False def __new__(cls): if cls._instance is None: @@ -119,6 +135,15 @@ class EventListener(BaseEventListener): def on_crew_train_failed(source, event: CrewTrainFailedEvent): self.formatter.handle_crew_train_failed(event.crew_name or "Crew") + @crewai_event_bus.on(CrewTestResultEvent) + def on_crew_test_result(source, event: CrewTestResultEvent): + self._telemetry.individual_test_result_span( + source.crew, + event.quality, + int(event.execution_duration), + event.model, + ) + # ----------- TASK EVENTS ----------- @crewai_event_bus.on(TaskStartedEvent) @@ -342,5 +367,84 @@ class EventListener(BaseEventListener): def on_crew_test_failed(source, event: CrewTestFailedEvent): self.formatter.handle_crew_test_failed(event.crew_name or "Crew") + @crewai_event_bus.on(KnowledgeRetrievalStartedEvent) + def on_knowledge_retrieval_started( + source, event: KnowledgeRetrievalStartedEvent + ): + if self.knowledge_retrieval_in_progress: + return + + self.knowledge_retrieval_in_progress = True + + self.formatter.handle_knowledge_retrieval_started( + self.formatter.current_agent_branch, + self.formatter.current_crew_tree, + ) + + @crewai_event_bus.on(KnowledgeRetrievalCompletedEvent) + def on_knowledge_retrieval_completed( + source, event: KnowledgeRetrievalCompletedEvent + ): + if not self.knowledge_retrieval_in_progress: + return + + self.knowledge_retrieval_in_progress = False + self.formatter.handle_knowledge_retrieval_completed( + self.formatter.current_agent_branch, + self.formatter.current_crew_tree, + event.retrieved_knowledge, + ) + + @crewai_event_bus.on(KnowledgeQueryStartedEvent) + def on_knowledge_query_started(source, event: KnowledgeQueryStartedEvent): + pass + + @crewai_event_bus.on(KnowledgeQueryFailedEvent) + def on_knowledge_query_failed(source, event: KnowledgeQueryFailedEvent): + self.formatter.handle_knowledge_query_failed( + self.formatter.current_agent_branch, + event.error, + self.formatter.current_crew_tree, + ) + + @crewai_event_bus.on(KnowledgeQueryCompletedEvent) + def on_knowledge_query_completed(source, event: KnowledgeQueryCompletedEvent): + pass + + @crewai_event_bus.on(KnowledgeSearchQueryFailedEvent) + def on_knowledge_search_query_failed( + source, event: KnowledgeSearchQueryFailedEvent + ): + self.formatter.handle_knowledge_search_query_failed( + self.formatter.current_agent_branch, + event.error, + self.formatter.current_crew_tree, + ) + + # ----------- REASONING EVENTS ----------- + + @crewai_event_bus.on(AgentReasoningStartedEvent) + def on_agent_reasoning_started(source, event: AgentReasoningStartedEvent): + self.formatter.handle_reasoning_started( + self.formatter.current_agent_branch, + event.attempt, + self.formatter.current_crew_tree, + ) + + @crewai_event_bus.on(AgentReasoningCompletedEvent) + def on_agent_reasoning_completed(source, event: AgentReasoningCompletedEvent): + self.formatter.handle_reasoning_completed( + event.plan, + event.ready, + self.formatter.current_crew_tree, + ) + + @crewai_event_bus.on(AgentReasoningFailedEvent) + def on_agent_reasoning_failed(source, event: AgentReasoningFailedEvent): + self.formatter.handle_reasoning_failed( + event.error, + self.formatter.current_crew_tree, + ) + event_listener = EventListener() diff --git a/src/crewai/utilities/events/event_types.py b/src/crewai/utilities/events/event_types.py index 4e0673758..46f289caf 100644 --- a/src/crewai/utilities/events/event_types.py +++ b/src/crewai/utilities/events/event_types.py @@ -43,6 +43,19 @@ from .tool_usage_events import ( ToolUsageFinishedEvent, ToolUsageStartedEvent, ) +from .reasoning_events import ( + AgentReasoningStartedEvent, + AgentReasoningCompletedEvent, + AgentReasoningFailedEvent, +) +from .knowledge_events import ( + KnowledgeRetrievalStartedEvent, + KnowledgeRetrievalCompletedEvent, + KnowledgeQueryStartedEvent, + KnowledgeQueryCompletedEvent, + KnowledgeQueryFailedEvent, + KnowledgeSearchQueryFailedEvent, +) EventTypes = Union[ CrewKickoffStartedEvent, @@ -74,4 +87,13 @@ EventTypes = Union[ LLMStreamChunkEvent, LLMGuardrailStartedEvent, LLMGuardrailCompletedEvent, + AgentReasoningStartedEvent, + AgentReasoningCompletedEvent, + AgentReasoningFailedEvent, + KnowledgeRetrievalStartedEvent, + KnowledgeRetrievalCompletedEvent, + KnowledgeQueryStartedEvent, + KnowledgeQueryCompletedEvent, + KnowledgeQueryFailedEvent, + KnowledgeSearchQueryFailedEvent, ] diff --git a/src/crewai/utilities/events/knowledge_events.py b/src/crewai/utilities/events/knowledge_events.py new file mode 100644 index 000000000..e512ca575 --- /dev/null +++ b/src/crewai/utilities/events/knowledge_events.py @@ -0,0 +1,56 @@ +from typing import TYPE_CHECKING, Any + +from crewai.agents.agent_builder.base_agent import BaseAgent +from crewai.utilities.events.base_events import BaseEvent + +if TYPE_CHECKING: + from crewai.agents.agent_builder.base_agent import BaseAgent + + +class KnowledgeRetrievalStartedEvent(BaseEvent): + """Event emitted when a knowledge retrieval is started.""" + + type: str = "knowledge_search_query_started" + agent: BaseAgent + + +class KnowledgeRetrievalCompletedEvent(BaseEvent): + """Event emitted when a knowledge retrieval is completed.""" + + query: str + type: str = "knowledge_search_query_completed" + agent: BaseAgent + retrieved_knowledge: Any + + +class KnowledgeQueryStartedEvent(BaseEvent): + """Event emitted when a knowledge query is started.""" + + task_prompt: str + type: str = "knowledge_query_started" + agent: BaseAgent + + +class KnowledgeQueryFailedEvent(BaseEvent): + """Event emitted when a knowledge query fails.""" + + type: str = "knowledge_query_failed" + agent: BaseAgent + error: str + + +class KnowledgeQueryCompletedEvent(BaseEvent): + """Event emitted when a knowledge query is completed.""" + + query: str + type: str = "knowledge_query_completed" + agent: BaseAgent + + +class KnowledgeSearchQueryFailedEvent(BaseEvent): + """Event emitted when a knowledge search query fails.""" + + query: str + type: str = "knowledge_search_query_failed" + agent: BaseAgent + error: str diff --git a/src/crewai/utilities/events/llm_guardrail_events.py b/src/crewai/utilities/events/llm_guardrail_events.py index a484c187a..01831e12c 100644 --- a/src/crewai/utilities/events/llm_guardrail_events.py +++ b/src/crewai/utilities/events/llm_guardrail_events.py @@ -19,10 +19,13 @@ class LLMGuardrailStartedEvent(BaseEvent): from inspect import getsource from crewai.tasks.llm_guardrail import LLMGuardrail + from crewai.tasks.hallucination_guardrail import HallucinationGuardrail super().__init__(**data) - if isinstance(self.guardrail, LLMGuardrail): + if isinstance(self.guardrail, LLMGuardrail) or isinstance( + self.guardrail, HallucinationGuardrail + ): self.guardrail = self.guardrail.description.strip() elif isinstance(self.guardrail, Callable): self.guardrail = getsource(self.guardrail).strip() diff --git a/src/crewai/utilities/events/reasoning_events.py b/src/crewai/utilities/events/reasoning_events.py new file mode 100644 index 000000000..03d484de3 --- /dev/null +++ b/src/crewai/utilities/events/reasoning_events.py @@ -0,0 +1,31 @@ +from crewai.utilities.events.base_events import BaseEvent + + +class AgentReasoningStartedEvent(BaseEvent): + """Event emitted when an agent starts reasoning about a task.""" + + type: str = "agent_reasoning_started" + agent_role: str + task_id: str + attempt: int = 1 # The current reasoning/refinement attempt + + +class AgentReasoningCompletedEvent(BaseEvent): + """Event emitted when an agent finishes its reasoning process.""" + + type: str = "agent_reasoning_completed" + agent_role: str + task_id: str + plan: str + ready: bool + attempt: int = 1 + + +class AgentReasoningFailedEvent(BaseEvent): + """Event emitted when the reasoning process fails.""" + + type: str = "agent_reasoning_failed" + agent_role: str + task_id: str + error: str + attempt: int = 1 \ No newline at end of file diff --git a/src/crewai/utilities/events/utils/console_formatter.py b/src/crewai/utilities/events/utils/console_formatter.py index c274a6413..72a02b2f7 100644 --- a/src/crewai/utilities/events/utils/console_formatter.py +++ b/src/crewai/utilities/events/utils/console_formatter.py @@ -4,6 +4,7 @@ from rich.console import Console from rich.panel import Panel from rich.text import Text from rich.tree import Tree +from rich.live import Live class ConsoleFormatter: @@ -15,10 +16,17 @@ class ConsoleFormatter: current_method_branch: Optional[Tree] = None current_lite_agent_branch: Optional[Tree] = None tool_usage_counts: Dict[str, int] = {} + current_reasoning_branch: Optional[Tree] = None # Track reasoning status def __init__(self, verbose: bool = False): self.console = Console(width=None) self.verbose = verbose + # Live instance to dynamically update a Tree renderable (e.g. the Crew tree) + # When multiple Tree objects are printed sequentially we reuse this Live + # instance so the previous render is replaced instead of writing a new one. + # Once any non-Tree renderable is printed we stop the Live session so the + # final Tree persists on the terminal. + self._live: Optional[Live] = None def create_panel(self, content: Text, title: str, style: str = "blue") -> Panel: """Create a standardized panel with consistent styling.""" @@ -59,7 +67,7 @@ class ConsoleFormatter: label.append(f"{prefix} ", style=f"{style} bold") label.append(name, style=style) if status: - label.append("\n Status: ", style="white") + label.append("\nStatus: ", style="white") label.append(status, style=f"{style} bold") tree.label = label @@ -68,7 +76,46 @@ class ConsoleFormatter: return parent.add(Text(text, style=style)) def print(self, *args, **kwargs) -> None: - """Print to console with consistent formatting if verbose is enabled.""" + """Custom print that replaces consecutive Tree renders. + + * If the argument is a single ``Tree`` instance, we either start a + ``Live`` session (first tree) or update the existing one (subsequent + trees). This results in the tree being rendered in-place instead of + being appended repeatedly to the log. + + * A blank call (no positional arguments) is ignored while a Live + session is active so it does not prematurely terminate the tree + rendering. + + * Any other renderable will terminate the Live session (if one is + active) so the last tree stays on screen and the new content is + printed normally. + """ + + # Case 1: updating / starting live Tree rendering + if len(args) == 1 and isinstance(args[0], Tree): + tree = args[0] + + if not self._live: + # Start a new Live session for the first tree + self._live = Live(tree, console=self.console, refresh_per_second=4) + self._live.start() + else: + # Update existing Live session + self._live.update(tree, refresh=True) + return # Nothing else to do + + # Case 2: blank line while a live session is running – ignore so we + # don't break the in-place rendering behaviour + if len(args) == 0 and self._live: + return + + # Case 3: printing something other than a Tree → terminate live session + if self._live: + self._live.stop() + self._live = None + + # Finally, pass through to the regular Console.print implementation self.console.print(*args, **kwargs) def print_panel( @@ -156,7 +203,7 @@ class ConsoleFormatter: task_content = Text() task_content.append(f"📋 Task: {task_id}", style="yellow bold") - task_content.append("\n Status: ", style="white") + task_content.append("\nStatus: ", style="white") task_content.append("Executing Task...", style="yellow dim") task_branch = None @@ -196,11 +243,17 @@ class ConsoleFormatter: # Update tree label for branch in crew_tree.children: if str(task_id) in str(branch.label): + # Build label without introducing stray blank lines task_content = Text() + # First line: Task ID task_content.append(f"📋 Task: {task_id}", style=f"{style} bold") - task_content.append("\n Assigned to: ", style="white") + + # Second line: Assigned to + task_content.append("\nAssigned to: ", style="white") task_content.append(agent_role, style=style) - task_content.append("\n Status: ", style="white") + + # Third line: Status + task_content.append("Status: ", style="white") task_content.append(status_text, style=f"{style} bold") branch.label = task_content self.print(crew_tree) @@ -219,18 +272,16 @@ class ConsoleFormatter: if not self.verbose or not task_branch or not crew_tree: return None - agent_branch = task_branch.add("") - self.update_tree_label( - agent_branch, "🤖 Agent:", agent_role, "green", "In Progress" - ) + # Instead of creating a separate Agent node, we treat the task branch + # itself as the logical agent branch so that Reasoning/Tool nodes are + # nested under the task without an extra visual level. - self.print(crew_tree) - self.print() + # Store the task branch as the current_agent_branch for future nesting. + self.current_agent_branch = task_branch - # Set the current_agent_branch attribute directly - self.current_agent_branch = agent_branch - - return agent_branch + # No additional tree modification needed; return the task branch so + # caller logic remains unchanged. + return task_branch def update_agent_status( self, @@ -240,19 +291,10 @@ class ConsoleFormatter: status: str = "completed", ) -> None: """Update agent status in the tree.""" - if not self.verbose or agent_branch is None or crew_tree is None: - return - - self.update_tree_label( - agent_branch, - "🤖 Agent:", - agent_role, - "green", - "✅ Completed" if status == "completed" else "❌ Failed", - ) - - self.print(crew_tree) - self.print() + # We no longer render a separate agent branch, so this method simply + # updates the stored branch reference (already the task branch) without + # altering the tree. Keeping it a no-op avoids duplicate status lines. + return def create_flow_tree(self, flow_name: str, flow_id: str) -> Optional[Tree]: """Create and initialize a flow tree.""" @@ -265,7 +307,7 @@ class ConsoleFormatter: flow_label = Text() flow_label.append("🌊 Flow: ", style="blue bold") flow_label.append(flow_name, style="blue") - flow_label.append("\n ID: ", style="white") + flow_label.append("\nID: ", style="white") flow_label.append(flow_id, style="blue") flow_tree = Tree(flow_label) @@ -280,7 +322,7 @@ class ConsoleFormatter: flow_label = Text() flow_label.append("🌊 Flow: ", style="blue bold") flow_label.append(flow_name, style="blue") - flow_label.append("\n ID: ", style="white") + flow_label.append("\nID: ", style="white") flow_label.append(flow_id, style="blue") flow_tree.label = flow_label @@ -394,12 +436,22 @@ class ConsoleFormatter: if not self.verbose: return None - # Use LiteAgent branch if available, otherwise use regular agent branch - branch_to_use = self.current_lite_agent_branch or agent_branch - tree_to_use = branch_to_use or crew_tree + # Parent for tool usage: LiteAgent > Agent > Task + branch_to_use = ( + self.current_lite_agent_branch + or agent_branch + or self.current_task_branch + ) + + # Render full crew tree when available for consistent live updates + tree_to_use = self.current_crew_tree or crew_tree or branch_to_use if branch_to_use is None or tree_to_use is None: - return None + # If we don't have a valid branch, default to crew_tree if provided + if crew_tree is not None: + branch_to_use = tree_to_use = crew_tree + else: + return None # Update tool usage count self.tool_usage_counts[tool_name] = self.tool_usage_counts.get(tool_name, 0) + 1 @@ -418,10 +470,9 @@ class ConsoleFormatter: "yellow", ) - # Only print if this is a new tool usage - if tool_branch not in branch_to_use.children: - self.print(tree_to_use) - self.print() + # Print updated tree immediately + self.print(tree_to_use) + self.print() return tool_branch @@ -435,8 +486,8 @@ class ConsoleFormatter: if not self.verbose or tool_branch is None: return - # Use LiteAgent branch if available, otherwise use crew tree - tree_to_use = self.current_lite_agent_branch or crew_tree + # Decide which tree to render: prefer full crew tree, else parent branch + tree_to_use = self.current_crew_tree or crew_tree or self.current_task_branch if tree_to_use is None: return @@ -467,8 +518,8 @@ class ConsoleFormatter: if not self.verbose: return - # Use LiteAgent branch if available, otherwise use crew tree - tree_to_use = self.current_lite_agent_branch or crew_tree + # Decide which tree to render: prefer full crew tree, else parent branch + tree_to_use = self.current_crew_tree or crew_tree or self.current_task_branch if tool_branch: self.update_tree_label( @@ -496,12 +547,22 @@ class ConsoleFormatter: if not self.verbose: return None - # Use LiteAgent branch if available, otherwise use regular agent branch - branch_to_use = self.current_lite_agent_branch or agent_branch - tree_to_use = branch_to_use or crew_tree + # Parent for tool usage: LiteAgent > Agent > Task + branch_to_use = ( + self.current_lite_agent_branch + or agent_branch + or self.current_task_branch + ) + + # Render full crew tree when available for consistent live updates + tree_to_use = self.current_crew_tree or crew_tree or branch_to_use if branch_to_use is None or tree_to_use is None: - return None + # If we don't have a valid branch, default to crew_tree if provided + if crew_tree is not None: + branch_to_use = tree_to_use = crew_tree + else: + return None # Only add thinking status if we don't have a current tool branch if self.current_tool_branch is None: @@ -523,24 +584,33 @@ class ConsoleFormatter: if not self.verbose or tool_branch is None: return - # Use LiteAgent branch if available, otherwise use regular agent branch - branch_to_use = self.current_lite_agent_branch or agent_branch - tree_to_use = branch_to_use or crew_tree - - if branch_to_use is None or tree_to_use is None: + # Decide which tree to render: prefer full crew tree, else parent branch + tree_to_use = self.current_crew_tree or crew_tree or self.current_task_branch + if tree_to_use is None: return - # Remove the thinking status node when complete, but only if it exists + # Remove the thinking status node when complete if "Thinking" in str(tool_branch.label): - try: - # Check if the node is actually in the children list - if tool_branch in branch_to_use.children: - branch_to_use.children.remove(tool_branch) - self.print(tree_to_use) - self.print() - except Exception: - # If any error occurs during removal, just continue without removing - pass + parents = [ + self.current_lite_agent_branch, + self.current_agent_branch, + self.current_task_branch, + tree_to_use, + ] + removed = False + for parent in parents: + if isinstance(parent, Tree) and tool_branch in parent.children: + parent.children.remove(tool_branch) + removed = True + break + + # Clear pointer if we just removed the current_tool_branch + if self.current_tool_branch is tool_branch: + self.current_tool_branch = None + + if removed: + self.print(tree_to_use) + self.print() def handle_llm_call_failed( self, tool_branch: Optional[Tree], error: str, crew_tree: Optional[Tree] @@ -549,8 +619,8 @@ class ConsoleFormatter: if not self.verbose: return - # Use LiteAgent branch if available, otherwise use crew tree - tree_to_use = self.current_lite_agent_branch or crew_tree + # Decide which tree to render: prefer full crew tree, else parent branch + tree_to_use = self.current_crew_tree or crew_tree or self.current_task_branch # Update tool branch if it exists if tool_branch: @@ -592,7 +662,7 @@ class ConsoleFormatter: test_label = Text() test_label.append("🧪 Test: ", style="blue bold") test_label.append(crew_name or "Crew", style="blue") - test_label.append("\n Status: ", style="white") + test_label.append("\nStatus: ", style="white") test_label.append("In Progress", style="yellow") test_tree = Tree(test_label) @@ -614,7 +684,7 @@ class ConsoleFormatter: test_label = Text() test_label.append("✅ Test: ", style="green bold") test_label.append(crew_name or "Crew", style="green") - test_label.append("\n Status: ", style="white") + test_label.append("\nStatus: ", style="white") test_label.append("Completed", style="green bold") flow_tree.label = test_label @@ -703,7 +773,7 @@ class ConsoleFormatter: lite_agent_label = Text() lite_agent_label.append("🤖 LiteAgent: ", style="cyan bold") lite_agent_label.append(lite_agent_role, style="cyan") - lite_agent_label.append("\n Status: ", style="white") + lite_agent_label.append("\nStatus: ", style="white") lite_agent_label.append("In Progress", style="yellow") lite_agent_tree = Tree(lite_agent_label) @@ -742,7 +812,7 @@ class ConsoleFormatter: lite_agent_label = Text() lite_agent_label.append(f"{prefix} ", style=f"{style} bold") lite_agent_label.append(lite_agent_role, style=style) - lite_agent_label.append("\n Status: ", style="white") + lite_agent_label.append("Status: ", style="white") lite_agent_label.append(status_text, style=f"{style} bold") lite_agent_branch.label = lite_agent_label @@ -783,3 +853,323 @@ class ConsoleFormatter: self.update_lite_agent_status( self.current_lite_agent_branch, lite_agent_role, status, **fields ) + + def handle_knowledge_retrieval_started( + self, + agent_branch: Optional[Tree], + crew_tree: Optional[Tree], + ) -> Optional[Tree]: + """Handle knowledge retrieval started event.""" + if not self.verbose: + return None + + branch_to_use = agent_branch or self.current_lite_agent_branch + tree_to_use = branch_to_use or crew_tree + + if branch_to_use is None or tree_to_use is None: + # If we don't have a valid branch, default to crew_tree if provided + if crew_tree is not None: + branch_to_use = tree_to_use = crew_tree + else: + return None + + knowledge_branch = branch_to_use.add("") + self.update_tree_label( + knowledge_branch, "🔍", "Knowledge Retrieval Started", "blue" + ) + + self.print(tree_to_use) + self.print() + return knowledge_branch + + def handle_knowledge_retrieval_completed( + self, + agent_branch: Optional[Tree], + crew_tree: Optional[Tree], + retrieved_knowledge: Any, + ) -> None: + """Handle knowledge retrieval completed event.""" + if not self.verbose: + return None + + branch_to_use = self.current_lite_agent_branch or agent_branch + tree_to_use = branch_to_use or crew_tree + + if branch_to_use is None and tree_to_use is not None: + branch_to_use = tree_to_use + + if branch_to_use is None or tree_to_use is None: + if retrieved_knowledge: + knowledge_text = str(retrieved_knowledge) + if len(knowledge_text) > 500: + knowledge_text = knowledge_text[:497] + "..." + + knowledge_panel = Panel( + Text(knowledge_text, style="white"), + title="📚 Retrieved Knowledge", + border_style="green", + padding=(1, 2), + ) + self.print(knowledge_panel) + self.print() + return None + + knowledge_branch_found = False + for child in branch_to_use.children: + if "Knowledge Retrieval Started" in str(child.label): + self.update_tree_label( + child, "✅", "Knowledge Retrieval Completed", "green" + ) + knowledge_branch_found = True + break + + if not knowledge_branch_found: + for child in branch_to_use.children: + if ( + "Knowledge Retrieval" in str(child.label) + and "Started" not in str(child.label) + and "Completed" not in str(child.label) + ): + self.update_tree_label( + child, "✅", "Knowledge Retrieval Completed", "green" + ) + knowledge_branch_found = True + break + + if not knowledge_branch_found: + knowledge_branch = branch_to_use.add("") + self.update_tree_label( + knowledge_branch, "✅", "Knowledge Retrieval Completed", "green" + ) + + self.print(tree_to_use) + + if retrieved_knowledge: + knowledge_text = str(retrieved_knowledge) + if len(knowledge_text) > 500: + knowledge_text = knowledge_text[:497] + "..." + + knowledge_panel = Panel( + Text(knowledge_text, style="white"), + title="📚 Retrieved Knowledge", + border_style="green", + padding=(1, 2), + ) + self.print(knowledge_panel) + + self.print() + + def handle_knowledge_query_started( + self, + agent_branch: Optional[Tree], + task_prompt: str, + crew_tree: Optional[Tree], + ) -> None: + """Handle knowledge query generated event.""" + if not self.verbose: + return None + + branch_to_use = self.current_lite_agent_branch or agent_branch + tree_to_use = branch_to_use or crew_tree + if branch_to_use is None or tree_to_use is None: + return None + + query_branch = branch_to_use.add("") + self.update_tree_label( + query_branch, "🔎", f"Query: {task_prompt[:50]}...", "yellow" + ) + + self.print(tree_to_use) + self.print() + + def handle_knowledge_query_failed( + self, + agent_branch: Optional[Tree], + error: str, + crew_tree: Optional[Tree], + ) -> None: + """Handle knowledge query failed event.""" + if not self.verbose: + return + + tree_to_use = self.current_lite_agent_branch or crew_tree + branch_to_use = self.current_lite_agent_branch or agent_branch + + if branch_to_use and tree_to_use: + query_branch = branch_to_use.add("") + self.update_tree_label(query_branch, "❌", "Knowledge Query Failed", "red") + self.print(tree_to_use) + self.print() + + # Show error panel + error_content = self.create_status_content( + "Knowledge Query Failed", "Query Error", "red", Error=error + ) + self.print_panel(error_content, "Knowledge Error", "red") + + def handle_knowledge_query_completed( + self, + agent_branch: Optional[Tree], + crew_tree: Optional[Tree], + ) -> None: + """Handle knowledge query completed event.""" + if not self.verbose: + return None + + branch_to_use = self.current_lite_agent_branch or agent_branch + tree_to_use = branch_to_use or crew_tree + + if branch_to_use is None or tree_to_use is None: + return None + + query_branch = branch_to_use.add("") + self.update_tree_label(query_branch, "✅", "Knowledge Query Completed", "green") + + self.print(tree_to_use) + self.print() + + def handle_knowledge_search_query_failed( + self, + agent_branch: Optional[Tree], + error: str, + crew_tree: Optional[Tree], + ) -> None: + """Handle knowledge search query failed event.""" + if not self.verbose: + return + + tree_to_use = self.current_lite_agent_branch or crew_tree + branch_to_use = self.current_lite_agent_branch or agent_branch + + if branch_to_use and tree_to_use: + query_branch = branch_to_use.add("") + self.update_tree_label(query_branch, "❌", "Knowledge Search Failed", "red") + self.print(tree_to_use) + self.print() + + # Show error panel + error_content = self.create_status_content( + "Knowledge Search Failed", "Search Error", "red", Error=error + ) + self.print_panel(error_content, "Search Error", "red") + + # ----------- AGENT REASONING EVENTS ----------- + + def handle_reasoning_started( + self, + agent_branch: Optional[Tree], + attempt: int, + crew_tree: Optional[Tree], + ) -> Optional[Tree]: + """Handle agent reasoning started (or refinement) event.""" + if not self.verbose: + return None + + # Prefer LiteAgent > Agent > Task branch as the parent for reasoning + branch_to_use = ( + self.current_lite_agent_branch + or agent_branch + or self.current_task_branch + ) + + # We always want to render the full crew tree when possible so the + # Live view updates coherently. Fallbacks: crew tree → branch itself. + tree_to_use = self.current_crew_tree or crew_tree or branch_to_use + + if branch_to_use is None: + # Nothing to attach to, abort + return None + + # Reuse existing reasoning branch if present + reasoning_branch = self.current_reasoning_branch + if reasoning_branch is None: + reasoning_branch = branch_to_use.add("") + self.current_reasoning_branch = reasoning_branch + + # Build label text depending on attempt + status_text = ( + f"Reasoning (Attempt {attempt})" if attempt > 1 else "Reasoning..." + ) + self.update_tree_label(reasoning_branch, "🧠", status_text, "blue") + + self.print(tree_to_use) + self.print() + + return reasoning_branch + + def handle_reasoning_completed( + self, + plan: str, + ready: bool, + crew_tree: Optional[Tree], + ) -> None: + """Handle agent reasoning completed event.""" + if not self.verbose: + return + + reasoning_branch = self.current_reasoning_branch + tree_to_use = ( + self.current_crew_tree + or self.current_lite_agent_branch + or self.current_task_branch + or crew_tree + ) + + style = "green" if ready else "yellow" + status_text = "Reasoning Completed" if ready else "Reasoning Completed (Not Ready)" + + if reasoning_branch is not None: + self.update_tree_label(reasoning_branch, "✅", status_text, style) + + if tree_to_use is not None: + self.print(tree_to_use) + + # Show plan in a panel (trim very long plans) + if plan: + plan_panel = Panel( + Text(plan, style="white"), + title="🧠 Reasoning Plan", + border_style=style, + padding=(1, 2), + ) + self.print(plan_panel) + + self.print() + + # Clear stored branch after completion + self.current_reasoning_branch = None + + def handle_reasoning_failed( + self, + error: str, + crew_tree: Optional[Tree], + ) -> None: + """Handle agent reasoning failure event.""" + if not self.verbose: + return + + reasoning_branch = self.current_reasoning_branch + tree_to_use = ( + self.current_crew_tree + or self.current_lite_agent_branch + or self.current_task_branch + or crew_tree + ) + + if reasoning_branch is not None: + self.update_tree_label(reasoning_branch, "❌", "Reasoning Failed", "red") + + if tree_to_use is not None: + self.print(tree_to_use) + + # Error panel + error_content = self.create_status_content( + "Reasoning Failed", + "Error", + "red", + Error=error, + ) + self.print_panel(error_content, "Reasoning Error", "red") + + # Clear stored branch after failure + self.current_reasoning_branch = None diff --git a/src/crewai/utilities/formatter.py b/src/crewai/utilities/formatter.py index 19b2a74f9..fd2611472 100644 --- a/src/crewai/utilities/formatter.py +++ b/src/crewai/utilities/formatter.py @@ -1,6 +1,6 @@ -import re from typing import TYPE_CHECKING, List + if TYPE_CHECKING: from crewai.task import Task from crewai.tasks.task_output import TaskOutput @@ -17,6 +17,11 @@ def aggregate_raw_outputs_from_task_outputs(task_outputs: List["TaskOutput"]) -> def aggregate_raw_outputs_from_tasks(tasks: List["Task"]) -> str: """Generate string context from the tasks.""" - task_outputs = [task.output for task in tasks if task.output is not None] + + task_outputs = ( + [task.output for task in tasks if task.output is not None] + if isinstance(tasks, list) + else [] + ) return aggregate_raw_outputs_from_task_outputs(task_outputs) diff --git a/src/crewai/utilities/reasoning_handler.py b/src/crewai/utilities/reasoning_handler.py new file mode 100644 index 000000000..cb94eb38a --- /dev/null +++ b/src/crewai/utilities/reasoning_handler.py @@ -0,0 +1,387 @@ +import logging +import json +from typing import Tuple, cast + +from pydantic import BaseModel, Field + +from crewai.agent import Agent +from crewai.task import Task +from crewai.utilities import I18N +from crewai.llm import LLM +from crewai.utilities.events.crewai_event_bus import crewai_event_bus +from crewai.utilities.events.reasoning_events import ( + AgentReasoningStartedEvent, + AgentReasoningCompletedEvent, + AgentReasoningFailedEvent, +) + + +class ReasoningPlan(BaseModel): + """Model representing a reasoning plan for a task.""" + plan: str = Field(description="The detailed reasoning plan for the task.") + ready: bool = Field(description="Whether the agent is ready to execute the task.") + + +class AgentReasoningOutput(BaseModel): + """Model representing the output of the agent reasoning process.""" + plan: ReasoningPlan = Field(description="The reasoning plan for the task.") + + +class ReasoningFunction(BaseModel): + """Model for function calling with reasoning.""" + plan: str = Field(description="The detailed reasoning plan for the task.") + ready: bool = Field(description="Whether the agent is ready to execute the task.") + + +class AgentReasoning: + """ + Handles the agent reasoning process, enabling an agent to reflect and create a plan + before executing a task. + """ + def __init__(self, task: Task, agent: Agent): + if not task or not agent: + raise ValueError("Both task and agent must be provided.") + self.task = task + self.agent = agent + self.llm = cast(LLM, agent.llm) + self.logger = logging.getLogger(__name__) + self.i18n = I18N() + + def handle_agent_reasoning(self) -> AgentReasoningOutput: + """ + Public method for the reasoning process that creates and refines a plan + for the task until the agent is ready to execute it. + + Returns: + AgentReasoningOutput: The output of the agent reasoning process. + """ + # Emit a reasoning started event (attempt 1) + try: + crewai_event_bus.emit( + self.agent, + AgentReasoningStartedEvent( + agent_role=self.agent.role, + task_id=str(self.task.id), + attempt=1, + ), + ) + except Exception: + # Ignore event bus errors to avoid breaking execution + pass + + try: + output = self.__handle_agent_reasoning() + + # Emit reasoning completed event + try: + crewai_event_bus.emit( + self.agent, + AgentReasoningCompletedEvent( + agent_role=self.agent.role, + task_id=str(self.task.id), + plan=output.plan.plan, + ready=output.plan.ready, + attempt=1, + ), + ) + except Exception: + pass + + return output + except Exception as e: + # Emit reasoning failed event + try: + crewai_event_bus.emit( + self.agent, + AgentReasoningFailedEvent( + agent_role=self.agent.role, + task_id=str(self.task.id), + error=str(e), + attempt=1, + ), + ) + except Exception: + pass + + raise + + def __handle_agent_reasoning(self) -> AgentReasoningOutput: + """ + Private method that handles the agent reasoning process. + + Returns: + AgentReasoningOutput: The output of the agent reasoning process. + """ + plan, ready = self.__create_initial_plan() + + plan, ready = self.__refine_plan_if_needed(plan, ready) + + reasoning_plan = ReasoningPlan(plan=plan, ready=ready) + return AgentReasoningOutput(plan=reasoning_plan) + + def __create_initial_plan(self) -> Tuple[str, bool]: + """ + Creates the initial reasoning plan for the task. + + Returns: + Tuple[str, bool]: The initial plan and whether the agent is ready to execute the task. + """ + reasoning_prompt = self.__create_reasoning_prompt() + + if self.llm.supports_function_calling(): + plan, ready = self.__call_with_function(reasoning_prompt, "initial_plan") + return plan, ready + else: + system_prompt = self.i18n.retrieve("reasoning", "initial_plan").format( + role=self.agent.role, + goal=self.agent.goal, + backstory=self.__get_agent_backstory() + ) + + response = self.llm.call( + [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": reasoning_prompt} + ] + ) + + return self.__parse_reasoning_response(str(response)) + + def __refine_plan_if_needed(self, plan: str, ready: bool) -> Tuple[str, bool]: + """ + Refines the reasoning plan if the agent is not ready to execute the task. + + Args: + plan: The current reasoning plan. + ready: Whether the agent is ready to execute the task. + + Returns: + Tuple[str, bool]: The refined plan and whether the agent is ready to execute the task. + """ + attempt = 1 + max_attempts = self.agent.max_reasoning_attempts + + while not ready and (max_attempts is None or attempt < max_attempts): + # Emit event for each refinement attempt + try: + crewai_event_bus.emit( + self.agent, + AgentReasoningStartedEvent( + agent_role=self.agent.role, + task_id=str(self.task.id), + attempt=attempt + 1, + ), + ) + except Exception: + pass + + refine_prompt = self.__create_refine_prompt(plan) + + if self.llm.supports_function_calling(): + plan, ready = self.__call_with_function(refine_prompt, "refine_plan") + else: + system_prompt = self.i18n.retrieve("reasoning", "refine_plan").format( + role=self.agent.role, + goal=self.agent.goal, + backstory=self.__get_agent_backstory() + ) + + response = self.llm.call( + [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": refine_prompt} + ] + ) + plan, ready = self.__parse_reasoning_response(str(response)) + + attempt += 1 + + if max_attempts is not None and attempt >= max_attempts: + self.logger.warning( + f"Agent reasoning reached maximum attempts ({max_attempts}) without being ready. Proceeding with current plan." + ) + break + + return plan, ready + + def __call_with_function(self, prompt: str, prompt_type: str) -> Tuple[str, bool]: + """ + Calls the LLM with function calling to get a reasoning plan. + + Args: + prompt: The prompt to send to the LLM. + prompt_type: The type of prompt (initial_plan or refine_plan). + + Returns: + Tuple[str, bool]: A tuple containing the plan and whether the agent is ready. + """ + self.logger.debug(f"Using function calling for {prompt_type} reasoning") + + function_schema = { + "type": "function", + "function": { + "name": "create_reasoning_plan", + "description": "Create or refine a reasoning plan for a task", + "parameters": { + "type": "object", + "properties": { + "plan": { + "type": "string", + "description": "The detailed reasoning plan for the task." + }, + "ready": { + "type": "boolean", + "description": "Whether the agent is ready to execute the task." + } + }, + "required": ["plan", "ready"] + } + } + } + + try: + system_prompt = self.i18n.retrieve("reasoning", prompt_type).format( + role=self.agent.role, + goal=self.agent.goal, + backstory=self.__get_agent_backstory() + ) + + # Prepare a simple callable that just returns the tool arguments as JSON + def _create_reasoning_plan(plan: str, ready: bool): # noqa: N802 + """Return the reasoning plan result in JSON string form.""" + return json.dumps({"plan": plan, "ready": ready}) + + response = self.llm.call( + [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": prompt} + ], + tools=[function_schema], + available_functions={"create_reasoning_plan": _create_reasoning_plan}, + ) + + self.logger.debug(f"Function calling response: {response[:100]}...") + + try: + result = json.loads(response) + if "plan" in result and "ready" in result: + return result["plan"], result["ready"] + except (json.JSONDecodeError, KeyError): + pass + + response_str = str(response) + return response_str, "READY: I am ready to execute the task." in response_str + + except Exception as e: + self.logger.warning(f"Error during function calling: {str(e)}. Falling back to text parsing.") + + try: + system_prompt = self.i18n.retrieve("reasoning", prompt_type).format( + role=self.agent.role, + goal=self.agent.goal, + backstory=self.__get_agent_backstory() + ) + + fallback_response = self.llm.call( + [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": prompt} + ] + ) + + fallback_str = str(fallback_response) + return fallback_str, "READY: I am ready to execute the task." in fallback_str + except Exception as inner_e: + self.logger.error(f"Error during fallback text parsing: {str(inner_e)}") + return "Failed to generate a plan due to an error.", True # Default to ready to avoid getting stuck + + def __get_agent_backstory(self) -> str: + """ + Safely gets the agent's backstory, providing a default if not available. + + Returns: + str: The agent's backstory or a default value. + """ + return getattr(self.agent, "backstory", "No backstory provided") + + def __create_reasoning_prompt(self) -> str: + """ + Creates a prompt for the agent to reason about the task. + + Returns: + str: The reasoning prompt. + """ + available_tools = self.__format_available_tools() + + return self.i18n.retrieve("reasoning", "create_plan_prompt").format( + role=self.agent.role, + goal=self.agent.goal, + backstory=self.__get_agent_backstory(), + description=self.task.description, + expected_output=self.task.expected_output, + tools=available_tools + ) + + def __format_available_tools(self) -> str: + """ + Formats the available tools for inclusion in the prompt. + + Returns: + str: Comma-separated list of tool names. + """ + try: + return ', '.join([tool.name for tool in (self.task.tools or [])]) + except (AttributeError, TypeError): + return "No tools available" + + def __create_refine_prompt(self, current_plan: str) -> str: + """ + Creates a prompt for the agent to refine its reasoning plan. + + Args: + current_plan: The current reasoning plan. + + Returns: + str: The refine prompt. + """ + return self.i18n.retrieve("reasoning", "refine_plan_prompt").format( + role=self.agent.role, + goal=self.agent.goal, + backstory=self.__get_agent_backstory(), + current_plan=current_plan + ) + + def __parse_reasoning_response(self, response: str) -> Tuple[str, bool]: + """ + Parses the reasoning response to extract the plan and whether + the agent is ready to execute the task. + + Args: + response: The LLM response. + + Returns: + Tuple[str, bool]: The plan and whether the agent is ready to execute the task. + """ + if not response: + return "No plan was generated.", False + + plan = response + ready = False + + if "READY: I am ready to execute the task." in response: + ready = True + + return plan, ready + + def _handle_agent_reasoning(self) -> AgentReasoningOutput: + """ + Deprecated method for backward compatibility. + Use handle_agent_reasoning() instead. + + Returns: + AgentReasoningOutput: The output of the agent reasoning process. + """ + self.logger.warning( + "The _handle_agent_reasoning method is deprecated. Use handle_agent_reasoning instead." + ) + return self.handle_agent_reasoning() diff --git a/src/crewai/utilities/string_utils.py b/src/crewai/utilities/string_utils.py index 9a1857781..255e66a0b 100644 --- a/src/crewai/utilities/string_utils.py +++ b/src/crewai/utilities/string_utils.py @@ -59,7 +59,7 @@ def interpolate_only( # The regex pattern to find valid variable placeholders # Matches {variable_name} where variable_name starts with a letter/underscore # and contains only letters, numbers, and underscores - pattern = r"\{([A-Za-z_][A-Za-z0-9_]*)\}" + pattern = r"\{([A-Za-z_][A-Za-z0-9_\-]*)\}" # Find all matching variables in the input string variables = re.findall(pattern, input_string) diff --git a/tests/agent_reasoning_test.py b/tests/agent_reasoning_test.py new file mode 100644 index 000000000..eea42b7a5 --- /dev/null +++ b/tests/agent_reasoning_test.py @@ -0,0 +1,261 @@ +"""Tests for reasoning in agents.""" + +import json +import pytest + +from crewai import Agent, Task +from crewai.llm import LLM +from crewai.utilities.reasoning_handler import AgentReasoning + + +@pytest.fixture +def mock_llm_responses(): + """Fixture for mock LLM responses.""" + return { + "ready": "I'll solve this simple math problem.\n\nREADY: I am ready to execute the task.\n\n", + "not_ready": "I need to think about derivatives.\n\nNOT READY: I need to refine my plan because I'm not sure about the derivative rules.", + "ready_after_refine": "I'll use the power rule for derivatives where d/dx(x^n) = n*x^(n-1).\n\nREADY: I am ready to execute the task.", + "execution": "4" + } + + +def test_agent_with_reasoning(mock_llm_responses): + """Test agent with reasoning.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True, + verbose=True + ) + + task = Task( + description="Simple math task: What's 2+2?", + expected_output="The answer should be a number.", + agent=agent + ) + + agent.llm.call = lambda messages, *args, **kwargs: ( + mock_llm_responses["ready"] + if any("create a detailed plan" in msg.get("content", "") for msg in messages) + else mock_llm_responses["execution"] + ) + + result = agent.execute_task(task) + + assert result == mock_llm_responses["execution"] + assert "Reasoning Plan:" in task.description + + +def test_agent_with_reasoning_not_ready_initially(mock_llm_responses): + """Test agent with reasoning that requires refinement.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True, + max_reasoning_attempts=2, + verbose=True + ) + + task = Task( + description="Complex math task: What's the derivative of x²?", + expected_output="The answer should be a mathematical expression.", + agent=agent + ) + + call_count = [0] + + def mock_llm_call(messages, *args, **kwargs): + if any("create a detailed plan" in msg.get("content", "") for msg in messages) or any("refine your plan" in msg.get("content", "") for msg in messages): + call_count[0] += 1 + if call_count[0] == 1: + return mock_llm_responses["not_ready"] + else: + return mock_llm_responses["ready_after_refine"] + else: + return "2x" + + agent.llm.call = mock_llm_call + + result = agent.execute_task(task) + + assert result == "2x" + assert call_count[0] == 2 # Should have made 2 reasoning calls + assert "Reasoning Plan:" in task.description + + +def test_agent_with_reasoning_max_attempts_reached(): + """Test agent with reasoning that reaches max attempts without being ready.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True, + max_reasoning_attempts=2, + verbose=True + ) + + task = Task( + description="Complex math task: Solve the Riemann hypothesis.", + expected_output="A proof or disproof of the hypothesis.", + agent=agent + ) + + call_count = [0] + + def mock_llm_call(messages, *args, **kwargs): + if any("create a detailed plan" in msg.get("content", "") for msg in messages) or any("refine your plan" in msg.get("content", "") for msg in messages): + call_count[0] += 1 + return f"Attempt {call_count[0]}: I need more time to think.\n\nNOT READY: I need to refine my plan further." + else: + return "This is an unsolved problem in mathematics." + + agent.llm.call = mock_llm_call + + result = agent.execute_task(task) + + assert result == "This is an unsolved problem in mathematics." + assert call_count[0] == 2 # Should have made exactly 2 reasoning calls (max_attempts) + assert "Reasoning Plan:" in task.description + + +def test_agent_reasoning_input_validation(): + """Test input validation in AgentReasoning.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True + ) + + with pytest.raises(ValueError, match="Both task and agent must be provided"): + AgentReasoning(task=None, agent=agent) + + task = Task( + description="Simple task", + expected_output="Simple output" + ) + with pytest.raises(ValueError, match="Both task and agent must be provided"): + AgentReasoning(task=task, agent=None) + + +def test_agent_reasoning_error_handling(): + """Test error handling during the reasoning process.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True + ) + + task = Task( + description="Task that will cause an error", + expected_output="Output that will never be generated", + agent=agent + ) + + call_count = [0] + + def mock_llm_call_error(*args, **kwargs): + call_count[0] += 1 + if call_count[0] <= 2: # First calls are for reasoning + raise Exception("LLM error during reasoning") + return "Fallback execution result" # Return a value for task execution + + agent.llm.call = mock_llm_call_error + + result = agent.execute_task(task) + + assert result == "Fallback execution result" + assert call_count[0] > 2 # Ensure we called the mock multiple times + + +def test_agent_with_function_calling(): + """Test agent with reasoning using function calling.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True, + verbose=True + ) + + task = Task( + description="Simple math task: What's 2+2?", + expected_output="The answer should be a number.", + agent=agent + ) + + agent.llm.supports_function_calling = lambda: True + + def mock_function_call(messages, *args, **kwargs): + if "tools" in kwargs: + return json.dumps({ + "plan": "I'll solve this simple math problem: 2+2=4.", + "ready": True + }) + else: + return "4" + + agent.llm.call = mock_function_call + + result = agent.execute_task(task) + + assert result == "4" + assert "Reasoning Plan:" in task.description + assert "I'll solve this simple math problem: 2+2=4." in task.description + + +def test_agent_with_function_calling_fallback(): + """Test agent with reasoning using function calling that falls back to text parsing.""" + llm = LLM("gpt-3.5-turbo") + + agent = Agent( + role="Test Agent", + goal="To test the reasoning feature", + backstory="I am a test agent created to verify the reasoning feature works correctly.", + llm=llm, + reasoning=True, + verbose=True + ) + + task = Task( + description="Simple math task: What's 2+2?", + expected_output="The answer should be a number.", + agent=agent + ) + + agent.llm.supports_function_calling = lambda: True + + def mock_function_call(messages, *args, **kwargs): + if "tools" in kwargs: + return "Invalid JSON that will trigger fallback. READY: I am ready to execute the task." + else: + return "4" + + agent.llm.call = mock_function_call + + result = agent.execute_task(task) + + assert result == "4" + assert "Reasoning Plan:" in task.description + assert "Invalid JSON that will trigger fallback" in task.description diff --git a/tests/agent_test.py b/tests/agent_test.py index b3d243a53..800860c9f 100644 --- a/tests/agent_test.py +++ b/tests/agent_test.py @@ -2,14 +2,13 @@ import os from unittest import mock -from unittest.mock import patch +from unittest.mock import MagicMock, patch import pytest from crewai import Agent, Crew, Task from crewai.agents.cache import CacheHandler from crewai.agents.crew_agent_executor import AgentFinish, CrewAgentExecutor -from crewai.agents.parser import CrewAgentParser, OutputParserException from crewai.knowledge.knowledge import Knowledge from crewai.knowledge.knowledge_config import KnowledgeConfig from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource @@ -19,6 +18,7 @@ from crewai.tools import tool from crewai.tools.tool_calling import InstructorToolCalling from crewai.tools.tool_usage import ToolUsage from crewai.utilities import RPMController +from crewai.utilities.errors import AgentRepositoryError from crewai.utilities.events import crewai_event_bus from crewai.utilities.events.tool_usage_events import ToolUsageFinishedEvent @@ -73,6 +73,7 @@ def test_agent_creation(): assert agent.goal == "test goal" assert agent.backstory == "test backstory" + def test_agent_with_only_system_template(): """Test that an agent with only system_template works without errors.""" agent = Agent( @@ -88,6 +89,7 @@ def test_agent_with_only_system_template(): assert agent.goal == "Test Goal" assert agent.backstory == "Test Backstory" + def test_agent_with_only_prompt_template(): """Test that an agent with only system_template works without errors.""" agent = Agent( @@ -119,7 +121,8 @@ def test_agent_with_missing_response_template(): assert agent.role == "Test Role" assert agent.goal == "Test Goal" assert agent.backstory == "Test Backstory" - + + def test_agent_default_values(): agent = Agent(role="test role", goal="test goal", backstory="test backstory") assert agent.llm.model == "gpt-4o-mini" @@ -306,9 +309,7 @@ def test_cache_hitting(): def handle_tool_end(source, event): received_events.append(event) - with ( - patch.object(CacheHandler, "read") as read, - ): + with (patch.object(CacheHandler, "read") as read,): read.return_value = "0" task = Task( description="What is 2 times 6? Ignore correctness and just return the result of the multiplication tool, you must use the tool.", @@ -1038,7 +1039,7 @@ def test_agent_human_input(): CrewAgentExecutor, "_invoke_loop", return_value=AgentFinish(output="Hello", thought="", text=""), - ) as mock_invoke_loop, + ), ): # Execute the task output = agent.execute_task(task) @@ -1630,13 +1631,10 @@ def test_agent_with_knowledge_sources(): # Create a knowledge source with some content content = "Brandon's favorite color is red and he likes Mexican food." string_source = StringKnowledgeSource(content=content) - - with patch( - "crewai.knowledge.storage.knowledge_storage.KnowledgeStorage" - ) as MockKnowledge: + with patch("crewai.knowledge") as MockKnowledge: mock_knowledge_instance = MockKnowledge.return_value mock_knowledge_instance.sources = [string_source] - mock_knowledge_instance.query.return_value = [{"content": content}] + mock_knowledge_instance.search.return_value = [{"content": content}] agent = Agent( role="Information Agent", @@ -1690,7 +1688,7 @@ def test_agent_with_knowledge_sources_with_query_limit_and_score_threshold(): assert agent.knowledge is not None mock_knowledge_query.assert_called_once_with( - [task.prompt()], + ["Brandon's favorite color"], **knowledge_config.model_dump(), ) @@ -1727,7 +1725,7 @@ def test_agent_with_knowledge_sources_with_query_limit_and_score_threshold_defau assert agent.knowledge is not None mock_knowledge_query.assert_called_once_with( - [task.prompt()], + ["Brandon's favorite color"], **knowledge_config.model_dump(), ) @@ -1737,9 +1735,7 @@ def test_agent_with_knowledge_sources_extensive_role(): content = "Brandon's favorite color is red and he likes Mexican food." string_source = StringKnowledgeSource(content=content) - with patch( - "crewai.knowledge.storage.knowledge_storage.KnowledgeStorage" - ) as MockKnowledge: + with patch("crewai.knowledge") as MockKnowledge: mock_knowledge_instance = MockKnowledge.return_value mock_knowledge_instance.sources = [string_source] mock_knowledge_instance.query.return_value = [{"content": content}] @@ -1803,6 +1799,40 @@ def test_agent_with_knowledge_sources_works_with_copy(): assert isinstance(agent_copy.llm, LLM) +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_agent_with_knowledge_sources_generate_search_query(): + content = "Brandon's favorite color is red and he likes Mexican food." + string_source = StringKnowledgeSource(content=content) + + with patch("crewai.knowledge") as MockKnowledge: + mock_knowledge_instance = MockKnowledge.return_value + mock_knowledge_instance.sources = [string_source] + mock_knowledge_instance.query.return_value = [{"content": content}] + + agent = Agent( + role="Information Agent with extensive role description that is longer than 80 characters", + goal="Provide information based on knowledge sources", + backstory="You have access to specific knowledge sources.", + llm=LLM(model="gpt-4o-mini"), + knowledge_sources=[string_source], + ) + + task = Task( + description="What is Brandon's favorite color?", + expected_output="The answer to the question, in a format like this: `{{name: str, favorite_color: str}}`", + agent=agent, + ) + + crew = Crew(agents=[agent], tasks=[task]) + result = crew.kickoff() + + # Updated assertion to check the JSON content + assert "Brandon" in str(agent.knowledge_search_query) + assert "favorite color" in str(agent.knowledge_search_query) + + assert "red" in result.raw.lower() + + @pytest.mark.vcr(filter_headers=["authorization"]) def test_litellm_auth_error_handling(): """Test that LiteLLM authentication errors are handled correctly and not retried.""" @@ -1940,3 +1970,153 @@ def test_litellm_anthropic_error_handling(): # Verify the LLM call was only made once (no retries) mock_llm_call.assert_called_once() + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_get_knowledge_search_query(): + """Test that _get_knowledge_search_query calls the LLM with the correct prompts.""" + from crewai.utilities.i18n import I18N + + content = "The capital of France is Paris." + string_source = StringKnowledgeSource(content=content) + + agent = Agent( + role="Information Agent", + goal="Provide information based on knowledge sources", + backstory="I have access to knowledge sources", + llm=LLM(model="gpt-4"), + knowledge_sources=[string_source], + ) + + task = Task( + description="What is the capital of France?", + expected_output="The capital of France is Paris.", + agent=agent, + ) + + i18n = I18N() + task_prompt = task.prompt() + + with patch.object(agent, "_get_knowledge_search_query") as mock_get_query: + mock_get_query.return_value = "Capital of France" + + crew = Crew(agents=[agent], tasks=[task]) + crew.kickoff() + + mock_get_query.assert_called_once_with(task_prompt) + + with patch.object(agent.llm, "call") as mock_llm_call: + agent._get_knowledge_search_query(task_prompt) + + mock_llm_call.assert_called_once_with( + [ + { + "role": "system", + "content": i18n.slice( + "knowledge_search_query_system_prompt" + ).format(task_prompt=task.description), + }, + { + "role": "user", + "content": i18n.slice("knowledge_search_query").format( + task_prompt=task_prompt + ), + }, + ] + ) + + +@pytest.fixture +def mock_get_auth_token(): + with patch( + "crewai.cli.authentication.token.get_auth_token", return_value="test_token" + ): + yield + + +@patch("crewai.cli.plus_api.PlusAPI.get_agent") +def test_agent_from_repository(mock_get_agent, mock_get_auth_token): + from crewai_tools import SerperDevTool + + mock_get_response = MagicMock() + mock_get_response.status_code = 200 + mock_get_response.json.return_value = { + "role": "test role", + "goal": "test goal", + "backstory": "test backstory", + "tools": [{"name": "SerperDevTool"}], + } + mock_get_agent.return_value = mock_get_response + agent = Agent(from_repository="test_agent") + + assert agent.role == "test role" + assert agent.goal == "test goal" + assert agent.backstory == "test backstory" + assert len(agent.tools) == 1 + assert isinstance(agent.tools[0], SerperDevTool) + + +@patch("crewai.cli.plus_api.PlusAPI.get_agent") +def test_agent_from_repository_override_attributes(mock_get_agent, mock_get_auth_token): + from crewai_tools import SerperDevTool + + mock_get_response = MagicMock() + mock_get_response.status_code = 200 + mock_get_response.json.return_value = { + "role": "test role", + "goal": "test goal", + "backstory": "test backstory", + "tools": [{"name": "SerperDevTool"}], + } + mock_get_agent.return_value = mock_get_response + agent = Agent(from_repository="test_agent", role="Custom Role") + + assert agent.role == "Custom Role" + assert agent.goal == "test goal" + assert agent.backstory == "test backstory" + assert len(agent.tools) == 1 + assert isinstance(agent.tools[0], SerperDevTool) + + +@patch("crewai.cli.plus_api.PlusAPI.get_agent") +def test_agent_from_repository_with_invalid_tools(mock_get_agent, mock_get_auth_token): + mock_get_response = MagicMock() + mock_get_response.status_code = 200 + mock_get_response.json.return_value = { + "role": "test role", + "goal": "test goal", + "backstory": "test backstory", + "tools": [{"name": "DoesNotExist"}], + } + mock_get_agent.return_value = mock_get_response + with pytest.raises( + AgentRepositoryError, + match="Tool DoesNotExist could not be loaded: module 'crewai_tools' has no attribute 'DoesNotExist'", + ): + Agent(from_repository="test_agent") + + +@patch("crewai.cli.plus_api.PlusAPI.get_agent") +def test_agent_from_repository_internal_error(mock_get_agent, mock_get_auth_token): + mock_get_response = MagicMock() + mock_get_response.status_code = 500 + mock_get_response.text = "Internal server error" + mock_get_agent.return_value = mock_get_response + with pytest.raises( + AgentRepositoryError, + match="Agent test_agent could not be loaded: Internal server error", + ): + Agent(from_repository="test_agent") + + +@patch("crewai.cli.plus_api.PlusAPI.get_agent") +def test_agent_from_repository_agent_not_found(mock_get_agent, mock_get_auth_token): + mock_get_response = MagicMock() + mock_get_response.status_code = 404 + mock_get_response.text = "Agent not found" + mock_get_agent.return_value = mock_get_response + with pytest.raises( + AgentRepositoryError, + match="Agent test_agent does not exist, make sure the name is correct or the agent is available on your organization", + ): + Agent(from_repository="test_agent") diff --git a/tests/cassettes/test_agent_with_knowledge_sources.yaml b/tests/cassettes/test_agent_with_knowledge_sources.yaml index cbc8bbdae..009e61261 100644 --- a/tests/cassettes/test_agent_with_knowledge_sources.yaml +++ b/tests/cassettes/test_agent_with_knowledge_sources.yaml @@ -16,7 +16,7 @@ interactions: host: - api.openai.com user-agent: - - OpenAI/Python 1.52.1 + - OpenAI/Python 1.68.2 x-stainless-arch: - arm64 x-stainless-async: @@ -26,25 +26,132 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.52.1 + - 1.68.2 + x-stainless-read-timeout: + - '600' x-stainless-retry-count: - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.11.9 + - 3.12.9 method: POST uri: https://api.openai.com/v1/embeddings response: - content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": - \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n - \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": - 12,\n \"total_tokens\": 12\n }\n}\n" + body: + string: !!binary | + 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 headers: - CF-Cache-Status: - - DYNAMIC CF-RAY: - - 8f1042f3ac7867dd-SJC + - 93bd2df2cdb6ceb1-SJC Connection: - keep-alive Content-Encoding: @@ -52,14 +159,14 @@ interactions: Content-Type: - application/json Date: - - Thu, 12 Dec 2024 19:53:37 GMT + - Wed, 07 May 2025 02:10:11 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=PyJpKeiIPAL09jhZ7TAVgnQ5YB7Ha4MplnRyZkvQvDs-1734033217-1.0.1.1-mA.DBohqAynypzvd3K.0J2JY6_HWQcv6SdHAowE18qI9SJ2IsiSScEKWTGPAC3erWYzVwkYFa.cETaf9EhpyAA; - path=/; expires=Thu, 12-Dec-24 20:23:37 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=u.v.Ljv84ep79XydCTMQK.9w88QD56KFcms_QmFTmoA-1746583811-1.0.1.1-VozUy49upqnXzrPGLVSYQim11m9LYuTLcr0cqXGazOI2W4Iq2Vp8sEfeRGcf0HpCOZrHM9r5vdPPk9kwDxJPddltrYDlKF1_.wK0JnRNUos; + path=/; expires=Wed, 07-May-25 02:40:11 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=o.8CU3JYqdXlO9ULnGn2to.2TlmlWc6i1_64SoVhZFA-1734033217203-0.0.1.1-604800000; + - _cfuvid=6WaFjB6rWmnHkFfNPnSRG5da_gR_iACY69uwXj8bWMw-1746583811840-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -71,16 +178,22 @@ interactions: - X-Request-ID alt-svc: - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC openai-model: - text-embedding-3-small openai-organization: - crewai-iuxna1 openai-processing-ms: - - '104' + - '123' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-678b766599-cgwjk + x-envoy-upstream-service-time: + - '98' x-ratelimit-limit-requests: - '10000' x-ratelimit-limit-tokens: @@ -94,12 +207,24 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_85d126466fc11bbf5ef4ee743d0c157a - http_version: HTTP/1.1 - status_code: 200 + - req_97dfa15ce72eff259ad90bd7bc9b5742 + status: + code: 200 + message: OK - request: - body: '{"input": ["Brandon''s favorite color is red and he likes Mexican food."], - "model": "text-embedding-3-small", "encoding_format": "base64"}' + body: '{"messages": [{"role": "system", "content": "Your goal is to rewrite the + user query so that it is optimized for retrieval from a vector database. Consider + how the query will be used to find relevant documents, and aim to make it more + specific and context-aware. \n\n Do not include any other text than the rewritten + query, especially any preamble or postamble and only add expected output format + if its relevant to the rewritten query. \n\n Focus on the key words of the intended + task and to retrieve the most relevant information. \n\n There will be some + extra context provided that might need to be removed such as expected_output + formats structured_outputs and other instructions."}, {"role": "user", "content": + "The original query is: What is Brandon''s favorite color?\n\nThis is the expected + criteria for your final answer: Brandon''s favorite color.\nyou MUST return + the actual complete content as the final answer, not a summary.."}], "model": + "gpt-4o-mini", "stop": ["\nObservation:"]}' headers: accept: - application/json @@ -108,13 +233,13 @@ interactions: connection: - keep-alive content-length: - - '137' + - '992' content-type: - application/json host: - api.openai.com user-agent: - - OpenAI/Python 1.52.1 + - OpenAI/Python 1.68.2 x-stainless-arch: - arm64 x-stainless-async: @@ -124,25 +249,35 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.52.1 + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' x-stainless-retry-count: - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.11.9 + - 3.12.9 method: POST - uri: https://api.openai.com/v1/embeddings + uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": - \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n - \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": - 12,\n \"total_tokens\": 12\n }\n}\n" + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFLRbtQwEHzPV1j7fEG53JW73uOBKiFOIIRKhVAVufYmMXW8xt5UoOr+ + HTm5XlIoEi9+8OyMZ8b7mAkBRsNOgGolq87bfH/98UbGN1f379vDdf3jqj58/vDua/lpf/hy8xYW + iUF331HxE+uVos5bZENuhFVAyZhUl5v164vtarssB6AjjTbRGs/5mvLOOJOXRbnOi02+3J7YLRmF + EXbiWyaEEI/DmXw6jT9hJ4rF002HMcoGYXceEgIC2XQDMkYTWTqGxQQqcoxusL4P0mlyopYPFAyj + UGQpzIcD1n2UybDrrZ0B0jlimQIPNm9PyPFszFLjA93FP6hQG2diWwWUkVwyEZk8DOgxE+J2KKB/ + lgl8oM5zxXSPw3PLzWrUg6n3Cb04YUws7Zy0XbwgV2lkaWycNQhKqhb1RJ3qlr02NAOyWei/zbyk + PQY3rvkf+QlQCj2jrnxAbdTzwNNYwLSV/xo7lzwYhojhwSis2GBIH6Gxlr0ddwXir8jYVbVxDQYf + zLgwta+K1WW5LcvisoDsmP0GAAD//wMApUG7jD4DAAA= headers: CF-Cache-Status: - DYNAMIC CF-RAY: - - 8f1042f89e85cf2b-SJC + - 93bd2df8e9db3023-SJC Connection: - keep-alive Content-Encoding: @@ -150,55 +285,52 @@ interactions: Content-Type: - application/json Date: - - Thu, 12 Dec 2024 19:53:37 GMT + - Wed, 07 May 2025 02:10:12 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=OEqOxpPl0XuTSedCFKlaysHtx3Xbo9entNjNd5SahSU-1734033217-1.0.1.1-a.bCXL5.lBOiCyjue9I01oG8aqQHT7tbU0REUBpUu7xMNr7b32iqefcgm6O1l2ToQ_oUtDhAzSBTK7Espxgykg; - path=/; expires=Thu, 12-Dec-24 20:23:37 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=NC5Gl3J2PS6v0hkekzpQQDUENehQNq2JMlXGtoZGYKU-1746583812-1.0.1.1-BtPPeA80MGyGPcHeJxrD33q4p.gLUxQIj9GYAavoeX8Cub2CbnppccHh5_9Q3eRqlhxol7evdgkk0kQWUc00eL2cQ5nBiqj8gtewLoqsrFE; + path=/; expires=Wed, 07-May-25 02:40:12 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=8eVoktQyZSE413nzKx4zVo82AF3MS96DjnHQeN.E6Pk-1734033217682-0.0.1.1-604800000; + - _cfuvid=sls5nnOfsQtx13YdRLxgTXu0xxrDa7lhMRbaFqfQXwk-1746583812401-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked X-Content-Type-Options: - nosniff - access-control-allow-origin: - - '*' access-control-expose-headers: - X-Request-ID alt-svc: - h3=":443"; ma=86400 - openai-model: - - text-embedding-3-small openai-organization: - crewai-iuxna1 openai-processing-ms: - - '75' + - '138' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '140' x-ratelimit-limit-requests: - - '10000' + - '30000' x-ratelimit-limit-tokens: - - '10000000' + - '150000000' x-ratelimit-remaining-requests: - - '9999' + - '29999' x-ratelimit-remaining-tokens: - - '9999986' + - '149999783' x-ratelimit-reset-requests: - - 6ms + - 2ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_531afeb97985d1513eb1c8f311a1d62a - http_version: HTTP/1.1 - status_code: 200 + - req_bd031dddb84a21749dbe09f42b3f8c00 + status: + code: 200 + message: OK - request: - body: '{"input": ["What is Brandon''s favorite color? This is the expect criteria - for your final answer: Brandon''s favorite color. you MUST return the actual - complete content as the final answer, not a summary."], "model": "text-embedding-3-small", + body: '{"input": ["Brandon favorite color"], "model": "text-embedding-3-small", "encoding_format": "base64"}' headers: accept: @@ -208,16 +340,16 @@ interactions: connection: - keep-alive content-length: - - '270' + - '101' content-type: - application/json cookie: - - __cf_bm=OEqOxpPl0XuTSedCFKlaysHtx3Xbo9entNjNd5SahSU-1734033217-1.0.1.1-a.bCXL5.lBOiCyjue9I01oG8aqQHT7tbU0REUBpUu7xMNr7b32iqefcgm6O1l2ToQ_oUtDhAzSBTK7Espxgykg; - _cfuvid=8eVoktQyZSE413nzKx4zVo82AF3MS96DjnHQeN.E6Pk-1734033217682-0.0.1.1-604800000 + - __cf_bm=u.v.Ljv84ep79XydCTMQK.9w88QD56KFcms_QmFTmoA-1746583811-1.0.1.1-VozUy49upqnXzrPGLVSYQim11m9LYuTLcr0cqXGazOI2W4Iq2Vp8sEfeRGcf0HpCOZrHM9r5vdPPk9kwDxJPddltrYDlKF1_.wK0JnRNUos; + _cfuvid=6WaFjB6rWmnHkFfNPnSRG5da_gR_iACY69uwXj8bWMw-1746583811840-0.0.1.1-604800000 host: - api.openai.com user-agent: - - OpenAI/Python 1.52.1 + - OpenAI/Python 1.68.2 x-stainless-arch: - arm64 x-stainless-async: @@ -227,25 +359,132 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.52.1 + - 1.68.2 + x-stainless-read-timeout: + - '600' x-stainless-retry-count: - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.11.9 + - 3.12.9 method: POST uri: https://api.openai.com/v1/embeddings response: - content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": - \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n - \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": - 39,\n \"total_tokens\": 39\n }\n}\n" + body: + string: !!binary | + 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 + r/8DAAD//wMAhvFupN4gAAA= headers: - CF-Cache-Status: - - DYNAMIC CF-RAY: - - 8f1042fb580acf2b-SJC + - 93bd2dfc5889ceb1-SJC Connection: - keep-alive Content-Encoding: @@ -253,7 +492,7 @@ interactions: Content-Type: - application/json Date: - - Thu, 12 Dec 2024 19:53:38 GMT + - Wed, 07 May 2025 02:10:13 GMT Server: - cloudflare Transfer-Encoding: @@ -266,16 +505,22 @@ interactions: - X-Request-ID alt-svc: - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC openai-model: - text-embedding-3-small openai-organization: - crewai-iuxna1 openai-processing-ms: - - '85' + - '189' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-6b78fbf94c-rkptb + x-envoy-upstream-service-time: + - '192' x-ratelimit-limit-requests: - '10000' x-ratelimit-limit-tokens: @@ -283,29 +528,30 @@ interactions: x-ratelimit-remaining-requests: - '9999' x-ratelimit-remaining-tokens: - - '9999953' + - '9999994' x-ratelimit-reset-requests: - 6ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_52a59c31ea2beb8578511f56da5ea2dd - http_version: HTTP/1.1 - status_code: 200 + - req_91abc313f74bce8daaf5f8d411143f28 + status: + code: 200 + message: OK - request: body: '{"messages": [{"role": "system", "content": "You are Information Agent. You have access to specific knowledge sources.\nYour personal goal is: Provide information based on knowledge sources\nTo give my best complete final answer - to the task use the exact following format:\n\nThought: I now can give a great - answer\nFinal Answer: Your final answer must be the great and the most complete - as possible, it must be outcome described.\n\nI MUST use these formats, my job - depends on it!"}, {"role": "user", "content": "\nCurrent Task: What is Brandon''s - favorite color?\n\nThis is the expect criteria for your final answer: Brandon''s - favorite color.\nyou MUST return the actual complete content as the final answer, - not a summary.Additional Information: Brandon''s favorite color is red and he - likes Mexican food.\n\nBegin! This is VERY important to you, use the tools available - and give your best Final Answer, your job depends on it!\n\nThought:"}], "model": - "gpt-4o-mini", "stop": ["\nObservation:"], "stream": false}' + to the task respond using the exact following format:\n\nThought: I now can + give a great answer\nFinal Answer: Your final answer must be the great and the + most complete as possible, it must be outcome described.\n\nI MUST use these + formats, my job depends on it!"}, {"role": "user", "content": "\nCurrent Task: + What is Brandon''s favorite color?\n\nThis is the expected criteria for your + final answer: Brandon''s favorite color.\nyou MUST return the actual complete + content as the final answer, not a summary.Additional Information: Brandon''s + favorite color is red and he likes Mexican food.\n\nBegin! This is VERY important + to you, use the tools available and give your best Final Answer, your job depends + on it!\n\nThought:"}], "model": "gpt-4o-mini", "stop": ["\nObservation:"]}' headers: accept: - application/json @@ -314,13 +560,16 @@ interactions: connection: - keep-alive content-length: - - '1013' + - '1008' content-type: - application/json + cookie: + - __cf_bm=NC5Gl3J2PS6v0hkekzpQQDUENehQNq2JMlXGtoZGYKU-1746583812-1.0.1.1-BtPPeA80MGyGPcHeJxrD33q4p.gLUxQIj9GYAavoeX8Cub2CbnppccHh5_9Q3eRqlhxol7evdgkk0kQWUc00eL2cQ5nBiqj8gtewLoqsrFE; + _cfuvid=sls5nnOfsQtx13YdRLxgTXu0xxrDa7lhMRbaFqfQXwk-1746583812401-0.0.1.1-604800000 host: - api.openai.com user-agent: - - OpenAI/Python 1.52.1 + - OpenAI/Python 1.68.2 x-stainless-arch: - arm64 x-stainless-async: @@ -330,35 +579,34 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.52.1 + - 1.68.2 x-stainless-raw-response: - 'true' + x-stainless-read-timeout: + - '600.0' x-stainless-retry-count: - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.11.9 + - 3.12.9 method: POST uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"id\": \"chatcmpl-AdjXeg7urmMdz087X2AhPdSsqamzb\",\n \"object\": - \"chat.completion\",\n \"created\": 1734033218,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: Brandon's favorite color is red.\",\n \"refusal\": null\n },\n - \ \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n - \ \"usage\": {\n \"prompt_tokens\": 182,\n \"completion_tokens\": 18,\n - \ \"total_tokens\": 200,\n \"prompt_tokens_details\": {\n \"cached_tokens\": - 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n - \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"system_fingerprint\": - \"fp_bba3c8e70b\"\n}\n" + body: + string: !!binary | + H4sIAAAAAAAAA4xSTW/bMAy9+1cQuuwSF7aTLYlv66FDTz1twz4Kg5FoR60sCpKSbi3y3wc5aex2 + HbCLAfPxUe898ikDEFqJGoTcYpS9M/nl55uvm+J+effti68qGa6+4/pT+Yjba3nzKGaJwZs7kvGZ + dSG5d4aiZnuEpSeMlKaWy8WH96v5qpwPQM+KTKJ1LuYLznttdV4V1SIvlnm5OrG3rCUFUcOPDADg + afgmnVbRL1FDMXuu9BQCdiTqcxOA8GxSRWAIOkS0UcxGULKNZAfp12D5ASRa6PSeAKFLsgFteCAP + 8NNeaYsGPg7/NVx6tIrtuwAt7tnrSCDZsAcdwJO6mL7iqd0FTE7tzpgJgNZyxJTU4O/2hBzOjgx3 + zvMmvKKKVlsdto0nDGyT+hDZiQE9ZAC3Q3K7F2EI57l3sYl8T8Nz5Wp+nCfGhU3Q9QmMHNGM9aqo + Zm/MaxRF1CZMshcS5ZbUSB0XhTuleQJkE9d/q3lr9tG5tt3/jB8BKclFUo3zpLR86Xhs85Tu+V9t + 55QHwSKQ32tJTdTk0yYUtbgzxysT4XeI1Detth155/Xx1FrXFPN1taqqYl2I7JD9AQAA//8DACIr + 2O54AwAA headers: - CF-Cache-Status: - - DYNAMIC CF-RAY: - - 8f1042fffca367e8-SJC + - 93bd2dffffbc3023-SJC Connection: - keep-alive Content-Encoding: @@ -366,15 +614,9 @@ interactions: Content-Type: - application/json Date: - - Thu, 12 Dec 2024 19:53:39 GMT + - Wed, 07 May 2025 02:10:13 GMT Server: - cloudflare - Set-Cookie: - - __cf_bm=klZf7yZ0CFfDo9eLCfStVSScD0mVgsmNrSz6Ud9on_I-1734033219-1.0.1.1-ar.FWpGgFvtFOTAbByMA5fp9JAycsUeRzBSv6anze.RFpxDOtJVYWslYhhCFIdPyPiHAZGPcuQJxlRbkyr8vRw; - path=/; expires=Thu, 12-Dec-24 20:23:39 GMT; domain=.api.openai.com; HttpOnly; - Secure; SameSite=None - - _cfuvid=xecEkmr_qTiKn7EKC7aeGN5bpsbPM9ofyIsipL4VCYM-1734033219265-0.0.1.1-604800000; - path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked X-Content-Type-Options: @@ -383,14 +625,18 @@ interactions: - X-Request-ID alt-svc: - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC openai-organization: - crewai-iuxna1 openai-processing-ms: - - '412' + - '334' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '336' x-ratelimit-limit-requests: - '30000' x-ratelimit-limit-tokens: @@ -398,13 +644,14 @@ interactions: x-ratelimit-remaining-requests: - '29999' x-ratelimit-remaining-tokens: - - '149999769' + - '149999782' x-ratelimit-reset-requests: - 2ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_15b9d1b27239c538a259e964b502f4d9 - http_version: HTTP/1.1 - status_code: 200 + - req_ceae74c516df806c888d819e14ca9da3 + status: + code: 200 + message: OK version: 1 diff --git a/tests/cassettes/test_agent_with_knowledge_sources_extensive_role.yaml b/tests/cassettes/test_agent_with_knowledge_sources_extensive_role.yaml index bfa969b12..946f2a710 100644 --- a/tests/cassettes/test_agent_with_knowledge_sources_extensive_role.yaml +++ b/tests/cassettes/test_agent_with_knowledge_sources_extensive_role.yaml @@ -6,7 +6,7 @@ interactions: accept: - application/json accept-encoding: - - gzip, deflate, zstd + - gzip, deflate connection: - keep-alive content-length: @@ -18,7 +18,7 @@ interactions: user-agent: - OpenAI/Python 1.68.2 x-stainless-arch: - - x64 + - arm64 x-stainless-async: - 'false' x-stainless-lang: @@ -38,13 +38,120 @@ interactions: method: POST uri: https://api.openai.com/v1/embeddings response: - content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": - \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n - \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": - 12,\n \"total_tokens\": 12\n }\n}\n" + body: + string: !!binary | + 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 + AP//AwDiS0D64CAAAA== headers: CF-RAY: - - 92606d69df737e05-GRU + - 93bd4e5fa8affa9e-SJC Connection: - keep-alive Content-Encoding: @@ -52,14 +159,14 @@ interactions: Content-Type: - application/json Date: - - Tue, 25 Mar 2025 18:21:21 GMT + - Wed, 07 May 2025 02:32:19 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=YQe0r6xlg5bRl1wJ70dt0Aocti_r13sABgw2peP46Yw-1742926881-1.0.1.1-.p2IX5HrpoSy4WAMkQFz0iswmLdbuLJl2rLIWZkOOdUZ3jUTwTTGdAZqO8N084.xjQYo12Qj_tSEQnzCcc4a8DtoXIRULYMPRzIPeTezIkU; - path=/; expires=Tue, 25-Mar-25 18:51:21 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=OPw6ztA5EppsJ3y6C7lEoqGqTbJTr_EBNyZlIzRzR2E-1746585139-1.0.1.1-rZnEfzLCc.FOL.S2PSaPD0KCOc4tdFUg57LXOhFR2FbBm3TYjWXeNMi.Om2bCsj.QEG9FqbGy03gA1WVGhbGUUqGJUHYgK1YEFwgpUx33O8; + path=/; expires=Wed, 07-May-25 03:02:19 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=T7Hv3cCn64SAlcAT1xFBTjlHSm.Ut3gTDw3SwYO5H9o-1742926881514-0.0.1.1-604800000; + - _cfuvid=SglpS002Q61Pecur1plBAPPzB5XA.dNRJHDcY0UWwlc-1746585139769-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -78,15 +185,15 @@ interactions: openai-organization: - crewai-iuxna1 openai-processing-ms: - - '111' + - '554' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload via: - - envoy-router-678fbc785b-244c7 + - envoy-router-548b76db4d-24xct x-envoy-upstream-service-time: - - '82' + - '557' x-ratelimit-limit-requests: - '10000' x-ratelimit-limit-tokens: @@ -100,191 +207,33 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_eec876b36a4e41890b2123c7595d82bf - http_version: HTTP/1.1 - status_code: 200 -- request: - body: '{"input": ["What is Brandon''s favorite color? This is the expected criteria - for your final answer: Brandon''s favorite color. you MUST return the actual - complete content as the final answer, not a summary."], "model": "text-embedding-3-small", - "encoding_format": "base64"}' - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '272' - content-type: - - application/json - cookie: - - __cf_bm=YQe0r6xlg5bRl1wJ70dt0Aocti_r13sABgw2peP46Yw-1742926881-1.0.1.1-.p2IX5HrpoSy4WAMkQFz0iswmLdbuLJl2rLIWZkOOdUZ3jUTwTTGdAZqO8N084.xjQYo12Qj_tSEQnzCcc4a8DtoXIRULYMPRzIPeTezIkU; - _cfuvid=T7Hv3cCn64SAlcAT1xFBTjlHSm.Ut3gTDw3SwYO5H9o-1742926881514-0.0.1.1-604800000 - host: - - api.openai.com - user-agent: - - OpenAI/Python 1.68.2 - x-stainless-arch: - - x64 - x-stainless-async: - - 'false' - x-stainless-lang: - - python - x-stainless-os: - - MacOS - x-stainless-package-version: - - 1.68.2 - x-stainless-read-timeout: - - '600' - x-stainless-retry-count: - - '0' - x-stainless-runtime: - - CPython - x-stainless-runtime-version: - - 3.12.9 - method: POST - uri: https://api.openai.com/v1/embeddings - response: - content: "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": - \"embedding\",\n \"index\": 0,\n \"embedding\": \"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\"\n - \ }\n ],\n \"model\": \"text-embedding-3-small\",\n \"usage\": {\n \"prompt_tokens\": - 39,\n \"total_tokens\": 39\n }\n}\n" - headers: - CF-RAY: - - 92606d71fadd7e05-GRU - Connection: - - keep-alive - Content-Encoding: - - gzip - Content-Type: - - application/json - Date: - - Tue, 25 Mar 2025 18:21:22 GMT - Server: - - cloudflare - Transfer-Encoding: - - chunked - X-Content-Type-Options: - - nosniff - access-control-allow-origin: - - '*' - access-control-expose-headers: - - X-Request-ID - alt-svc: - - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC - openai-model: - - text-embedding-3-small - openai-organization: - - crewai-iuxna1 - openai-processing-ms: - - '176' - openai-version: - - '2020-10-01' - strict-transport-security: - - max-age=31536000; includeSubDomains; preload - via: - - envoy-router-84d4976dd6-kn9b2 - x-envoy-upstream-service-time: - - '76' - x-ratelimit-limit-requests: - - '10000' - x-ratelimit-limit-tokens: - - '10000000' - x-ratelimit-remaining-requests: - - '9999' - x-ratelimit-remaining-tokens: - - '9999951' - x-ratelimit-reset-requests: - - 6ms - x-ratelimit-reset-tokens: - - 0s - x-request-id: - - req_4a397f4ae14d9fcb88333d9ecb5be969 - http_version: HTTP/1.1 - status_code: 200 -- request: - body: !!binary | - CocLCiQKIgoMc2VydmljZS5uYW1lEhIKEGNyZXdBSS10ZWxlbWV0cnkS3goKEgoQY3Jld2FpLnRl - bGVtZXRyeRK2CAoQro1thsfReS7yOp6MTxegrxIItR6JoTTghDkqDENyZXcgQ3JlYXRlZDABOZgk - XbC/HjAYQdgJurC/HjAYShsKDmNyZXdhaV92ZXJzaW9uEgkKBzAuMTA4LjBKGgoOcHl0aG9uX3Zl - cnNpb24SCAoGMy4xMi45Si4KCGNyZXdfa2V5EiIKIDU1MjczOGJmMDQwZTcxZGEyMjJmOWQzNjU1 - MjIzMjdjSjEKB2NyZXdfaWQSJgokMmUzMGJhOWQtZWNkOS00MDg5LTk5YTctMGIwYTE0ODk5ODdh - ShwKDGNyZXdfcHJvY2VzcxIMCgpzZXF1ZW50aWFsShEKC2NyZXdfbWVtb3J5EgIQAEoaChRjcmV3 - X251bWJlcl9vZl90YXNrcxICGAFKGwoVY3Jld19udW1iZXJfb2ZfYWdlbnRzEgIYAUqaAwoLY3Jl - d19hZ2VudHMSigMKhwNbeyJrZXkiOiAiYTk2YTQyMjM1Y2U0M2RiZDgwNzc0ZWIyODhhNzM3MzUi - LCAiaWQiOiAiZjU5NjZlYTktODk2Zi00MDRmLWIwOGUtZDk1MWI4OWNmZTM3IiwgInJvbGUiOiAi - SW5mb3JtYXRpb24gQWdlbnQgd2l0aCBleHRlbnNpdmUgcm9sZSBkZXNjcmlwdGlvbiB0aGF0IGlz - IGxvbmdlciB0aGFuIDgwIGNoYXJhY3RlcnMiLCAidmVyYm9zZT8iOiBmYWxzZSwgIm1heF9pdGVy - IjogMjUsICJtYXhfcnBtIjogbnVsbCwgImZ1bmN0aW9uX2NhbGxpbmdfbGxtIjogIiIsICJsbG0i - OiAiZ3B0LTRvLW1pbmkiLCAiZGVsZWdhdGlvbl9lbmFibGVkPyI6IGZhbHNlLCAiYWxsb3dfY29k - ZV9leGVjdXRpb24/IjogZmFsc2UsICJtYXhfcmV0cnlfbGltaXQiOiAyLCAidG9vbHNfbmFtZXMi - OiBbXX1dSsgCCgpjcmV3X3Rhc2tzErkCCrYCW3sia2V5IjogIjg2ZmU1NTY3ZDFmNDFiMWY4NDQ1 - ZTRmOGQ0YmY0MGU2IiwgImlkIjogImM1ZTU3MTcwLWFkZWQtNDNkNS1iZTE3LTZhZDliM2ZjM2U3 - NCIsICJhc3luY19leGVjdXRpb24/IjogZmFsc2UsICJodW1hbl9pbnB1dD8iOiBmYWxzZSwgImFn - ZW50X3JvbGUiOiAiSW5mb3JtYXRpb24gQWdlbnQgd2l0aCBleHRlbnNpdmUgcm9sZSBkZXNjcmlw - dGlvbiB0aGF0IGlzIGxvbmdlciB0aGFuIDgwIGNoYXJhY3RlcnMiLCAiYWdlbnRfa2V5IjogImE5 - NmE0MjIzNWNlNDNkYmQ4MDc3NGViMjg4YTczNzM1IiwgInRvb2xzX25hbWVzIjogW119XXoCGAGF - AQABAAASjgIKELNeNWDbp5Ua0wTFrxxeOrASCIhmnaGTrxBNKgxUYXNrIENyZWF0ZWQwATkQlzso - wB4wGEE4Kz4owB4wGEouCghjcmV3X2tleRIiCiA1NTI3MzhiZjA0MGU3MWRhMjIyZjlkMzY1NTIy - MzI3Y0oxCgdjcmV3X2lkEiYKJDJlMzBiYTlkLWVjZDktNDA4OS05OWE3LTBiMGExNDg5OTg3YUou - Cgh0YXNrX2tleRIiCiA4NmZlNTU2N2QxZjQxYjFmODQ0NWU0ZjhkNGJmNDBlNkoxCgd0YXNrX2lk - EiYKJGM1ZTU3MTcwLWFkZWQtNDNkNS1iZTE3LTZhZDliM2ZjM2U3NHoCGAGFAQABAAA= - headers: - Accept: - - '*/*' - Accept-Encoding: - - gzip, deflate, zstd - Connection: - - keep-alive - Content-Length: - - '1418' - Content-Type: - - application/x-protobuf - User-Agent: - - OTel-OTLP-Exporter-Python/1.31.1 - method: POST - uri: https://telemetry.crewai.com:4319/v1/traces - response: - body: - string: "\n\0" - headers: - Content-Length: - - '2' - Content-Type: - - application/x-protobuf - Date: - - Tue, 25 Mar 2025 18:21:24 GMT + - req_61a2cd23c379f8ce51385df82ba1c744 status: code: 200 message: OK - request: - body: '{"messages": [{"role": "system", "content": "You are Information Agent - with extensive role description that is longer than 80 characters. You have - access to specific knowledge sources.\nYour personal goal is: Provide information - based on knowledge sources\nTo give my best complete final answer to the task - respond using the exact following format:\n\nThought: I now can give a great - answer\nFinal Answer: Your final answer must be the great and the most complete - as possible, it must be outcome described.\n\nI MUST use these formats, my job - depends on it!"}, {"role": "user", "content": "\nCurrent Task: What is Brandon''s - favorite color?\n\nThis is the expected criteria for your final answer: Brandon''s - favorite color.\nyou MUST return the actual complete content as the final answer, - not a summary.Additional Information: Brandon''s favorite color is red and he - likes Mexican food.\n\nBegin! This is VERY important to you, use the tools available - and give your best Final Answer, your job depends on it!\n\nThought:"}], "model": - "gpt-4o-mini", "stop": ["\nObservation:"]}' + body: '{"messages": [{"role": "system", "content": "Your goal is to rewrite the + user query so that it is optimized for retrieval from a vector database. Consider + how the query will be used to find relevant documents, and aim to make it more + specific and context-aware. \n\n Do not include any other text than the rewritten + query, especially any preamble or postamble and only add expected output format + if its relevant to the rewritten query. \n\n Focus on the key words of the intended + task and to retrieve the most relevant information. \n\n There will be some + extra context provided that might need to be removed such as expected_output + formats structured_outputs and other instructions."}, {"role": "user", "content": + "The original query is: What is Brandon''s favorite color?\n\nThis is the expected + criteria for your final answer: Brandon''s favorite color.\nyou MUST return + the actual complete content as the final answer, not a summary.."}], "model": + "gpt-4o", "stop": ["\nObservation:"]}' headers: accept: - application/json accept-encoding: - - gzip, deflate, zstd + - gzip, deflate connection: - keep-alive content-length: - - '1074' + - '987' content-type: - application/json host: @@ -292,7 +241,7 @@ interactions: user-agent: - OpenAI/Python 1.68.2 x-stainless-arch: - - x64 + - arm64 x-stainless-async: - 'false' x-stainless-lang: @@ -314,21 +263,21 @@ interactions: method: POST uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"id\": \"chatcmpl-BF3Br9QWbmiaKiPLFd5URBfj1B7NQ\",\n \"object\": - \"chat.completion\",\n \"created\": 1742926883,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: Brandon's favorite color is red.\",\n \"refusal\": null,\n \"annotations\": - []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n - \ }\n ],\n \"usage\": {\n \"prompt_tokens\": 194,\n \"completion_tokens\": - 19,\n \"total_tokens\": 213,\n \"prompt_tokens_details\": {\n \"cached_tokens\": - 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n - \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": - \"default\",\n \"system_fingerprint\": \"fp_27322b4e16\"\n}\n" + body: + string: !!binary | + H4sIAAAAAAAAA4xSwW7UMBS85yssX7gQlC1pNtpjJZA4IA6IE6oir/2Sdev4WX4vBVTtvyM76SZb + QOLig+fNeGb8ngshpDXyIKQ+KdZjcOXdty9U/YjgTN183FefPkSwYQf8uf46sXybGHh8AM0vrHca + x+CALfoZ1hEUQ1Ld7evmtr3d1VUGRjTgEm0IXNZY3lQ3dVm1ZdUsxBNaDSQP4nshhBDP+UwWvYGf + 8iCyTL4ZgUgNIA+XISFkRJdupCKyxMrPdhdQo2fw2fVdVN6gf0OiV08YLYPQ6DAK63uMo7pEedGF + fiKVnPvJuQ2gvEfO49n0/YKcLzYdDiHikV5RZW+9pVMXQRH6ZIkYg8zouRDiPtcxXSWUIeIYuGN8 + hPzcbv9+1pPrB6zofsEYWbkNqV06vJbrDLCyjjZ9Sq30CcxKXctXk7G4AYpN6D/N/E17Dm798D/y + K6A1BAbThQjG6uvA61iEtJ7/GruUnA1LgvhkNXRsIaaPMNCryS2LTr+IYex66weIIdp5ffrQmbZt + 6r49NkdZnIvfAAAA//8DADqQ5CxHAwAA headers: + CF-Cache-Status: + - DYNAMIC CF-RAY: - - 92606d78cdcb7def-GRU + - 93bd4e648bb75850-SJC Connection: - keep-alive Content-Encoding: @@ -336,14 +285,14 @@ interactions: Content-Type: - application/json Date: - - Tue, 25 Mar 2025 18:21:24 GMT + - Wed, 07 May 2025 02:32:20 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=akSDYPP.eTuyDBep9apt00XQn2By0q4quUKYKaowxB4-1742926884-1.0.1.1-nmj4tC9iquLz9Y4C_Lm9AYbMb7_yjKru3.wztYGzcO7o4_kIFqmjYjAAdLL2ZOWQUXzhWiH_XRvDTY94ubficIUm7WB.5o4CQ41GRGDc6c0; - path=/; expires=Tue, 25-Mar-25 18:51:24 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=ZjI36hLyf9Da1Y8yeR1Zgg8XCD7rmT1aXbO_gEbPdNs-1746585140-1.0.1.1-TlQix1fCrHyIU6zIRsJvFZlp5S1YrZH1pM0JcFGHXsB7fOk_DfDwkz.r8NiFfBM6sBaLAYZNtXZ7L_6qPNeL22OhXTrbA5wIPyYNGUdE9aI; + path=/; expires=Wed, 07-May-25 03:02:20 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=eJkVy2yBJBQb66LFc5ao3Y_Xwek6ZYZdKM7l5_pxS_E-1742926884663-0.0.1.1-604800000; + - _cfuvid=j1aSi.0AgeQ41HXT2FrDI_tx3yzmdoKTXlbNy_vIn0k-1746585140368-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -353,30 +302,357 @@ interactions: - X-Request-ID alt-svc: - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '316' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '319' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '30000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '29999784' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_c87b9fbb3b92014f978845e5773a01c6 + status: + code: 200 + message: OK +- request: + body: '{"input": ["Brandon''s favorite color information"], "model": "text-embedding-3-small", + "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '115' + content-type: + - application/json + cookie: + - __cf_bm=OPw6ztA5EppsJ3y6C7lEoqGqTbJTr_EBNyZlIzRzR2E-1746585139-1.0.1.1-rZnEfzLCc.FOL.S2PSaPD0KCOc4tdFUg57LXOhFR2FbBm3TYjWXeNMi.Om2bCsj.QEG9FqbGy03gA1WVGhbGUUqGJUHYgK1YEFwgpUx33O8; + _cfuvid=SglpS002Q61Pecur1plBAPPzB5XA.dNRJHDcY0UWwlc-1746585139769-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: !!binary | + H4sIAAAAAAAAA1SaWxOyOrel779fsWrd2rvkoCRZd5xEThIERezq6gJEBETkkADZtf97F75f7e6+ + sUpAwWQ65hhP8p//+uuvv9u0yrPx73/++vtdDuPf/2M99kjG5O9//vqf//rrr7/++s/f6/93Zd6k + +eNRforf5b+T5eeRz3//8xf330f+70X//PU3S/SeHm6NmfJ3VETQjaUJ2w7oWWv5twhdnKHCcav0 + 4ZLWBUHni52SCWdLOpCiviDKWwM1Gv5bMadJazBO2hcf4sMYznQLcvg0opjebevuLHEbdqClhBIQ + fDpnSrm3iwzLH+kD99SZfGsvwy1QHHo0GxrO1eehwro7bwhogJIKd17YQeet2lRzns9+WsStBGmF + 71jbYRswKalcdCq+CBuMhc6yO24n2O+x423OryKdxucwwWdb1tiOUQhG5xEPMI7cit5Pi88Ecel9 + qbs0ElWPnZ22niL7qC3F3iv6XaMtKKAddKRDTNXLuWdTVDkE4iB1sWoWYs/i0NignRZr+F4apiPo + 4LJBfUzvVL5ZZsqo0NborLomtfmJgvGuBzKy31Sm+vVxCheh33cgu4Zbj96TkAmlkw9wuW5cjxnf + pZqL29KhfcZ/Kd5Lb0ClcG7QJPIdjT6+78yvZ8Xt5zDwaBjwY7rwnaQDkdk29Ww8AYbRx4aZ7M7k + JX9qjSXKNKFDcso8ZokVm5AKbMBOuPEA5Yd+EXbXCFmVolJPPXLpsiS+iWY+S+jzVfrh5Lp1jPgt + Kah3uL77t53dbYTrY4OPPnHYrJu7AgHCzTSN/BeY3K1i/BkPK5qkcImaS4kgt6+xzW0UjbHkKUHj + XjZUfd9mIPj3dwlv4t3B6otIGkGGs4ELOIfUqbw+pZt5swBDUmPs22js5zKUbbRpOuaxz6EJl9bu + cghxVHlw48lAtIdDC4tC2VFtKi+MY0O4wFk0Oer2DtLGM7zmaNYHitV7g6q1/mTo40ml1+lRsvng + vwjaHs03TV5FxJY7PQRoKssK37uv4zC3eJWofUyZt3UzO+TF46QCPSCWt0+4uOc5fR+BWrQ0UsZX + 2+FnZengbB4riu9aX3UooC3Es1fTY7HRmSBsjQ3cGI6CNdUeGTlp5wLtLQ8SPixtjU8O5xqOlFGs + wdDSBAmGDTyeFYkq90gBIjuqDUxQsVAtb5Seh/dzCbTFu1HjlqLqe5XDCT07d4NDdLiBTxnFGyhJ + G4fqdxhoy/RUOzDSmdJILL7OrBhzgkj5IPj2mlg1bbRlQIPkUZpaX7nnuSCrYX+TtziQHiIg+OC3 + qFYaDd+DIdMmhHMBekMTEHI7SenyuRkm7Hh98IRy7tMu9M0CTtro0PO2PAFO/BYxHO2sxQE5P7TZ + qdQFKYl0xFpSaqGAtkGAnMtypgfdhf300I8tetGbQhZyRtrst3INNV92sAK0r7OEvlxAX1Qe1KNv + yqYvVgXEtulC7UuOtfmyTBni+ouJf/rDZPWsgt98WLlqMYa7M4dcOEcY+0Xbk8FrCWDOy6WXRif9 + spHPEuRybJN5e/yEs+JWOZRo9fEW/mMDvhc0GyUPTaa6FB/Agg9xh2we7mn8aepKFHxJkmwDtNST + hQKwzP4W4FT0iNqXowHEE89DdFm2G3xEs8y49gIl6Ma7yQMpTNlsl5qH9Etc4Twg12qSlrsJ13rE + hn3nwbRBigzsw8mjynW0teWonyZYm8eFGsAq2HA69Rs4uo5KZpPKPW8mgQynwO/o8WwF4fLxsxLu + 4E0kYtNtAD21yQBVf1TIVqdcOmiiW0NaGDl2L1xVTVEW6Og+hFd8MuaKzVe2UyV80nXslKLmDA9h + uPyZX/V6jIE4cq8cCUrL0WTPeRoLRr9AJ6gX1Nd8sR/L5prBu7Hx8AEJAeMvxkmASXHnqeHtpJ7t + XDlBt7B8Y9lrDiHvdmyD6Ek6Y8Wyj464yb8Z3PBeQL3Pg4VzlcwRujxagVr0udPIWu/oCLMHVR58 + 04s/fSXlk1BXP5Up27lmAvWd4tOz/Kkd0qizD7lRLqk/Wns2H+9BjlSsNn/+X1Ocnz2UDo1Grega + Am67kRtouGlLldP71HO3qJDR2MGEWr0chsxfNBntxLLEB+kEHPb5LDkqXOtMLxux66cu4mTUJBdG + 49jdgTkUOwhdcTCpEcAdmNVTpcLTQ8HYH0IXEEdJEtg8ngQ7KUzBdHvcW/Da1hI+CsK9Ei49VuHG + sBScOucsZdlDEOBb9xVsgPqTsoCzbRjeGh17FteFvaL5NTo3OqEOLNxw6qx4QklOE6pfVYPxZdHH + cO4UAct1IzBWzbccLuLuSaNdJISseckC8nKZeW2QFf/2G+NdPXri4fIE3NxlnRQ9kwO9mQ0Opwp+ + B1DcA0ztcThXk62BFpoV3XnD6XjquWZbxOihuFcCr91UTR8j0OFyGEKqtUmcioJt+Wjm8wR7u+re + L0mXLHDc3DyqhsLBmbjmS6Bw1VpvQb2lCTnn6MCfIaaZeS6qaXt+QHiSYoNe2CsDouZYCxyBG9Lk + DVA6rPMBfn7BamwjZJn9KmCb6Sq23/XVmR5UIhDdDhP2wOimkz4nJdIaxrDW144zLXVZo5aoV6rn + t101Wf7zAiUJOvT4vvfhbNSbGsqdmdFLKTzC5Q1MFYa3WqfnBbi9uPY/yL8sFZ/zPuy5dT7g45x7 + 2Mx6VE0qDWPYCbOBj/fTVNEILTkKIuFOvUTX0uoqWAF86G+Lno6uHfLpneRgb4OIah8Qhowltx0w + R9fE93NqVsJXnxK0uZCCgMEPU55p8wJ+36fz+5czcfutCvIYvbD3UQdGgz304NovcWiPPhBTdXeB + +VHzqGF9PtpsU5IBu4xcD6AAOMsTcD4y8+6L8RjW/aL2S426s2dgd51fUktyjs6NQejB0Q4pFziT + iUpGEw/BpezHr4Q6WFcLpgoRvVRIN58WrP4RY7mPnBkldx0u98PRq6ajFxJkaBuUfHcHgi5ekAqb + o1OAr+yV1Nkpn35+1nkEvwdNJMh9wV/9csDteM1bMrXQ5puaSPuhaVRqvXqlmuH9XsDL4F4xjtv3 + z8+q0KppRt1A2TFSnx4coE+hxlq0dyouBZEAQ5B3+JDVi8aO130rvaBnYLNCLpsS9u6A/Ahv3pZP + X85SX44ZVEjBUd9hUsWi85EDwD+HZGuyoOICZ2fC48YWCWPnlzbsdLKB3nM80Wej8NqkiXoNS9I5 + NGfeseKrV7mB89t94Wt8OIWUyT6ERX6of37CEdr4NMD2VFQ0vs2LNsuHWYCV4DypQgOOLVGTlZId + LiMB9vPUi6gOS1QMX41epPjNplut+ehm3iQC72GbMliFG8TT/EOI4Sw9oxaC8NlwNg6fSuuIGFEb + 5vH2RfG3cxkXFgcZnbanlFo7495PFT/p8Lx/lhi74sTq4L3VweuREHyYHiVY1vqEGVVNrz7fqTMb + cSCh6BkfqMzJJRv4zzcAfbjT6dmTL5p4ZnYDlit0qSK0aj/KTr+Dzd52qDyELuPbIRDA07FGbx8M + mcNr14sLxywG9IZmGYjWbVp++rv6G6gxKdw3gCgIYu28LcJuuvs1XPsdTXOmAw5ysQ+BMnLYeuKn + w7R4VCENtgVV8U1Oxa6bbcSdP1t6ikfRWVb/BI9nTSKb6Dam030hBuQ3skGfXbEHnXeGEUyHWqPX + S8b3k5ceXRCDV4fl3fPTU8WyO7j6B0KY9+kn/vP1IZynL/U/91e66OM8/O63+pOO/dGfJm7v2F39 + Mvt8pByOCXl5G0JVJuZPBKHGdjM+vrkzmJXEIDCvTRffXHzUWHI1dImvzwjLam6yJemCCa55kar6 + YdYWyRJ28GPFOr1lT1kjuUJiSMb4SaP+4oVL9i4ClPFspjfMySGXi/0OboTdQM2hmJzxcAsj1Knd + h7qvVGf0dT3HMKXDZvV3ljbM2T6GLfYQlvcDBOzUBgNa8w493fVnOEFzdGFCUEg+b+7MJl4Saji9 + dBV729nuSSIIGSzzJPDA8x1WUzqyBvjzKh8t9vqFtRIE0VwH+Lb2qwkqrAZbU9jiU7s/g0mgQQ6U + zTTiE1zUXiwr6ILqChqqv8cmnXKx2oGh9TOatEuTzrvMleB233RUdYhZMVWPbbDmF2zzEwZiv5QX + OLqWStc8q827axigpG+eePUL6Yyl6PKrj9WPmj1D0RSgoN9/cHCTqpDNBy1DF0/MsTlGSGvX+tt3 + tcCw/nh/2fxIxwbCcyAS/oZlZ8kl7lfGM3W4mLJpCJQS9mI5Y7e7TtrA7UUVltOloSlNGq3FUTaA + B2uTtZ63Gt28Qx2yQd14u3BkbKj9TQf394zH+sPWQtF5fjc/v0rPgb6kI6fPFzR8oYD1tb9yneVP + v/yGtSJIGVv7E/JZ96UKyGk/Fu+r9OuPZLuZFjDXZVkg4lcpVmfpwtja3+DdgB61OBWEf85DRd1g + V3h1bOHQUYBGaxxwxsJ9P7bMzaRi84mI9LZIT58FX8D1eTwhH0dtUd4yRLOmXvGaz3qW3U4erATr + iTNyJ+kYHrwATIf7GyuKalcTVEANl2M8Emie5YpLPhaUAifl6TEWzJDn754HmkE7eRt8QGAovW0B + ZGhQLO8kT2P10yIwChaJGndRdvjZrH3IZcuXHp6kZqOU6yoo+ZQjKKSndD7TeUI/PT/xYN+PaQA5 + YFbjjmy87hbOp9wPUErJhkzovrBpyN8evGJepUd5vw+HVT8l19g8iCiZX62z5UAAP31IFdhVC9om + AfjxFI1DaSpog2QDd6ge2HzmrUNljyPA2cUbqh31uza4YSRDzuYiqs7VUE3+w4jA+vweEJGlib7I + G6CqHwcaD4dvxVyiTzDowYeMaVaFJE52MYybPPvxEdb+8ot4mEOsvJGm8QG6ytLllKB1vLtq4p6T + AWwueFLrJKtOS1+9BKLGIdQp9LifIyWN4ME8W9QoI51NeS+7KOPnGXvMO/ZCUn1teN4pyiipqExn + u+U4VMnNE//y1xJgGSJlwphaFgn6Qft+L9B6XVqsHB5njak+48Dqz4mgPLueLi5s9/vUwd7zuD9q + w/u88cDqN/FRqnA/LY/dBt6Tm0oPFwVrzF62AZTI0SCCouvaqv8mGo5TR69GXaz1dnCh+O33eL1/ + JRKQGvDHo1C1bUJyY9vl589//QrwNzXZwV+/+8PrnOsnQL35LOghdBS2FBBwwD+TyONd+qxmOXiU + sDGIQRpjyrWJfB4bMHG54AnioaymwNnZ8FHzKvZ6o3dmsvgeerzIkcxPFQCSVF8T7oxJ9FCt1Wze + P9wc5p9KxiufYsPqd6GPFxXb8nuTzjX1XOnyPNxwgC4FGDCudGSkJ5meQjqGy5hpG7DWKz3hSwNm + aowmmEKkY8f6ypX4y0MjPiN8SjMt5PMqn+Dqf7AaCm+Nuy+NDo2NOBJJYzSkIW8NgLJHQOCiGg5H + iiEC244F1Ex5P138+1jC+upNv3wKpuyrGBB7S+4txaPpyZNXO9RrrYOjdX5ZvN3XUFPyAdt+4gO2 + mTcTDHtv9sCORWn3mnwb3Tj59uNR1fJ1OhUqg5DgP/565RFo5UneRgzegL2HYSMVhbYj+15m4Qzi + M/zxVOwp50/aF6fCQ3eHVWS7+telc78N9M5pSxYT5M7QnxUIZ/NQUe85PdKpPd5bSHJRpj/9JCv/ + BOZyvuHssYzOQpfnBn6VXlv9kMrEKldt+IjO1e89YNX8zKS1H2AHBamz1p8HVz+38pSHMz4jZsDE + nY/UniSVcWH4jeCkUccT96NaLWN0loBQfY7UTBOLzRUxOvjgdUBv63nhDUwZ+Er2oA+bLzV21YYG + Pl7DEd8fHy1dGnyB8GlcYnpe87EoPPLmx6uwa7YtW/NrB/agV+jaX6uh2FcyEt7nlzev+Z5d1+Yw + 795XqgTPHRvy3nRR8S1M/MvnU2/HF/hxyy1WNwathnujxvARhRVdeV+/DF47wF4Cbw/qJzVkiZfl + MPPKCKv1SwcMz1r+y+/4dKyCfvrIhQz998H+8RzGE/fpgp+ffaCTpQlAeJUQFJVL+FW/54O103dA + oX/0O6SheTOAHgwWznNpSlnX7U0oNuHBk8az4wieftdhID0M7BTPrdZ7AiqljjcGrCy1Hq7+o4HL + /XjE2pNFjN9mvgsH66ljb0qR0y6PaYMSRx/xkdw4xpGL3EGo3xevvJx7MH2zRger36P4UhuMPd2i + RSQdDjRb88qyPfEm3JnPM4ErH2VWXsbSyufxgQ8pm6Vcl/cHM7S87bLdVIuyi3x4LSKeHv3wEIof + iCNJaLaACDC5VDOz+0RSy/7igdoUwNT5dgK/pc2vz/vQfvUDl4S9PGBLF42ZVSb99ISavBY6PbjM + 9h+/dl71h628CDhv2ca3+W04nLu1DLBrt5rXg0Zm/CswGxi9ojvVnkxgZPWX8HAwPXxrunxlCaMH + y0WTsQtk2k/XFi2Af7rEEwLbdhis0g1YeaW36IfZmYfprMPffLmHRKxmPC4tNLdmShXrRUO6uFyL + vvkke2XGeazv9+EGBuLFwada0wGvZQcBHudq8PgdPFb8WxBjaE22TGa9L//No+z9kSOIPww9M9Jq + gOBh39b1BgcscTIl6Of3YztWHbbyGMAsbiHCwVRDHryRC56OMxIpbF/s2e/TDXhDBH/vAfnxu9HO + W2y7814jv3x8eR5vZDvfVCCck1GHOLi7XumEpTbtRKeDI+w4AnYZcT7FqXWh+mgOHo9zZ+VNvQy/ + PCsJ8vZyKK56tV95Mbbsetsz+dpE6G0doz96suzGaYLR4QvxgSdCuPKIDJ62OPUmY4/DSXntTLiu + ZxBAeben2jNq4fTe37B1lcZw5esFWn+fR4IQa4t/Ujg49L3vLXtfrTjGTjEMLfmNjeC1hNNz3gvA + y6K7t18iReMOe21A+/5uYidwq54ML0EGP15pnXU5XPtVISnnu4iNxGvTH0+FsulZHhpjoRpOskwA + 3hYWEa7sxdghlMr9b73ACe87NrZDIsCKyTXGX9yE00vqavg05YVUVUZ6qsWjDEPvyFb+cdSG19GI + IO/vLayt6xVzeZ8XWL+zL1myu5mueSwCWeDoWO8qli4jLgIUXU7pH37F76uNIe1apOFw/Xx7m5oN + zMVlj/XrLmTs1TYE/vjmJb/F/awY+wRm3NX/48+Y04Q17AXdx2v+Sn95Bwr8KyGTXX4clqpTBN19 + UpK596L+k6q7CMoUd169Dc7ays859PXzdJ3vZ8/eb3CBc+h7+H7ouHSJk10iDU2tUqPbf9jSp3qM + evjervrwDmc4EGG3jhc96fcnYO4nNfdrv6Xnc1BVwsrrUeYVEVU+dpzSN4sa2LS7gCpiMocrf1PR + j0+sfEcTGy4ygUeRQfPqzjsdV5nST3+pa2k4XXLOMeCp5z70sslqjezJFKHV/1BF79VwlmrUgZW3 + 4czScDiGYrlBaXVgVFn1ZqklM4dYzvf0cBGhM2Bzn8HW4Szq7ySiEW4a7L0D2OLt+HzfL4Wguui3 + /uYuaqOxxOwSyFJ2wMfLraoYO9o1zGvb9X7zPc+K1MLQUt+EGZ7r/PgOXPs/1mWCK8bkeANyLj7Q + o+mYjKu0NIapq59Jrafvft5d0wC+rzDF+HW0wGSwewd+/7eV7wNmD4cOts9coO5WyKpJaFsOHlPY + k0G2dG25l68aHiTqEaldjJQruV0JXz08kc02KdPl7FkJdI7f0Ju3iEvZ63pPdjQ3bZwtqqFxXQRl + 2Gx7CVv67tAL8auTf7wU304ZTOmPn/78jXXfONUgtAWHdDXzve1x/3Gm96bgkNXchZU/fZ1Rx50J + COpieqq2RirMherB1/NoesXNMkOB7xYd1c3eJvvHRwvFan7mv/yBr28tAkyIaghdyCJsRVOS/lnf + +c3/b3zW9aUEmihTPDR1jdbR5QbXwXO9xQQbjSmW2qKvdnsQAJoCsFfmyJBziwknq59lkV7baHvI + HHwbDSVc/TOEKw/EJ5svnfksVPGedZca37eXrpq52OtgaA9bmidp3w/LchJ++kk1cXozoo8zgRbz + AVbu0YtNP3/1+/xtkYdqdip7gk3c3b2ZjiBd66eB5/2jxI5X9WBkdhXDArglDjln6Ge93GbgvRcV + fHINHkw0WQLIndD553/DKe5hBv/+7Qr4r3/99df/+u0waNpH/l43Boz5PP7Hf28V+A/xP4Ymeb// + bEMgQ1Lkf//z7x0If3/7tvmO/3ts6/wz/P3PX/s/Ww3+Htsxef8/h/+13ui//vV/AAAA//8DAOKy + zGXeIAAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 93bd4e67791dfa9e-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:32:21 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '268' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-7d545f8f56-xh67c + x-envoy-upstream-service-time: + - '233' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999991' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_aee72a2d476c61f01211fa5b25537740 + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "system", "content": "You are Information Agent + with extensive role description that is longer than 80 characters. You have + access to specific knowledge sources.\nYour personal goal is: Provide information + based on knowledge sources\nTo give my best complete final answer to the task + respond using the exact following format:\n\nThought: I now can give a great + answer\nFinal Answer: Your final answer must be the great and the most complete + as possible, it must be outcome described.\n\nI MUST use these formats, my job + depends on it!"}, {"role": "user", "content": "\nCurrent Task: What is Brandon''s + favorite color?\n\nThis is the expected criteria for your final answer: Brandon''s + favorite color.\nyou MUST return the actual complete content as the final answer, + not a summary.Additional Information: Brandon''s favorite color is red and he + likes Mexican food.\n\nBegin! This is VERY important to you, use the tools available + and give your best Final Answer, your job depends on it!\n\nThought:"}], "model": + "gpt-4o", "stop": ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '1069' + content-type: + - application/json + cookie: + - __cf_bm=ZjI36hLyf9Da1Y8yeR1Zgg8XCD7rmT1aXbO_gEbPdNs-1746585140-1.0.1.1-TlQix1fCrHyIU6zIRsJvFZlp5S1YrZH1pM0JcFGHXsB7fOk_DfDwkz.r8NiFfBM6sBaLAYZNtXZ7L_6qPNeL22OhXTrbA5wIPyYNGUdE9aI; + _cfuvid=j1aSi.0AgeQ41HXT2FrDI_tx3yzmdoKTXlbNy_vIn0k-1746585140368-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFKxbtswEN31FQcuXezAUhU71uYMNToUHZqiRdNAoMmTxIbiESTlOAj8 + 7wUlx1LaBMgiQPfuPb57d08JAFOSFcBEw4NorZ5ff//q02X362ZjJG1/7B6X6dYefm623xrM2Cwy + aPcHRXhmXQhqrcagyAywcMgDRtV0lS8vry7TPO2BliTqSKttmOc0zxZZPl9czRfLE7EhJdCzAm4T + AICn/hstGokHVsBi9lxp0XteIyvOTQDMkY4Vxr1XPnAT2GwEBZmApnd901BXN6GAz2DoAQQ3UKs9 + Aoc6Wgdu/AM6gN/mkzJcw6b/L+DacSPJfPBQ8T05FRAEaXKgPDiUM+BGQoOg1T16+IIHFaUrInkx + deKw6jyPQZhO6wnAjaHAY5B9Bncn5HieWlNtHe38P1RWKaN8Uzrknkyc0AeyrEePCcBdn273IjBm + HbU2lIHusX8uXeeDHhv3OaLZ6gQGClxP6lk6e0WvlBi40n6yHya4aFCO1HGZvJOKJkAymfp/N69p + D5MrU79HfgSEQBtQltahVOLlxGObw3jub7WdU+4NM49urwSWQaGLm5BY8U4Pl8j8ow/YlpUyNTrr + 1HCOlS3XizTL5Hr1UbDkmPwFAAD//wMAUYDw9pcDAAA= + headers: + CF-RAY: + - 93bd4e6c1f115850-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:32:21 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 cf-cache-status: - DYNAMIC openai-organization: - crewai-iuxna1 openai-processing-ms: - - '1351' + - '290' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '294' x-ratelimit-limit-requests: - - '30000' + - '10000' x-ratelimit-limit-tokens: - - '150000000' + - '30000000' x-ratelimit-remaining-requests: - - '29999' + - '9999' x-ratelimit-remaining-tokens: - - '149999765' + - '29999765' x-ratelimit-reset-requests: - - 2ms + - 6ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_126a3481ff4c4d9e8e75ed2dacbe3719 - http_version: HTTP/1.1 - status_code: 200 + - req_e0c3819ab814496d457e48eacc4df51f + status: + code: 200 + message: OK version: 1 diff --git a/tests/cassettes/test_agent_with_knowledge_sources_generate_search_query.yaml b/tests/cassettes/test_agent_with_knowledge_sources_generate_search_query.yaml new file mode 100644 index 000000000..794f071c3 --- /dev/null +++ b/tests/cassettes/test_agent_with_knowledge_sources_generate_search_query.yaml @@ -0,0 +1,660 @@ +interactions: +- request: + body: '{"input": ["Brandon''s favorite color is red and he likes Mexican food."], + "model": "text-embedding-3-small", "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '137' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: !!binary | + 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 + headers: + CF-RAY: + - 93bd468618792506-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:26:58 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=b8RyPEId4yq9HJyuFnK7KNXV1hEa38vaf3KsPaYMi6U-1746584818-1.0.1.1-D2L05owANBA1NNJNxdD5avYizVIMB0Q9M_6PgN4YJzuXkQLOyORtRMDfNCF4SCptihGS_hISsNIh4LqfOcp9pQDRlLaFsYpAvHOaWt6teXk; + path=/; expires=Wed, 07-May-25 02:56:58 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=xH94XekAl_WXtZ8yJYk4wagWOpjufglIcgBHuIK4j5s-1746584818263-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '271' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-6fcbcbb5fd-rlx2b + x-envoy-upstream-service-time: + - '276' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999986' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_dfb1b7e20cfae7dd4c21a591f5989210 + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "system", "content": "Your goal is to rewrite the + user query so that it is optimized for retrieval from a vector database. Consider + how the query will be used to find relevant documents, and aim to make it more + specific and context-aware. \n\n Do not include any other text than the rewritten + query, especially any preamble or postamble and only add expected output format + if its relevant to the rewritten query. \n\n Focus on the key words of the intended + task and to retrieve the most relevant information. \n\n There will be some + extra context provided that might need to be removed such as expected_output + formats structured_outputs and other instructions."}, {"role": "user", "content": + "The original query is: What is Brandon''s favorite color?\n\nThis is the expected + criteria for your final answer: The answer to the question, in a format like + this: `{{name: str, favorite_color: str}}`\nyou MUST return the actual complete + content as the final answer, not a summary.."}], "model": "gpt-4o-mini", "stop": + ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '1054' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA4xSsW7bMBTc9RXEW7pYhaw6leylQJClU4AGyRIEAkM+yUwoPoJ8MloE/veAkmMp + aQp04cB7d7w7vpdMCDAadgLUXrLqvc0vb697eroKNzdey/hLF9XzdXm4uLqTZfUTVolBj0+o+I31 + VVHvLbIhN8EqoGRMqutq8/2i3tTregR60mgTrfOcbyjvjTN5WZSbvKjydX1i78kojLAT95kQQryM + Z/LpNP6GnShWbzc9xig7hN15SAgIZNMNyBhNZOkYVjOoyDG60fplkE6T+xJFKw8UDKNQZCn8WM4H + bIcok2c3WLsApHPEMmUenT6ckOPZm6XOB3qMH6jQGmfivgkoI7nkIzJ5GNFjJsTD2MHwLhb4QL3n + hukZx+fW23LSg7n6Ga1OGBNLuyRtV5/INRpZGhsXJYKSao96ps6Ny0EbWgDZIvTfZj7TnoIb1/2P + /AwohZ5RNz6gNup94HksYFrMf42dSx4NQ8RwMAobNhjSR2hs5WCndYH4JzL2TWtch8EHM+1M65vi + 27asy7LYFpAds1cAAAD//wMA3xmId0EDAAA= + headers: + CF-RAY: + - 93bd468ac97dcedd-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:26:58 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=RAnX9bxMu6FRFRvWLdkruoVeTpKeJSsewnbE5u1SKNc-1746584818-1.0.1.1-08O3HvJLNgXLW2GhIFer0bWIw7kc_bnco7201aq5kLNaI2.5R_LzcmmIHlEQmos6TsjWG..AYDzzeYQBts4AfDWCT__jWc1iMNREXvz_Bk4; + path=/; expires=Wed, 07-May-25 02:56:58 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=hVuA8E89306pCEvNIEtxK0bavBXUyyJLC45CNZ0NFcY-1746584818774-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '267' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '300' + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999769' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_9be67025184f64bbc77df86b89c5f894 + status: + code: 200 + message: OK +- request: + body: '{"input": ["Brandon''s favorite color?"], "model": "text-embedding-3-small", + "encoding_format": "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '104' + content-type: + - application/json + cookie: + - __cf_bm=b8RyPEId4yq9HJyuFnK7KNXV1hEa38vaf3KsPaYMi6U-1746584818-1.0.1.1-D2L05owANBA1NNJNxdD5avYizVIMB0Q9M_6PgN4YJzuXkQLOyORtRMDfNCF4SCptihGS_hISsNIh4LqfOcp9pQDRlLaFsYpAvHOaWt6teXk; + _cfuvid=xH94XekAl_WXtZ8yJYk4wagWOpjufglIcgBHuIK4j5s-1746584818263-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: !!binary | + H4sIAAAAAAAAA1R6SROyTLPl/vsVT7xb+oZMUsW3YxIRkEJBxI6ODlBkEpGhqqBu3P/eoU9HDxsX + QIAkmSfPOZn/+a8/f/7p86a4z//8+88/r3qa//lv32OPbM7++fef//6vP3/+/PnP3+//d2XR5cXj + Ub/L3+W/k/X7USz//PsP/3+O/N+L/v3nHy10PsRPcxuIYz6sIG03O6RXYmZOpt0pqpupCN1ta2+K + 2T5U1Gg2d8TiXAzYNTdb1V+PVxL4y4exz8UvwQOkRxSSJ4tWZ2tkKpuTicTBlRsXtnHarSCuWzyr + 8Xukk9e3ahtwIUF5NIA1fk8ZqD/yndw55DQYvzVRNRuDD/Jwh/O1q+ZYwffBJUfYrWDZhO2qCmzb + 4QTlN7B8vB1VcQJa5DzSyqOKN1nwJKknZL74FSx8MrfwwkdHdAzUEqzqZ+tDDT0zooO9ZK6Orqwg + AmVAvE8yRvh1ppPagBvB8527NWyD7ETNW8fGwD6xCKcF5OCsG/sAOI+7t67vA/4br9M48GCun6da + fSsdR4xB2edrsb9RVQVaRyxn64IFtEuq0mU6kui6e0VLGm0n2LVGhA6R30UCfT4MYLEpRIaVUrYc + l2cB6+QCiN9yXrPcxmKAxZO+SCjT2Vv0MS1hpRUFySFXeVQ7nGVYB+cuKB/RPl/X4pRu7waTMTjg + 1VwV99jD6+2iByUHhYYdz2kPa+0+EVQYMViot6/Vw7Zw8bIUCND94d7DPHy/CNo9p4adDpWv6p/u + HbB933hT7Wxt9TpoCJ0rvsqXOWl4NUFbg6T9E+a09NEAw3QwyYH7kIbGfG+oFPY8CmUjjeh4ag3o + hZNFTjuReYJX1zx4QfpGns3zDTUymMFFjUOyy9wLmDAeJpgnsYcuo1mNrJw6ET5AdkSaC9/N/Ny8 + FFh212dwPTveNx6ZDCctGYnzOB4bCZ6UBPI62QWcHzgNW5owUU1NrJCOhiOTqtVp4ZGaJbHmuzi+ + 04vjqq/D1ibIPlYR3atSpjYFZ6Br/Nzn5HVOVjV0XQUd7feNSSF4WoBu6j3eEv+YSwsyeCilmwzL + NyPzhOwVBZBkRYSlQmzyCb5UGUqhYpPd8X0yv/Evf89HXnIS2Rw7eQ+54dIRywzNSIKnNYbf+KNg + N6WM3yw5B5zS8P/+XywQRYbPOyjxBgNtFDPABvh2spEYM28x5lVWqr6yNkbXi+GMVFhuCaSJfSX7 + s+OZS9UfeHg5rw65Fk7QYAhOoqr49Qtdju/FZJ+LVapbRxVJoah3sKgbM4DZpSfol89DZA0h5Er7 + iE58OkfUJ34N59sux8vWNjxh/xRsGMVhg5KLemjoR3NLyEwFEuNYJIBPyN6BJpsM9FSAZdKzJHbw + E2MPoYIeGsE+aYW6d7kr8atqYoT6F6iiTXAmaCx0wISsl+HeWc9ffHEBlbTAAEZOFWJvDb3heSle + VfvoBOQUG5to0Z4ght7n3gWC1Nk5aWRLho8T9yC7d44i8XC3Wugn7yrgztniMa24KzDE1ZlcrTjM + cZt/NGXoUIHs3ftp4t08JX/z86hx51HaZE2tajtfJ9dCbKJfvNXv/YgpbA5MDMGiwfi1iOSuWBeP + YfvWw2x73f6+hyfJykb7/T/0zJ1rJPDJq1Nr7xYhJxGXCBstcOHUEhMFxPEZ/w64EH7xErnKxhp/ + 9Q648/lMdro15ROQihKS8tqQo4iShu7VTQbrVrCIb7HFW5v50CuczBNitNrgkXP6EOFhe3fxBsJb + RLR1SIFd1W9k3ayK4Zjpraqn4Ib2KJibicXnXv3ia8AP9c1cEHYUqHBYxtDqH80SnkwLLpFcooP9 + 0UfpW1/wXDSYOA9Q52xfJL0an62JPIcvvjWiWCid29Yo2ZtOI9WHVweHRYjJbqqEkfFmV0M7pVYg + KaIb8VTzz5BGyMJL5+ueiI63CXzxnOziyTCla252Kt/tHmgHJ3+kurQGanHwHeJowyuX3uRRwM1o + GsSysJTTxLxjmHpNTHQeBM38q4+jNpXk3JGIsbHDBrRswuFyaDW2ZvtUUeNBCIgWH/VcFEBoQb2t + ECl6aOW8cMI9tPEYBQCfVDZdYiGGEGgpcu/CJl/1QexUd3tPyQ21sbdYV1NWK+1ekKc3XjzJsEyo + lpI2B3RoNSBs7gcOVJvlgfL7bgHk9OEK2HJcgQ79o2lGon7OimKzzbcfnpn4CF0bLsfYQDegvMal + 3WkdFPyPgrdC8xnJ5sQC9W4sMnL85yWnwnKKVXsTV8Ra3q5Jedze1UKuHGJvgsFk2GxXOLbmGx36 + c2hSKuUywDcqkdPqtw1VroczcMfhQdwdLke+/gQxuIz1QOwmaDwpvxwMsL3eN6TIDDOfe3iy1E8Z + 60RTdNMUkQ5LOCVHhbgnbHkC3LNW/eIdbrK6NakzJSt875qUGFfhDMRL1UN1e6+vyFW3hrd21SuB + xzf0AmixxSSrWrvqvg5M5JXhLhK440YBuK4y4g78sWHsE/fwx29uFYgAf8g4F+rHqCHWM3Sj5UGX + Mzic/SfJb8mbzTFvW7AXGp64G0Xypq2zCQBnD3dk8dV7pMpz2/3wCcsvuuZTorSxOixSTJwnvEYS + K6cYyrdBxJBDfcNSbjfBMb0txOvuR8b83OFAROSUhJ/IBbz2KDM1CdsTikvM5WtIc1GJEUqRkxVm + s6Kt5UAhjSiyyu0CyBXhDJqCvP++7ytipk1FNRILEWlH8WVK+WMbw6tBWxL3Vestet37cLOtPbS/ + mo/mh9dqe8UMrxpYvSWjcgqtoP+QxJlCb5X0ewG+/REdnsTz+lAZOnALMgFpppSMIu/LFDrD6YXX + O9iac3avZbjKJxsZhY88Atd9q2KPg2i/0DaafOUzwVTrZqzozWwOizwkcNdMBQkFkYxLUs936Nht + jpwPeAE6PvRAJZw4Eo0e+3ztZreEW0ZNlNunKF9wWKbQn+J9cDOJZeINUWvloeANCZZYGNngxz5c + RpUPBNddc9zNbg1fC68hC+QWE2tuOINtgO/IaAQxWty+C2Eevl7EnfFofutfg6vneIHs6XouRCeP + A6/y2ZKDTm85e5hlCnmZo+iLb9FyEVcI90l7JLYmad58Hu8yvIGKIsPwHZMeMtGBab1fgx9+0Zz/ + UNiLR4Pku4Zrpv7hxODHt8zJQ6YgzSUPb8gyg0tYBQ29+UcFHvTqRFIo2EzafwAPOnyaSGQQhS3c + cSMDg2kdik930mDh7bZgErITCr71x1tC4AO0ZClxz6ddxHb6FcIMIp/YUTdH81wfDOgM0QsL9LAH + 4tBGtvp8UkauerYyTM4sVkXU5HhrDQmgLD4P6o/f/fCe3zWvFl619olSpo+A//EDpaEnct29umiF + hO9VoxiOxJht6jFVbSlsm/iDLlb1jfdqBrCJpTPabThpXGitywrmDgi/tugImGGZnCqFsk2MvYDy + 5X1cViXmww3J9aRkQhzJIuTmYItF+NRydtaorFrb9zPgL+/GFGh9kJVXmqFAufpXwMdqmijJuktI + npwSIOI2hyDbXrbIvHtjQ0/lbYB9bBDkjrWRT+Yhp2DsZIU8jpMLpNc5obBa+wV58k4GS9FrHBT4 + lidewYNxiW7wDAnHjwRVw9tjgp1n21er7Uhehq98KfHxDGXPm0ngB864Zlt7hbdXX5Hd5516bC7r + DnZbUCOX9v3Irg9aqJJpewTxug1EfR7vMNyf3iRNImouKCh8GM9ThdeN8MjJgHRL/fIPdNzLBKyJ + Lp6VrbMRkQc53RT2T9WCZ/O9x9tvPq+Jzp0Be9YLcgO+a5ju8yGshNJCD1ZOIymnjodhlXUEzU/J + XBJsDEBlO0CCV7yaU2X7PiyeuyvJrMfQLHFERTWtdyu5e3Pw49cpTN98Sg5BxHmTkfGZim+rRAL5 + 1jWUjuIEv/gdwJKlJhnMRoaiEIboqqu8t2puFav34jZjNVkpY8X5osHayyMsa88T6G+BQiFejAYF + 0bj3/urDbz4FlMRPRp/jmihavguRMfMtGILN/hvfbY3ubT7kL2WAPNyNbEX6V+/hWf4UIOHhB7lS + vQOL9rDvQCyMlljvPh/xLd2WQDc1l+QFn4+L+ZIG9boBBab02EfsroHyL58/AP2R85Ey3uG4Ge+Y + aXjH2E5/cnAjDjI6ikgc13TIHHh7DRXa11HtkbZrz+pciDq6bDipmQYpc2C8ja8ohEAbx+/3hXz2 + eAdLS68Nc3zOgJzJDnjrnz8mcdLcB9ne64KtUWCTNbKvKLMZ+MiXOz2nnaYP0FFFmzieXuWMv0ID + DI8CBPAp76J1IasGw4x30F5xhBFf6aOD6T2okcl2fkTts89BHPDo10/ZKs2BDGXODNAxQL4nlWYV + qnPgMmQN9dac194O1MSgCTm665z3lZqL4NJ/rmR/ysR8Bu02hWnyhEiv9eO44tC+w6cejZh9+bRQ + 4mMIX53vojztI3Oh9UGBFPNbdDFZ4rHc5jjIl0FAPFJHYG1S3oWBnzQBj10vYqp2mtRXmiJUfPn+ + mnNlDUue71Fs1EGDNbdKgH48Nd/+swPzoyY+9NIlJZpMZ3Ot328F4mu3Ek+0zEZwPNIBUQsG4juc + Nf7w8McvUbB36og2IwjgpXltvv2g9OiY3WP4qtyVfOuRkVHtMwiTQcMrvtreeqWPFn7u7EkQvfHj + rLr9/ZefxMl1i0m/fPniAXH15mjS0t8PMMvwHgv3avVw+B5r0LVahAzVjppBF/MV5pZKvveLG1rZ + fgBj8WEhm5iRJ3RG3MHJqGkAo0s5rqJrUdgc0J1YidtGsxVfNSgYaYU0NthsbS08gIPenLCQyW4j + gauwQnWqHiRpFivi1fgSwmktOWIb8sVkNtmEAGBiB6FlDDl9ZCEPo7c6o+Ag+ZEoW3oMY/FpoeAV + n80v/8igAwY92IwRzrFyGURQiFeT+PVqAOGgBAosF/VC3MwW8l7Grxg+7PiNUC5OHjW6WweV7afE + KzvLY1/zTakmk2+jXOt9b8E7z4cI+RY5Z3o+kvowt1AY+RNyK6+LcETvGIRn8CDGp3gAelhoDd54 + 4+CJz48Md9WcQMm0PHRw7TJfLkYawPCoHUl4E51xfDTq8KsXTENjZsumVUJ4FKhNnvNT8uiLnzKl + 3Moaun/10t/3cfvFRdZ8T8a14KpMFXeh8fMHwCLfNV/VNVciewn6jG4dKVA5YXMnpnASzOnLXxUh + DO4BhceR0clhGM7kIwciC7pmDQolAd2ucoN5K/WMBjHrIFdax4CFnuMxon5C+Mq6mPzw5qdPFeua + +8ES3K6MteTeQUEnEbK+/RPDtaqhI4D8y//EkYGrQGEGjz666GvlLQFvxSpI3Q+WLkbfsOG6zZTt + 66xgSZY2I50Neob9wdr/xfvv+wVqXoUMXdRMj8SvH/jLZ+Qcj4PJnz46hEnYnb76rjaHiSEMwirt + 8DY9T+MCbrEPJyE9kSh6MG8KynBV7cgsvvxWHZfzGCtwkV4D8tx7xyjGNVbdfbhDN0BWb0mCJ4T8 + 6AhY/NbD4vLmXX02Dw6rc2yZxJuqTj0RH6Nbut+a9Oz7LqTbpUIet0lMQT5yDpTeRYPpU3qM7Omf + OrhgYU+O1AzMJb5XjvrYjbcAPrbZSNORdmp43j4IGujRW5NUHqAwiifiUw552NEVCiHJaoIK+hlX + zx0hPNIJkwNRDHMdCA3lc22F6Kye3h7zKj+DrwOwv/6mFy2fgRYqKIGPtx+tBYv52vSKvgsQMjnl + nq/mXk3gvvbNQIXdyr71k0Bx5J9E/+q51XMbDrrociM/fCf5Rdf+6ttD/ekbxi7IBSeXT0j6SHVT + ZAIXAwf0OkkMWTAXttE66A+Oga7ffMLuXrIgbZQzOUZylPOXWEigtObe14+bGWvM2oHTh+bkHtzl + aN4/BUt17C4PODlgJuGbWwAbsmyJ230ykzm+qKnK0vroDtnGXDcgw6DxLYLulCMmbq2uh+9pL+DY + SQ6juH2bdxioQo98bC3jHJ5MWzVewYiM6qR5K+HmFdj7vP/y897sm8aQwY//m9GDmdQgugxfloSR + K/KLSd3Dowblsrng5C7tzeXnZx5Zp+MTRz7R6sxz8IsvKr78Y6WX3odffR5sHcHNhWiHKfzqE+Sm + uzKaVdZpCr3kB2R3ow6o+9ECWEn4gPbFiJi0XIG79VKWIstJDg3lFX1QfUO+In+Ueybwt3Px80sC + enMYWL79FTjPWCX3XfVi86fWHLVL/JQ83uXHXI3bBSo/f8wvmWziX79JumcZvKJQjn7nwVcfBuC2 + PZh8rTkUBm/uRnan1WpEWZ4sSBpfJI7XGs1S0dWFP7/7UA4qYMGhT/7i+R6LNsPPIVeU6oa0QG7a + T7OYfVvDYm5LcqzisplyNbMh3u4lFNjZPNJt/5HBT997t2QP6PbhYyguMwnWr34Sja3Wg1+9G6eP + G61VXrp/+aHBe5W5+lZZq2jjn1F04EdAxf5jgJ8etV7WK18Eusm2pLMOyBss7dcvWvidL2Dl6kts + 5dKwhcoms4NqHHg24dea/vX3dSI4Ed0sOYTn4dAGbbzF+eJCsEKgBgghC47RmoW6r6KSuFi5KlPD + vvobTIX7wuI6vnIGmoyDwYvG5Iqd1RyfGp+pNA3vJBtrI2KSf52UzvhIAfvmH8ty6w4F6b7Hy6vw + o/HupxP44gVeluieT1//AYjCOURaEojRfMNmCS6bI0/8XXLOmSL1dyC97w0yNsIjouTUKjC6XyRk + BL7XjPXFpdB2uUOw7R/myN7mqEEnThN0dNdjxIeLEoIvf/j5n953njCot8P1gQzl+mleX7yHXSUG + 6MgHVUOJA1twuD/lQFzUcJzSkbZq7k4X4kikbGi4rCHMlvML2Xuzb5Yz1qkqBcYaiO10NdmqqKHy + 9d/xOtuhyQcxaKEZV2PA2gay7/kz+PrLxDtsX82y3a+T6pi6ggL5ZjfrqQA+OAtLhoyrsIIpfXQ1 + GFv9jX75OS2KtkLj1gmYa5xPRKIGGFAPxR0ySX9sVqG9TMpPDxyATxl9v+igroV0+enniLd8p4ej + UdfE//KlhTtKMrxKvEvyg0cZuU2zDcEx0DF3iEeTlObnDIRt7yMU3+ZxahpDgew+FgHzdjqQuos3 + wFXIGQlwJnv05u8U0AYwRPHPX4Vho8B3xd+xuFvXhp2EfIB0/w7IcX/B4+IEcfHjr+TXn7/40MPH + HYlIjwQ9X79+CDhYaUscctuOS+rpmWL2to90Pj3ma+qSAkrFpAWc+9JN9p0/qD9+f/j2V5Z11QAZ + QxDZm2XM1932UIKPfhjIUZ/eEeWuhqNa5ytP9s6zYXOTVAG8hK1JDOV6GJfyKGtQrUOLxGgXRaIZ + ZSXUNw+R6JWomOTLLwDYRQk5oDY2KfWqQqXnSsQdWfZMCDafGih++SLhj2/8/OoPu6rE8np+XGeB + 7/7iz1OhtMGkCGu1vVOP7MRLGC0342ZDbtR4lE0PwVx+84X2POa4t8UZUEsbC3hDtvmdL1SMSP5z + gsknZiRqmztbbtisFVUWK3QIouLrh8V3db7tc/ylGc0iH0UXuoY/I4eea3Ntkn0Ibkt4JfoSwZwW + p7JUlwrnxAtDnf2d511vVx3tjbFn82lTp5D4Q0qOcLEjfvLKVt341TZQ50M48j6xapgomo6877yU + uo/GgE+L91GcVtooTZddBre9eyS7Kzebf/X1N/7IvGOfsRBcLQjCIxeI1Xobhbx3bKjvfER2UZjm + tXgWbHh82XIgBJcd4GtNW0ElTQf0zCOXSfY6OTBlRYBM80FG2uDSUtu9+UK691RyvKSbAZ6Su4+8 + O+uaQSCrrGp8o+OXqhrjb97306OBRGMF4CEVFODubI3YL/Xo8bJi1PAFd1+LKzQjPlTqVu3criaH + 5LMzv/rxrOYL1NHztd+Bv3yzw9GEfv7PGrgTD1fP9TD39fuWi+fUwLymXMCxSIvEdf/U4JcPIRS8 + 1maRw0ZTv/WJfn71Ejw5HjavskTpV+9JR8601Wve2Mjn8yOg7akO1e/9kasJaU4HKXPl6L2ZkQ72 + V5OKD1NU8bVdySnaT834Ohcr3PQeIYZ3xt5X7/pQ64GHAkPFjLlvJMIp50rkHF5XtoSvtIVK6ubI + knYqoCigrvrXP5OINi6Yqj3cR1hB+5sKPJY0TIbXIr2hvGeDtwhh7YCv3sbiWi5s2fZ7CP/5bQX8 + 17/+/Pkfvw2Drn8Ur+9iwFws83/8n1WB/5D+Y+qy1+vvGgKesrL459//ewPhn8/Yd5/5f859W7yn + f/79Z/t31eCfuZ+z1/9z+F/fB/3Xv/4XAAAA//8DAHXQUXneIAAA + headers: + CF-RAY: + - 93bd468e08302506-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:26:59 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '140' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-678b766599-k7s96 + x-envoy-upstream-service-time: + - '61' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999994' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_22e020337220a8384462c62d1e51bcc6 + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "system", "content": "You are Information Agent + with extensive role description that is longer than 80 characters. You have + access to specific knowledge sources.\nYour personal goal is: Provide information + based on knowledge sources\nTo give my best complete final answer to the task + respond using the exact following format:\n\nThought: I now can give a great + answer\nFinal Answer: Your final answer must be the great and the most complete + as possible, it must be outcome described.\n\nI MUST use these formats, my job + depends on it!"}, {"role": "user", "content": "\nCurrent Task: What is Brandon''s + favorite color?\n\nThis is the expected criteria for your final answer: The + answer to the question, in a format like this: `{{name: str, favorite_color: + str}}`\nyou MUST return the actual complete content as the final answer, not + a summary.Additional Information: Brandon''s favorite color is red and he likes + Mexican food.\n\nBegin! This is VERY important to you, use the tools available + and give your best Final Answer, your job depends on it!\n\nThought:"}], "model": + "gpt-4o-mini", "stop": ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '1136' + content-type: + - application/json + cookie: + - __cf_bm=RAnX9bxMu6FRFRvWLdkruoVeTpKeJSsewnbE5u1SKNc-1746584818-1.0.1.1-08O3HvJLNgXLW2GhIFer0bWIw7kc_bnco7201aq5kLNaI2.5R_LzcmmIHlEQmos6TsjWG..AYDzzeYQBts4AfDWCT__jWc1iMNREXvz_Bk4; + _cfuvid=hVuA8E89306pCEvNIEtxK0bavBXUyyJLC45CNZ0NFcY-1746584818774-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFNNb+IwEL3nV4x8JqsQYAu50UOl7mG/JE5LFU3tSXBxPJZt6K4Q/33l + QCHtdqVeInnevOf3ZpxDBiC0EhUIucEoO2fy29W3zq2+L2dmpb4sFj+2X5dm80Td9qe8j2KUGPz4 + RDK+sD5J7pyhqNmeYOkJIyXV8c3082w+nY8XPdCxIpNorYv5lPNOW52XRTnNi5t8PD+zN6wlBVHB + rwwA4NB/k0+r6LeooBi9VDoKAVsS1aUJQHg2qSIwBB0i2pPnMyjZRrK99Xuw/AwSLbR6T4DQJtuA + NjyTB1jbO23RwLI/V3A4WOyogrW49WgV27UYQYN79jpSLdmwT6AntRbH4/BOT80uYMptd8YMALSW + I6a59Wkfzsjxks9w6zw/hjdU0Wirw6b2hIFtyhIiO9GjxwzgoZ/j7tVohPPcuVhH3lJ/XTmenPTE + dX0DdHYGI0c0g/pkPnpHr1YUUZsw2ISQKDekrtTr2nCnNA+AbJD6XzfvaZ+Sa9t+RP4KSEkukqqd + J6Xl68TXNk/pdf+v7TLl3rAI5PdaUh01+bQJRQ3uzPk/CX9CpK5utG3JO69PD69xdTFZlPOyLBaF + yI7ZXwAAAP//AwCISUFdhgMAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 93bd46929f55cedd-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:27:00 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '394' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '399' + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999749' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_08f3bc0843f6a5d9afa8380d28251c47 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold.yaml b/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold.yaml index 5b73238c1..994bfd855 100644 --- a/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold.yaml +++ b/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold.yaml @@ -6,7 +6,7 @@ interactions: accept: - application/json accept-encoding: - - gzip, deflate, zstd + - gzip, deflate connection: - keep-alive content-length: @@ -151,7 +151,7 @@ interactions: 6NrP9D+nrsnf4z///rMV/t41+GfqpvT1/z7/1/dV//Wv/wUAAP//AwBcfFVx4CAAAA== headers: CF-RAY: - - 931fcf607c16eb34-SJC + - 93bd535cca31f973-SJC Connection: - keep-alive Content-Encoding: @@ -159,14 +159,14 @@ interactions: Content-Type: - application/json Date: - - Thu, 17 Apr 2025 23:47:53 GMT + - Wed, 07 May 2025 02:35:43 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=CncSMPCav.9EJL3emmM0sTqugx5GN6_Oy8JPFBssVho-1744933673-1.0.1.1-Q1XMvHbQdrfEWkkCYeeNHwFdZ1NpjAGJ_0jOUYIk_APelFe7nCanjW_xlOj12b3JQql9.iWQDiHvCeYJDTWkdxnNiMQOEiFMYHX5YZXUuJs; - path=/; expires=Fri, 18-Apr-25 00:17:53 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=FaqN2sfsTata5eZF3jpzsswr9Ry6.aLOWPP..HstyKk-1746585343-1.0.1.1-9IGOA.WxYd0mtZoXXs5PV_DSi6IzwCB.H8l4mQxLdl3V1cQ9rGr5FSQPLoDVJA5uPwxduxFEbLVxJobTW2J_P0iBVcEQSvxcMnsJ8Jtnsxk; + path=/; expires=Wed, 07-May-25 03:05:43 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=unfPTYCpF5COtm5PuZDuaJqlhefP0iibfjsXHc9lKq0-1744933673515-0.0.1.1-604800000; + - _cfuvid=SlYSO8wQlhrJsTTYoTXd7IBl_D9ZddMlIzW1PTFiZIE-1746585343627-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -185,15 +185,15 @@ interactions: openai-organization: - crewai-iuxna1 openai-processing-ms: - - '75' + - '38' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload via: - - envoy-router-8687b6cbdb-4qpmr + - envoy-router-6fcbcbb5fd-pxw6t x-envoy-upstream-service-time: - - '46' + - '41' x-ratelimit-limit-requests: - '10000' x-ratelimit-limit-tokens: @@ -207,32 +207,33 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_b8c884a7fe2bd4732903ecbdc632576d + - req_39d01dc72178a8952d00ba36c7512521 status: code: 200 message: OK - request: - body: '{"messages": [{"role": "system", "content": "You are Information Agent. - You have access to specific knowledge sources.\nYour personal goal is: Provide - information based on knowledge sources\nTo give my best complete final answer - to the task respond using the exact following format:\n\nThought: I now can - give a great answer\nFinal Answer: Your final answer must be the great and the - most complete as possible, it must be outcome described.\n\nI MUST use these - formats, my job depends on it!"}, {"role": "user", "content": "\nCurrent Task: - What is Brandon''s favorite color?\n\nThis is the expected criteria for your - final answer: Brandon''s favorite color.\nyou MUST return the actual complete - content as the final answer, not a summary.\n\nBegin! This is VERY important - to you, use the tools available and give your best Final Answer, your job depends - on it!\n\nThought:"}], "model": "gpt-4o-mini", "stop": ["\nObservation:"]}' + body: '{"messages": [{"role": "system", "content": "Your goal is to rewrite the + user query so that it is optimized for retrieval from a vector database. Consider + how the query will be used to find relevant documents, and aim to make it more + specific and context-aware. \n\n Do not include any other text than the rewritten + query, especially any preamble or postamble and only add expected output format + if its relevant to the rewritten query. \n\n Focus on the key words of the intended + task and to retrieve the most relevant information. \n\n There will be some + extra context provided that might need to be removed such as expected_output + formats structured_outputs and other instructions."}, {"role": "user", "content": + "The original query is: What is Brandon''s favorite color?\n\nThis is the expected + criteria for your final answer: Brandon''s favorite color.\nyou MUST return + the actual complete content as the final answer, not a summary.."}], "model": + "gpt-4o-mini", "stop": ["\nObservation:"]}' headers: accept: - application/json accept-encoding: - - gzip, deflate, zstd + - gzip, deflate connection: - keep-alive content-length: - - '926' + - '992' content-type: - application/json host: @@ -264,18 +265,19 @@ interactions: response: body: string: !!binary | - H4sIAAAAAAAAAwAAAP//jJNNi9swEIbv+RWDLr0ki/NBvm5NYUsplFK29NAuZiKNnWlkjVaSk02X - /PdiJxtn2y30YrCeecfvvCM/9QAUG7UEpTeYdOXtYPXp7vbLw7evm4ePmObvt/jrsVgVn9/5dbhj - 1W8Usv5JOj2rbrRU3lJicSesA2GiputwNpksxuPpbNyCSgzZRlb6NJjIoGLHg1E2mgyy2WA4P6s3 - wpqiWsL3HgDAU/tsfDpDj2oJWf/5pKIYsSS1vBQBqCC2OVEYI8eELql+B7W4RK61/gGc7EGjg5J3 - BAhlYxvQxT0FgB/ulh1aeNu+L2EV0BlxbyIUuJPAiUCLlQAcwUkCX68ta3sAI7quyCUywA72bMge - AHfIFteWYOtkb8mUBFHqoCneXPsLVNQRm4xcbe0VQOckYZNxm8z9mRwvWVgpfZB1/EOqCnYcN3kg - jOKauWMSr1p67AHct5nXL2JUPkjlU55kS+3nhtP5qZ/qVt3R0fQMkyS0V6rFpP9Kv9xQQrbxamtK - o96Q6aTdirE2LFegdzX1325e632anF35P+07oDX5RCb3gQzrlxN3ZYGaP+FfZZeUW8MqUtixpjwx - hWYThgqs7el+qniIiaq8YFdS8IFPl7TweTZejOajUbbIVO/Y+w0AAP//AwA4a1/QsgMAAA== + H4sIAAAAAAAAAwAAAP//jFJNa9wwFLz7V4h36WVdvF5nv46BQEsPpYWeSjCK9GwrlfVU6XlpCfvf + i+zN2klT6EUHzZvRzOg9ZUKA0XAUoDrJqvc2v/32+fTh68e7bel/UtXFR6/vKv+FP6191cMqMejh + ERU/s94r6r1FNuQmWAWUjEl1vau2N/ubTbUZgZ402kRrPecV5b1xJi+LssqLXb7eX9gdGYURjuJ7 + JoQQT+OZfDqNv+AoitXzTY8xyhbheB0SAgLZdAMyRhNZOobVDCpyjG60fhuk0+TeRdHIEwXDKBRZ + CsvxgM0QZbLsBmsXgHSOWKbIo9H7C3K+WrPU+kAP8RUVGuNM7OqAMpJLNiKThxE9Z0LcjxUML1KB + D9R7rpl+4PjcereZ9GBufka3F4yJpV2SDqs35GqNLI2Niw5BSdWhnqlz4XLQhhZAtgj9t5m3tKfg + xrX/Iz8DSqFn1LUPqI16GXgeC5j28l9j15JHwxAxnIzCmg2G9BEaGznYaVsg/o6Mfd0Y12LwwUwr + 0/i62BzKfVkWhwKyc/YHAAD//wMAwl9O/EADAAA= headers: + CF-Cache-Status: + - DYNAMIC CF-RAY: - - 931fcf649bdbed40-SJC + - 93bd535e5f0b3ad4-SJC Connection: - keep-alive Content-Encoding: @@ -283,14 +285,14 @@ interactions: Content-Type: - application/json Date: - - Thu, 17 Apr 2025 23:47:54 GMT + - Wed, 07 May 2025 02:35:43 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=8vySwO0xqpm0u93_1_rXQwTeEIWa2ei3_CD5sAdoo3o-1744933674-1.0.1.1-iqZDpH5poOUp4Rcnhfrb0N2Z0c2662RBiPEcx_gefNW.m3tBA3qyFa8tmFv7PitH8u9vyYK7jxUwy4lPiSi830QWNbTMgCMTbrJ7iaUV7hY; - path=/; expires=Fri, 18-Apr-25 00:17:54 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=4ExRXOhgXGvPCnJZJFlvggG1kkRKGLpJmVtf53soQhg-1746585343-1.0.1.1-X3_EsGB.4aHojKVKihPI6WFlCtq43Qvk.iFgVlsU18nGDyeau8Mi0Y.LCQ8J8.g512gWoCQCEakoWWjNpR4G.sMDqDrKit3KUFaL71iPZXo; + path=/; expires=Wed, 07-May-25 03:05:43 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=IXAyT8eWpFERM53ngcYNmaqhocfGbOHWSoe7SFNdoGI-1744933674288-0.0.1.1-604800000; + - _cfuvid=vNgB2gnZiY_kSsrGNv.zug22PCkhqeyHmMQUQ5_FfM8-1746585343998-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -300,16 +302,133 @@ interactions: - X-Request-ID alt-svc: - h3=":443"; ma=86400 + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '167' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '174' + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999783' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_efb615e12a042605322c615ab896925c + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "system", "content": "You are Information Agent. + You have access to specific knowledge sources.\nYour personal goal is: Provide + information based on knowledge sources\nTo give my best complete final answer + to the task respond using the exact following format:\n\nThought: I now can + give a great answer\nFinal Answer: Your final answer must be the great and the + most complete as possible, it must be outcome described.\n\nI MUST use these + formats, my job depends on it!"}, {"role": "user", "content": "\nCurrent Task: + What is Brandon''s favorite color?\n\nThis is the expected criteria for your + final answer: Brandon''s favorite color.\nyou MUST return the actual complete + content as the final answer, not a summary.\n\nBegin! This is VERY important + to you, use the tools available and give your best Final Answer, your job depends + on it!\n\nThought:"}], "model": "gpt-4o-mini", "stop": ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '926' + content-type: + - application/json + cookie: + - __cf_bm=4ExRXOhgXGvPCnJZJFlvggG1kkRKGLpJmVtf53soQhg-1746585343-1.0.1.1-X3_EsGB.4aHojKVKihPI6WFlCtq43Qvk.iFgVlsU18nGDyeau8Mi0Y.LCQ8J8.g512gWoCQCEakoWWjNpR4G.sMDqDrKit3KUFaL71iPZXo; + _cfuvid=vNgB2gnZiY_kSsrGNv.zug22PCkhqeyHmMQUQ5_FfM8-1746585343998-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA4xTTU/bQBC951eM9tJLghITIORWVKFSDq0qoR5aZE12x/aW9Yy7O06IEP+9shPi + 0FKpF0ueN+/tm6+nEYDxzizB2ArV1k2YXN19Xt/cVtnjh+2XbLH99W399a759HFzy8Xs0Yw7hqx+ + ktUX1omVugmkXngH20io1KnOLubnZ4uz0/m8B2pxFDpa2ehkLpPas59k02w+mV5MZos9uxJvKZkl + fB8BADz1384nO3o0S5iOXyI1pYQlmeUhCcBECV3EYEo+KbKa8QBaYSXurd8AywYsMpR+TYBQdrYB + OW0oAvzga88Y4H3/v4SriOyE3yUocC3RK4GVIBF8AhaFpl0Fb8MWnNi2JlZy4Bms1LVw2AKu0Qdc + BYIHlk0gVxIkaaOldALXEgGtbSMqgedCYo1dP8fgFTbSBgcrghUlBRXA9PBiB5yPZDVsQSJY4dQG + hYZiks77Xh82FUUCrXw6Focat51sqjCSOzluU6SiTdiNitsQjgBkFu3Z/YDu98jzYSRByibKKv1B + NYVnn6o8Eibhrv1JpTE9+jwCuO9H376apmmi1I3mKg/UPzc7X+z0zLBxAzq/3IMqimGIZ7OL8Rt6 + uSNFH9LR8hiLtiI3UIdNw9Z5OQJGR1X/7eYt7V3lnsv/kR8Aa6lRcnkTyXn7uuIhLVJ3kP9KO3S5 + N2wSxbW3lKun2E3CUYFt2J2JSdukVOeF55JiE/3uVoomn55eZossm15Ozeh59BsAAP//AwAaTaZd + OQQAAA== + headers: + CF-RAY: + - 93bd53604e3f3ad4-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:35:45 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 cf-cache-status: - DYNAMIC openai-organization: - crewai-iuxna1 openai-processing-ms: - - '489' + - '933' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '936' x-ratelimit-limit-requests: - '30000' x-ratelimit-limit-tokens: @@ -317,13 +436,13 @@ interactions: x-ratelimit-remaining-requests: - '29999' x-ratelimit-remaining-tokens: - - '149999801' + - '149999802' x-ratelimit-reset-requests: - 2ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_151f9d0b786f2022f249ee20ea108b43 + - req_0001c38df543cc383617c370087f0ee3 status: code: 200 message: OK diff --git a/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold_default.yaml b/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold_default.yaml index cea659823..d818e4521 100644 --- a/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold_default.yaml +++ b/tests/cassettes/test_agent_with_knowledge_sources_with_query_limit_and_score_threshold_default.yaml @@ -6,7 +6,7 @@ interactions: accept: - application/json accept-encoding: - - gzip, deflate, zstd + - gzip, deflate connection: - keep-alive content-length: @@ -150,8 +150,10 @@ interactions: Mj9mH/7zuxXwX//68+d//G4YtN0jf30vBkz5Mv3H/7kq8B/if4xt+nr9vYZAxrTI//n3/76B8M9n 6NrP9D+nrsnf4z///rMV/t41+GfqpvT1/z7/1/dV//Wv/wUAAP//AwBcfFVx4CAAAA== headers: + CF-Cache-Status: + - DYNAMIC CF-RAY: - - 931fceef786ded38-SJC + - 93bd57189acf15be-SJC Connection: - keep-alive Content-Encoding: @@ -159,14 +161,14 @@ interactions: Content-Type: - application/json Date: - - Thu, 17 Apr 2025 23:47:35 GMT + - Wed, 07 May 2025 02:38:16 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=fj4RMXSXRDQjE2CFC6CGC3dVcJ8cl2Cbu8alijwMHA8-1744933655-1.0.1.1-M3c3AI4XQa.0GJoanNACuOm2aEL4xjqHR1grxIP3olFvq3e0eFHwQTvCF20YwR_OLiMJUH87eNUwgziawMccsxjR9OVZyDr5._5Wts6CrqA; - path=/; expires=Fri, 18-Apr-25 00:17:35 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=VGdrMAj2834vuX5RC6lPbHVNwWHXnBmqLb0kAhiGO4g-1746585496-1.0.1.1-kvgkEGO9fI9sasCfJjizGBG4k82_KhCRbH8CEyFrjJatzMoxhM0Z3suJO_hFFH13Wyi2wThiM9QSPvH3dddjfC7hC_tscxijZwiGqtCVnnE; + path=/; expires=Wed, 07-May-25 03:08:16 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=MSkpJsQZtdyIGvrl2mIwy0a_We8H6CIrS7etFgRBl2Y-1744933655703-0.0.1.1-604800000; + - _cfuvid=sAoMYVxAaEFBkQttcKO7GlBZ5NlUNUIaJomZ05pGlCs-1746585496569-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -178,22 +180,20 @@ interactions: - X-Request-ID alt-svc: - h3=":443"; ma=86400 - cf-cache-status: - - DYNAMIC openai-model: - text-embedding-3-small openai-organization: - crewai-iuxna1 openai-processing-ms: - - '140' + - '69' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload via: - - envoy-router-84959bbcd5-rzqvq + - envoy-router-7d545f8f56-jx5wk x-envoy-upstream-service-time: - - '110' + - '52' x-ratelimit-limit-requests: - '10000' x-ratelimit-limit-tokens: @@ -207,32 +207,33 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_dd3ef61c4765b46ed7db80ddfe261f41 + - req_73f3f0d371e3c19b16c7a6d7cc45d3ee status: code: 200 message: OK - request: - body: '{"messages": [{"role": "system", "content": "You are Information Agent. - You have access to specific knowledge sources.\nYour personal goal is: Provide - information based on knowledge sources\nTo give my best complete final answer - to the task respond using the exact following format:\n\nThought: I now can - give a great answer\nFinal Answer: Your final answer must be the great and the - most complete as possible, it must be outcome described.\n\nI MUST use these - formats, my job depends on it!"}, {"role": "user", "content": "\nCurrent Task: - What is Brandon''s favorite color?\n\nThis is the expected criteria for your - final answer: Brandon''s favorite color.\nyou MUST return the actual complete - content as the final answer, not a summary.\n\nBegin! This is VERY important - to you, use the tools available and give your best Final Answer, your job depends - on it!\n\nThought:"}], "model": "gpt-4o-mini", "stop": ["\nObservation:"]}' + body: '{"messages": [{"role": "system", "content": "Your goal is to rewrite the + user query so that it is optimized for retrieval from a vector database. Consider + how the query will be used to find relevant documents, and aim to make it more + specific and context-aware. \n\n Do not include any other text than the rewritten + query, especially any preamble or postamble and only add expected output format + if its relevant to the rewritten query. \n\n Focus on the key words of the intended + task and to retrieve the most relevant information. \n\n There will be some + extra context provided that might need to be removed such as expected_output + formats structured_outputs and other instructions."}, {"role": "user", "content": + "The original query is: What is Brandon''s favorite color?\n\nThis is the expected + criteria for your final answer: Brandon''s favorite color.\nyou MUST return + the actual complete content as the final answer, not a summary.."}], "model": + "gpt-4o-mini", "stop": ["\nObservation:"]}' headers: accept: - application/json accept-encoding: - - gzip, deflate, zstd + - gzip, deflate connection: - keep-alive content-length: - - '926' + - '992' content-type: - application/json host: @@ -264,20 +265,19 @@ interactions: response: body: string: !!binary | - H4sIAAAAAAAAAwAAAP//jFLBbtswDL37KwhdeokLx0mbOLd2WIAC63YZdthWGIpMO9xkUZDkpEWR - fx/kpLG7dUAvBszHR733yOcEQFAlViDUVgbVWp3efv66LvKPRd7Q/f57vtaf7m6ePjze774sv23E - JDJ48wtVeGFdKm6txkBsjrByKAPGqdPFfF7MZtdXVz3QcoU60hob0jmnLRlK8yyfp9kinS5P7C2T - Qi9W8CMBAHjuv1GnqfBRrCCbvFRa9F42KFbnJgDhWMeKkN6TD9IEMRlAxSag6aXfgeE9KGmgoR2C - hCbKBmn8Hh3AT7MmIzXc9P8ruHXSVGwuPNRyx44CgmLNDsjDRnd4OX7GYd15Ga2aTusRII3hIGNU - vcGHE3I4W9LcWMcb/xdV1GTIb0uH0rOJ8n1gK3r0kAA89NF1r9IQ1nFrQxn4N/bPTa+Xx3li2NgI - LU5g4CD1qL5cTN6YV1YYJGk/Cl8oqbZYDdRhU7KriEdAMnL9r5q3Zh+dk2neM34AlEIbsCqtw4rU - a8dDm8N40P9rO6fcCxYe3Y4UloHQxU1UWMtOH89M+CcfsC1rMg066+h4a7Uts1mRL/M8KzKRHJI/ - AAAA//8DALRhJdF5AwAA + H4sIAAAAAAAAA4xSy27bMBC86yuIvfRiFbKs+HVLUKBFL0YPRosWgcCQK5kNxSXItZEi8L8XlBxL + aVOgFx44O8OZ4T5nQoDRsBWgDpJV521+t989PX78tF/fnr5X+w/fdgv6WnxuWruzX25hlhj08BMV + v7DeK+q8RTbkBlgFlIxJdb6qljfrm2qz7IGONNpEaz3nFeWdcSYvi7LKi1U+X1/YBzIKI2zFj0wI + IZ77M/l0Gp9gK4rZy02HMcoWYXsdEgIC2XQDMkYTWTqG2Qgqcoyut34XpNPk3kXRyBMFwygUWQrT + 8YDNMcpk2R2tnQDSOWKZIvdG7y/I+WrNUusDPcQ/qNAYZ+KhDigjuWQjMnno0XMmxH1fwfFVKvCB + Os810yP2z81Xi0EPxuZHdHnBmFjaKWkze0Ou1sjS2DjpEJRUB9QjdSxcHrWhCZBNQv9t5i3tIbhx + 7f/Ij4BS6Bl17QNqo14HHscCpr3819i15N4wRAwno7BmgyF9hMZGHu2wLRB/RcauboxrMfhghpVp + fF0sNuW6LItNAdk5+w0AAP//AwDAmd1xQAMAAA== headers: CF-Cache-Status: - DYNAMIC CF-RAY: - - 931fcef51a67f947-SJC + - 93bd571a5a7267e2-SJC Connection: - keep-alive Content-Encoding: @@ -285,14 +285,14 @@ interactions: Content-Type: - application/json Date: - - Thu, 17 Apr 2025 23:47:36 GMT + - Wed, 07 May 2025 02:38:17 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=7agwu5JV1OJvEFNhvfvqdgWf.HoMyIni9D85soRl3WE-1744933656-1.0.1.1-dKUwAZnjjuuiswFKWGsxpwHNBJUpjhYlZvfZpyNQIejxEJrXMCppgPvtQ9wa4SKezLmKqftvn_H.bAx_AEFJD2EWm5V6R_uK8.odneErR6A; - path=/; expires=Fri, 18-Apr-25 00:17:36 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=62_LRbzx15KBnTorpnulb_ZMoUJCYXHWEnTXVApNOr4-1746585497-1.0.1.1-KqnrR_1Udr1SzCiZW4umsNj1gQgcKOjAPf24HsqotTebuxO48nvo8g_X5O7Mng9tGurC0otvvkjYjsSWuRaddXculJnfdeGq5W3hJhxI21k; + path=/; expires=Wed, 07-May-25 03:08:17 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=LdTrzwZYrB6ZyQLY7NdaaHVpDVFvIjYm3arSpNy87wU-1744933656504-0.0.1.1-604800000; + - _cfuvid=LPWfk79PGAoGrMHseblqRazN9H8qdBY0BP50Y1Bp5wI-1746585497006-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -305,11 +305,130 @@ interactions: openai-organization: - crewai-iuxna1 openai-processing-ms: - - '540' + - '183' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '187' + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999783' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_50fa35cb9ba592c55aacf7ddded877ac + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "system", "content": "You are Information Agent. + You have access to specific knowledge sources.\nYour personal goal is: Provide + information based on knowledge sources\nTo give my best complete final answer + to the task respond using the exact following format:\n\nThought: I now can + give a great answer\nFinal Answer: Your final answer must be the great and the + most complete as possible, it must be outcome described.\n\nI MUST use these + formats, my job depends on it!"}, {"role": "user", "content": "\nCurrent Task: + What is Brandon''s favorite color?\n\nThis is the expected criteria for your + final answer: Brandon''s favorite color.\nyou MUST return the actual complete + content as the final answer, not a summary.\n\nBegin! This is VERY important + to you, use the tools available and give your best Final Answer, your job depends + on it!\n\nThought:"}], "model": "gpt-4o-mini", "stop": ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '926' + content-type: + - application/json + cookie: + - __cf_bm=62_LRbzx15KBnTorpnulb_ZMoUJCYXHWEnTXVApNOr4-1746585497-1.0.1.1-KqnrR_1Udr1SzCiZW4umsNj1gQgcKOjAPf24HsqotTebuxO48nvo8g_X5O7Mng9tGurC0otvvkjYjsSWuRaddXculJnfdeGq5W3hJhxI21k; + _cfuvid=LPWfk79PGAoGrMHseblqRazN9H8qdBY0BP50Y1Bp5wI-1746585497006-0.0.1.1-604800000 + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFNNb9swDL3nVxC67JIMSZo0aW4ttmI77bIO3UdhMBLtcJVJQZKTBkX/ + +2CnrdOuA3YxYD4+8lGPvB8AGHZmBcZuMNs6+NHF1Zc7Xycnp/Rhdv3x2/fL82r+9Tr/uDrxn8yw + Zej6N9n8xHpvtQ6eMqscYBsJM7VVJ4vZ6Xw5n50tOqBWR76lVSGPZjqqWXg0HU9no/FiNFk+sjfK + lpJZwc8BAMB99211iqM7s4Lx8ClSU0pYkVk9JwGYqL6NGEyJU0bJZtiDViWTdNI/g+gOLApUvCVA + qFrZgJJ2FAF+ySULejjv/ldwEVGcyrsEJW41ciaw6jUCJxDNEJq1Z+v3cCu6E9AIuEX2uPYELGC1 + rlU60JOrCJI20VIaAiYIFJO2zUKkkiKJpQSeb+lVrwQYCfI+sEXv9xAibzEToLhukC3GPezYkd8D + 1ioVsDjesmvQJ9hx3mhzpDRtMJIDllJjja1/74/fKlLZJGz9ksb7IwBFNHf5nUs3j8jDsy9eqxB1 + nV5RTcnCaVNEwqTSepCyBtOhDwOAm87/5oWlJkStQy6y3lLXbnK6PNQz/dr16GzxCGbN6Pv4dDIf + vlGvcJSRfTraIGPRbsj11H7dsHGsR8DgaOq/1bxV+zA5S/U/5XvAWgqZXBEiObYvJ+7TIrVX+a+0 + 51fuBJtEccuWiswUWyccldj4w62YtE+Z6qJkqSiGyIeDKUMxPjmbLqfT8dnYDB4GfwAAAP//AwA/ + 0jeHPgQAAA== + headers: + CF-RAY: + - 93bd571c9cf367e2-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 02:38:18 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '785' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '931' x-ratelimit-limit-requests: - '30000' x-ratelimit-limit-tokens: @@ -323,7 +442,7 @@ interactions: x-ratelimit-reset-tokens: - 0s x-request-id: - - req_8837be6510731522fd5ac4b75c11d486 + - req_9bf7c8e011b2b1a8e8546b68c82384a7 status: code: 200 message: OK diff --git a/tests/cassettes/test_get_knowledge_search_query.yaml b/tests/cassettes/test_get_knowledge_search_query.yaml new file mode 100644 index 000000000..39af3cfce --- /dev/null +++ b/tests/cassettes/test_get_knowledge_search_query.yaml @@ -0,0 +1,333 @@ +interactions: +- request: + body: '{"input": ["Capital of France"], "model": "text-embedding-3-small", "encoding_format": + "base64"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '96' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-read-timeout: + - '600' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: !!binary | + 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 + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 93c2407849cb943e-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 16:56:39 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=iRcThWdZ.NO0HPhZg.pUV1AiG0u.0Dkd58N9HGucKdQ-1746636999-1.0.1.1-Cswtia9bUNC0npExHV2GcZLT2MVo6tEQbFU_dsKpjNN5R3s37B6JGWTE1IIZV9V0UGLhiy04og474anpJW4c6yLw0.9q5F4MPcxtAOjwBvo; + path=/; expires=Wed, 07-May-25 17:26:39 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=rvDDZbBWaissP0luvtyuyyAWcPx3AiaoZS9LkAuK4sM-1746636999152-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-model: + - text-embedding-3-small + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '116' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + via: + - envoy-router-6b78fbf94c-z6prb + x-envoy-upstream-service-time: + - '123' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '10000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '9999996' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_3f67e7a1b90d845c25e9cef31147aba0 + status: + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "system", "content": "You are Information Agent. + I have access to knowledge sources\nYour personal goal is: Provide information + based on knowledge sources\nTo give my best complete final answer to the task + respond using the exact following format:\n\nThought: I now can give a great + answer\nFinal Answer: Your final answer must be the great and the most complete + as possible, it must be outcome described.\n\nI MUST use these formats, my job + depends on it!"}, {"role": "user", "content": "\nCurrent Task: What is the capital + of France?\n\nThis is the expected criteria for your final answer: The capital + of France is Paris.\nyou MUST return the actual complete content as the final + answer, not a summary.\n\nBegin! This is VERY important to you, use the tools + available and give your best Final Answer, your job depends on it!\n\nThought:"}], + "model": "gpt-4", "stop": ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '911' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA4xSwW7bMAy9+ysIXXpJgmbN0iW3DEPQAtswDBt2WAuDlWhbjSxpEt00KPLvg+Uk + drYeetGBj3x6fHwvGYDQSixByApZ1t6MP/6UX75vV82n7Yf17uvKX4dVuXn/Sxc3n2+uxKidcA+P + JPk4NZGu9oZYO9vBMhAytazT69l8fjVfLBYJqJ0i046Vnsez8eV8eiCUldOSoljC7wwA4CW9rTar + 6Fks4XJ0rNQUI5YklqcmABGcaSsCY9SR0bIY9aB0lskmubcg0VrH4IN70ooA7Q4cVxRA28KFGtst + ACNwRcAYNyANYTA7iIxMXZ2ePUkmBYW2aABt3FIAtAqUo2gvGAL9aXQgQKV0y4hmyD+BW4iVa4w6 + 6ehoUfKR7cCgJnf2zq7TP6uELOFHRSDRa0YDroB1QCsJdIRvGHScDFcPVDQRW8ttY8wASC4kMcn0 + +wOyP9lsXOmDe4j/jIpCWx2rPBBGZ1tLIzsvErrPAO7TOZuzCwkfXO05Z7eh9N10vuj4RJ+cHp1N + DyA7RtPX300PITjnyxUxahMHgRASZUWqH+3Tg43SbgBkg63/V/Mad7e5tuVb6HtASvJMKveBlJbn + G/dtgR5Tsl5vO7mcBItI4UlLyllTaC+hqMDGdNEXcReZ6rzQtqTgg075by+Z7bO/AAAA//8DAI9H + rN32AwAA + headers: + CF-RAY: + - 93c2407d5cfaface-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 07 May 2025 16:56:41 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=g.ZMxB8fB7ZSkwD6w5ws93pGGw6nEi3uFVh.JDp2OOU-1746637001-1.0.1.1-59mPPW0bDWyD6ngFx6m9LdHurrdN9Kaem.eFcKAwWp_H_4kabp2CzCRiEaW2QhRYYPWE6fZPgqWU8amQtZqpRZHtEjTyoL8t6UtyzyTCoAQ; + path=/; expires=Wed, 07-May-25 17:26:41 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=WOtfHIloFTPkupN1gC2z.3cExzObgfz.p4fXYpCK0aI-1746637001631-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '2084' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '2086' + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '1000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '999805' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 11ms + x-request-id: + - req_1ff0f0c079f8e7f5feb17fe762b5e40a + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_lite_agent_structured_output.yaml b/tests/cassettes/test_lite_agent_structured_output.yaml index de3885cdd..86718712f 100644 --- a/tests/cassettes/test_lite_agent_structured_output.yaml +++ b/tests/cassettes/test_lite_agent_structured_output.yaml @@ -16,7 +16,7 @@ interactions: answer MUST contain all the information requested in the following format: {\n \"summary\": str,\n \"confidence\": int\n}\n\nIMPORTANT: Ensure the final output does not include any code block markers like ```json or ```python."}, {"role": "user", - "content": "What is the population of Tokyo? Return your strucutred output in + "content": "What is the population of Tokyo? Return your structured output in JSON format with the following fields: summary, confidence"}], "model": "gpt-4o-mini", "stop": []}' headers: diff --git a/tests/cassettes/test_task_interpolation_with_hyphens.yaml b/tests/cassettes/test_task_interpolation_with_hyphens.yaml new file mode 100644 index 000000000..f0f1e87c2 --- /dev/null +++ b/tests/cassettes/test_task_interpolation_with_hyphens.yaml @@ -0,0 +1,121 @@ +interactions: +- request: + body: '{"messages": [{"role": "system", "content": "You are Researcher. You''re + an expert researcher, specialized in technology, software engineering, AI and + startups. You work as a freelancer and is now working on doing research and + analysis for a new customer.\nYour personal goal is: be an assistant that responds + with say hello world\nTo give my best complete final answer to the task respond + using the exact following format:\n\nThought: I now can give a great answer\nFinal + Answer: Your final answer must be the great and the most complete as possible, + it must be outcome described.\n\nI MUST use these formats, my job depends on + it!"}, {"role": "user", "content": "\nCurrent Task: be an assistant that responds + with say hello world\n\nThis is the expected criteria for your final answer: + The response should be addressing: say hello world\nyou MUST return the actual + complete content as the final answer, not a summary.\n\nBegin! This is VERY + important to you, use the tools available and give your best Final Answer, your + job depends on it!\n\nThought:"}], "model": "gpt-4o-mini", "stop": ["\nObservation:"]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '1108' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.68.2 + x-stainless-arch: + - arm64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.68.2 + x-stainless-raw-response: + - 'true' + x-stainless-read-timeout: + - '600.0' + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.9 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA4xSTW/UMBC951cMPicoScMu3RuIooUDcOOrVeS1J4mp4zG2sy2q9r9XTrqbtBSJ + iyX7zXt+b2buEgCmJNsAEx0Porc6e/vt4nf3xVxweVZ+3v/Q17fF9+pjs92+O//0iqWRQbtfKMKR + 9VJQbzUGRWaChUMeMKoW62pdropVfjYCPUnUkdbakFWU9cqorMzLKsvXWfH6gd2REujZBn4mAAB3 + 4xl9Gom3bAN5enzp0XveItucigCYIx1fGPde+cBNYOkMCjIBzWj9Axi6AcENtGqPwKGNtoEbf4MO + 4NK8V4ZreDPeN7BFrSmFr+S0fLGUdNgMnsdYZtB6AXBjKPDYljHM1QNyONnX1FpHO/+EyhpllO9q + h9yTiVZ9IMtG9JAAXI1tGh4lZ9ZRb0Md6BrH78p8NemxeTozWhzBQIHrBass02f0aomBK+0XjWaC + iw7lTJ2nwgepaAEki9R/u3lOe0quTPs/8jMgBNqAsrYOpRKPE89lDuPy/qvs1OXRMPPo9kpgHRS6 + OAmJDR/0tFLM//EB+7pRpkVnnZr2qrH1utjl5bo6bzhLDsk9AAAA//8DAAxaM/dlAwAA + headers: + CF-RAY: + - 93fdd19cdbfb6428-SJC + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Wed, 14 May 2025 22:26:43 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=eCtOgOCsKt_ybdNPdtFAocCmuQbNltR52chaHVe7Y_Q-1747261603-1.0.1.1-827eoA7wHS5SOkTsTqoMq6OSioi0VznQBVjvmabNSVX1bf5PpWZvblw58iggZ_wyKDB0EuVoeLKFspgBJa0kuQYR17hu43Y2C14sgdvOXIE; + path=/; expires=Wed, 14-May-25 22:56:43 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=QUa5MnypdaVxO826bwdQaN4G6CBEV8HYVV.7OLF.qvQ-1747261603742-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + cf-cache-status: + - DYNAMIC + openai-organization: + - crewai-iuxna1 + openai-processing-ms: + - '307' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '309' + x-ratelimit-limit-requests: + - '30000' + x-ratelimit-limit-tokens: + - '150000000' + x-ratelimit-remaining-requests: + - '29999' + x-ratelimit-remaining-tokens: + - '149999757' + x-ratelimit-reset-requests: + - 2ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_61d9066e0258b7095517f9f9c01d38e9 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cli/cli_test.py b/tests/cli/cli_test.py index 19439cb82..0ce747637 100644 --- a/tests/cli/cli_test.py +++ b/tests/cli/cli_test.py @@ -162,8 +162,18 @@ def test_reset_knowledge(mock_get_crews, runner): assert call_count == 1, "reset_memories should have been called once" -def test_reset_memory_from_many_crews(mock_get_crews, runner): +def test_reset_agent_knowledge(mock_get_crews, runner): + result = runner.invoke(reset_memories, ["--agent-knowledge"]) + call_count = 0 + for crew in mock_get_crews.return_value: + crew.reset_memories.assert_called_once_with(command_type="agent_knowledge") + assert f"[Crew ({crew.name})] Agents knowledge has been reset." in result.output + call_count += 1 + assert call_count == 1, "reset_memories should have been called once" + + +def test_reset_memory_from_many_crews(mock_get_crews, runner): crews = [] for crew_id in ["id-1234", "id-5678"]: mock_crew = mock.Mock(spec=Crew) diff --git a/tests/crew_test.py b/tests/crew_test.py index a4e4e61df..62b934883 100644 --- a/tests/crew_test.py +++ b/tests/crew_test.py @@ -2,22 +2,19 @@ import hashlib import json -import os -import tempfile from concurrent.futures import Future from unittest import mock -from unittest.mock import MagicMock, patch +from unittest.mock import ANY, MagicMock, patch import pydantic_core import pytest from crewai.agent import Agent from crewai.agents import CacheHandler -from crewai.agents.cache import CacheHandler -from crewai.agents.crew_agent_executor import CrewAgentExecutor from crewai.crew import Crew from crewai.crews.crew_output import CrewOutput -from crewai.flow import Flow, listen, start +from crewai.flow import Flow, start +from crewai.knowledge.knowledge import Knowledge from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource from crewai.llm import LLM from crewai.memory.contextual.contextual_memory import ContextualMemory @@ -3141,6 +3138,30 @@ def test_replay_with_context(): assert crew.tasks[1].context[0].output.raw == "context raw output" +def test_replay_with_context_set_to_nullable(): + agent = Agent(role="test_agent", backstory="Test Description", goal="Test Goal") + task1 = Task( + description="Context Task", expected_output="Say Task Output", agent=agent + ) + task2 = Task( + description="Test Task", expected_output="Say Hi", agent=agent, context=[] + ) + task3 = Task( + description="Test Task 3", expected_output="Say Hi", agent=agent, context=None + ) + + crew = Crew(agents=[agent], tasks=[task1, task2, task3], process=Process.sequential) + with patch("crewai.task.Task.execute_sync") as mock_execute_task: + mock_execute_task.return_value = TaskOutput( + description="Test Task Output", + raw="test raw output", + agent="test_agent", + ) + crew.kickoff() + + mock_execute_task.assert_called_with(agent=ANY, context="", tools=ANY) + + @pytest.mark.vcr(filter_headers=["authorization"]) def test_replay_with_invalid_task_id(): agent = Agent(role="test_agent", backstory="Test Description", goal="Test Goal") @@ -4383,3 +4404,165 @@ def test_sets_parent_flow_when_inside_flow(researcher, writer): flow = MyFlow() result = flow.kickoff() assert result.parent_flow is flow + + +def test_reset_knowledge_with_no_crew_knowledge(researcher,writer): + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ] + ) + + with pytest.raises(RuntimeError) as excinfo: + crew.reset_memories(command_type='knowledge') + + # Optionally, you can also check the error message + assert "Crew Knowledge and Agent Knowledge memory system is not initialized" in str(excinfo.value) # Replace with the expected message + + +def test_reset_knowledge_with_only_crew_knowledge(researcher,writer): + mock_ks = MagicMock(spec=Knowledge) + + with patch.object(Crew,'reset_knowledge') as mock_reset_agent_knowledge: + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + knowledge=mock_ks + ) + + crew.reset_memories(command_type='knowledge') + mock_reset_agent_knowledge.assert_called_once_with([mock_ks]) + + +def test_reset_knowledge_with_crew_and_agent_knowledge(researcher,writer): + mock_ks_crew = MagicMock(spec=Knowledge) + mock_ks_research = MagicMock(spec=Knowledge) + mock_ks_writer = MagicMock(spec=Knowledge) + + researcher.knowledge = mock_ks_research + writer.knowledge = mock_ks_writer + + with patch.object(Crew,'reset_knowledge') as mock_reset_agent_knowledge: + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + knowledge=mock_ks_crew + ) + + crew.reset_memories(command_type='knowledge') + mock_reset_agent_knowledge.assert_called_once_with([mock_ks_crew,mock_ks_research,mock_ks_writer]) + + +def test_reset_knowledge_with_only_agent_knowledge(researcher,writer): + mock_ks_research = MagicMock(spec=Knowledge) + mock_ks_writer = MagicMock(spec=Knowledge) + + researcher.knowledge = mock_ks_research + writer.knowledge = mock_ks_writer + + with patch.object(Crew,'reset_knowledge') as mock_reset_agent_knowledge: + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + ) + + crew.reset_memories(command_type='knowledge') + mock_reset_agent_knowledge.assert_called_once_with([mock_ks_research,mock_ks_writer]) + + +def test_reset_agent_knowledge_with_no_agent_knowledge(researcher,writer): + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + ) + + with pytest.raises(RuntimeError) as excinfo: + crew.reset_memories(command_type='agent_knowledge') + + # Optionally, you can also check the error message + assert "Agent Knowledge memory system is not initialized" in str(excinfo.value) # Replace with the expected message + + +def test_reset_agent_knowledge_with_only_crew_knowledge(researcher,writer): + mock_ks = MagicMock(spec=Knowledge) + + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + knowledge=mock_ks + ) + + with pytest.raises(RuntimeError) as excinfo: + crew.reset_memories(command_type='agent_knowledge') + + # Optionally, you can also check the error message + assert "Agent Knowledge memory system is not initialized" in str(excinfo.value) # Replace with the expected message + + +def test_reset_agent_knowledge_with_crew_and_agent_knowledge(researcher,writer): + mock_ks_crew = MagicMock(spec=Knowledge) + mock_ks_research = MagicMock(spec=Knowledge) + mock_ks_writer = MagicMock(spec=Knowledge) + + researcher.knowledge = mock_ks_research + writer.knowledge = mock_ks_writer + + with patch.object(Crew,'reset_knowledge') as mock_reset_agent_knowledge: + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + knowledge=mock_ks_crew + ) + + crew.reset_memories(command_type='agent_knowledge') + mock_reset_agent_knowledge.assert_called_once_with([mock_ks_research,mock_ks_writer]) + + +def test_reset_agent_knowledge_with_only_agent_knowledge(researcher,writer): + mock_ks_research = MagicMock(spec=Knowledge) + mock_ks_writer = MagicMock(spec=Knowledge) + + researcher.knowledge = mock_ks_research + writer.knowledge = mock_ks_writer + + with patch.object(Crew,'reset_knowledge') as mock_reset_agent_knowledge: + crew = Crew( + agents=[researcher, writer], + process=Process.sequential, + tasks=[ + Task(description="Task 1", expected_output="output", agent=researcher), + Task(description="Task 2", expected_output="output", agent=writer), + ], + ) + + crew.reset_memories(command_type='agent_knowledge') + mock_reset_agent_knowledge.assert_called_once_with([mock_ks_research,mock_ks_writer]) + + diff --git a/tests/task_test.py b/tests/task_test.py index b09f69646..42d709a4f 100644 --- a/tests/task_test.py +++ b/tests/task_test.py @@ -837,9 +837,6 @@ def test_interpolate_inputs(): def test_interpolate_only(): """Test the interpolate_only method for various scenarios including JSON structure preservation.""" - task = Task( - description="Unused in this test", expected_output="Unused in this test" - ) # Test JSON structure preservation json_string = '{"info": "Look at {placeholder}", "nested": {"val": "{nestedVal}"}}' @@ -871,10 +868,6 @@ def test_interpolate_only(): def test_interpolate_only_with_dict_inside_expected_output(): """Test the interpolate_only method for various scenarios including JSON structure preservation.""" - task = Task( - description="Unused in this test", - expected_output="Unused in this test: {questions}", - ) json_string = '{"questions": {"main_question": "What is the user\'s name?", "secondary_question": "What is the user\'s age?"}}' result = interpolate_only( @@ -1094,11 +1087,6 @@ def test_task_execution_times(): def test_interpolate_with_list_of_strings(): - task = Task( - description="Test list interpolation", - expected_output="List: {items}", - ) - # Test simple list of strings input_str = "Available items: {items}" inputs = {"items": ["apple", "banana", "cherry"]} @@ -1112,11 +1100,6 @@ def test_interpolate_with_list_of_strings(): def test_interpolate_with_list_of_dicts(): - task = Task( - description="Test list of dicts interpolation", - expected_output="People: {people}", - ) - input_data = { "people": [ {"name": "Alice", "age": 30, "skills": ["Python", "AI"]}, @@ -1137,11 +1120,6 @@ def test_interpolate_with_list_of_dicts(): def test_interpolate_with_nested_structures(): - task = Task( - description="Test nested structures", - expected_output="Company: {company}", - ) - input_data = { "company": { "name": "TechCorp", @@ -1165,11 +1143,6 @@ def test_interpolate_with_nested_structures(): def test_interpolate_with_special_characters(): - task = Task( - description="Test special characters in dicts", - expected_output="Data: {special_data}", - ) - input_data = { "special_data": { "quotes": """This has "double" and 'single' quotes""", @@ -1188,11 +1161,6 @@ def test_interpolate_with_special_characters(): def test_interpolate_mixed_types(): - task = Task( - description="Test mixed type interpolation", - expected_output="Mixed: {data}", - ) - input_data = { "data": { "name": "Test Dataset", @@ -1214,11 +1182,6 @@ def test_interpolate_mixed_types(): def test_interpolate_complex_combination(): - task = Task( - description="Test complex combination", - expected_output="Report: {report}", - ) - input_data = { "report": [ { @@ -1243,11 +1206,6 @@ def test_interpolate_complex_combination(): def test_interpolate_invalid_type_validation(): - task = Task( - description="Test invalid type validation", - expected_output="Should never reach here", - ) - # Test with invalid top-level type with pytest.raises(ValueError) as excinfo: interpolate_only("{data}", {"data": set()}) # type: ignore we are purposely testing this failure @@ -1268,11 +1226,6 @@ def test_interpolate_invalid_type_validation(): def test_interpolate_custom_object_validation(): - task = Task( - description="Test custom object rejection", - expected_output="Should never reach here", - ) - class CustomObject: def __init__(self, value): self.value = value @@ -1304,11 +1257,6 @@ def test_interpolate_custom_object_validation(): def test_interpolate_valid_complex_types(): - task = Task( - description="Test valid complex types", - expected_output="Validation should pass", - ) - # Valid complex structure valid_data = { "name": "Valid Dataset", @@ -1328,11 +1276,6 @@ def test_interpolate_valid_complex_types(): def test_interpolate_edge_cases(): - task = Task( - description="Test edge cases", - expected_output="Edge case handling", - ) - # Test empty dict and list assert interpolate_only("{}", {"data": {}}) == "{}" assert interpolate_only("[]", {"data": []}) == "[]" @@ -1347,11 +1290,6 @@ def test_interpolate_edge_cases(): def test_interpolate_valid_types(): - task = Task( - description="Test valid types including null and boolean", - expected_output="Should pass validation", - ) - # Test with boolean and null values (valid JSON types) valid_data = { "name": "Test", @@ -1373,11 +1311,11 @@ def test_interpolate_valid_types(): def test_task_with_no_max_execution_time(): researcher = Agent( - role="Researcher", - goal="Make the best research and analysis on content about AI and AI agents", - backstory="You're an expert researcher, specialized in technology, software engineering, AI and startups. You work as a freelancer and is now working on doing research and analysis for a new customer.", - allow_delegation=False, - max_execution_time=None + role="Researcher", + goal="Make the best research and analysis on content about AI and AI agents", + backstory="You're an expert researcher, specialized in technology, software engineering, AI and startups. You work as a freelancer and is now working on doing research and analysis for a new customer.", + allow_delegation=False, + max_execution_time=None, ) task = Task( @@ -1386,7 +1324,7 @@ def test_task_with_no_max_execution_time(): agent=researcher, ) - with patch.object(Agent, "_execute_without_timeout", return_value = "ok") as execute: + with patch.object(Agent, "_execute_without_timeout", return_value="ok") as execute: result = task.execute_sync(agent=researcher) assert result.raw == "ok" execute.assert_called_once() @@ -1395,6 +1333,7 @@ def test_task_with_no_max_execution_time(): @pytest.mark.vcr(filter_headers=["authorization"]) def test_task_with_max_execution_time(): from crewai.tools import tool + """Test that execution raises TimeoutError when max_execution_time is exceeded.""" @tool("what amazing tool", result_as_answer=True) @@ -1412,7 +1351,7 @@ def test_task_with_max_execution_time(): ), allow_delegation=False, tools=[my_tool], - max_execution_time=4 + max_execution_time=4, ) task = Task( @@ -1428,6 +1367,7 @@ def test_task_with_max_execution_time(): @pytest.mark.vcr(filter_headers=["authorization"]) def test_task_with_max_execution_time_exceeded(): from crewai.tools import tool + """Test that execution raises TimeoutError when max_execution_time is exceeded.""" @tool("what amazing tool", result_as_answer=True) @@ -1445,7 +1385,7 @@ def test_task_with_max_execution_time_exceeded(): ), allow_delegation=False, tools=[my_tool], - max_execution_time=1 + max_execution_time=1, ) task = Task( @@ -1455,4 +1395,28 @@ def test_task_with_max_execution_time_exceeded(): ) with pytest.raises(TimeoutError): - task.execute_sync(agent=researcher) \ No newline at end of file + task.execute_sync(agent=researcher) + + +@pytest.mark.vcr(filter_headers=["authorization"]) +def test_task_interpolation_with_hyphens(): + agent = Agent( + role="Researcher", + goal="be an assistant that responds with {interpolation-with-hyphens}", + backstory="You're an expert researcher, specialized in technology, software engineering, AI and startups. You work as a freelancer and is now working on doing research and analysis for a new customer.", + allow_delegation=False, + ) + task = Task( + description="be an assistant that responds with {interpolation-with-hyphens}", + expected_output="The response should be addressing: {interpolation-with-hyphens}", + agent=agent, + ) + crew = Crew( + agents=[agent], + tasks=[task], + verbose=True, + ) + result = crew.kickoff(inputs={"interpolation-with-hyphens": "say hello world"}) + assert "say hello world" in task.prompt() + + assert result.raw == "Hello, World!" diff --git a/tests/telemetry/test_telemetry.py b/tests/telemetry/test_telemetry.py index 092a795b4..51c5a79f1 100644 --- a/tests/telemetry/test_telemetry.py +++ b/tests/telemetry/test_telemetry.py @@ -6,6 +6,8 @@ import pytest from crewai import Agent, Crew, Task from crewai.telemetry import Telemetry +from opentelemetry import trace + @pytest.mark.parametrize( "env_var,value,expected_ready", @@ -34,9 +36,6 @@ def test_telemetry_enabled_by_default(): assert telemetry.ready is True -from opentelemetry import trace - - @patch("crewai.telemetry.telemetry.logger.error") @patch( "opentelemetry.exporter.otlp.proto.http.trace_exporter.OTLPSpanExporter.export", @@ -67,3 +66,32 @@ def test_telemetry_fails_due_connect_timeout(export_mock, logger_mock): export_mock.assert_called_once() logger_mock.assert_called_once_with(error) + + +def test_telemetry_singleton_pattern(): + """Test that Telemetry uses the singleton pattern correctly.""" + Telemetry._instance = None + + telemetry1 = Telemetry() + telemetry2 = Telemetry() + + assert telemetry1 is telemetry2 + + setattr(telemetry1, "test_attribute", "test_value") + assert hasattr(telemetry2, "test_attribute") + assert getattr(telemetry2, "test_attribute") == "test_value" + + import threading + + instances = [] + + def create_instance(): + instances.append(Telemetry()) + + threads = [threading.Thread(target=create_instance) for _ in range(5)] + for thread in threads: + thread.start() + for thread in threads: + thread.join() + + assert all(instance is telemetry1 for instance in instances) diff --git a/tests/test_hallucination_guardrail.py b/tests/test_hallucination_guardrail.py new file mode 100644 index 000000000..af08a3924 --- /dev/null +++ b/tests/test_hallucination_guardrail.py @@ -0,0 +1,108 @@ +from unittest.mock import Mock + +import pytest + +from crewai.llm import LLM +from crewai.tasks.hallucination_guardrail import HallucinationGuardrail +from crewai.tasks.task_output import TaskOutput + + +def test_hallucination_guardrail_initialization(): + """Test that the hallucination guardrail initializes correctly with all parameters.""" + mock_llm = Mock(spec=LLM) + + guardrail = HallucinationGuardrail(context="Test reference context", llm=mock_llm) + + assert guardrail.context == "Test reference context" + assert guardrail.llm == mock_llm + assert guardrail.threshold is None + assert guardrail.tool_response == "" + + guardrail = HallucinationGuardrail( + context="Test reference context", + llm=mock_llm, + threshold=8.5, + tool_response="Sample tool response", + ) + + assert guardrail.context == "Test reference context" + assert guardrail.llm == mock_llm + assert guardrail.threshold == 8.5 + assert guardrail.tool_response == "Sample tool response" + + +def test_hallucination_guardrail_no_op_behavior(): + """Test that the guardrail always returns True in the open-source version.""" + mock_llm = Mock(spec=LLM) + guardrail = HallucinationGuardrail( + context="Test reference context", + llm=mock_llm, + threshold=9.0, + ) + + task_output = TaskOutput( + raw="Sample task output", + description="Test task", + expected_output="Expected output", + agent="Test Agent", + ) + + result, output = guardrail(task_output) + + assert result is True + assert output == "Sample task output" + + +def test_hallucination_guardrail_description(): + """Test that the guardrail provides the correct description for event logging.""" + guardrail = HallucinationGuardrail( + context="Test reference context", llm=Mock(spec=LLM) + ) + + assert guardrail.description == "HallucinationGuardrail (no-op)" + + +@pytest.mark.parametrize( + "context,task_output_text,threshold,tool_response", + [ + ( + "Earth orbits the Sun once every 365.25 days.", + "It takes Earth approximately one year to go around the Sun.", + None, + "", + ), + ( + "Python was created by Guido van Rossum in 1991.", + "Python is a programming language developed by Guido van Rossum.", + 7.5, + "", + ), + ( + "The capital of France is Paris.", + "Paris is the largest city and capital of France.", + 9.0, + "Geographic API returned: France capital is Paris", + ), + ], +) +def test_hallucination_guardrail_always_passes( + context, task_output_text, threshold, tool_response +): + """Test that the guardrail always passes regardless of configuration in open-source version.""" + mock_llm = Mock(spec=LLM) + + guardrail = HallucinationGuardrail( + context=context, llm=mock_llm, threshold=threshold, tool_response=tool_response + ) + + task_output = TaskOutput( + raw=task_output_text, + description="Test task", + expected_output="Expected output", + agent="Test Agent", + ) + + result, output = guardrail(task_output) + + assert result is True + assert output == task_output_text diff --git a/tests/test_markdown_task.py b/tests/test_markdown_task.py new file mode 100644 index 000000000..873d18550 --- /dev/null +++ b/tests/test_markdown_task.py @@ -0,0 +1,96 @@ +"""Test the markdown attribute in Task class.""" + +import pytest +from pydantic import BaseModel + +from crewai import Agent, Task + + +@pytest.mark.parametrize( + "markdown_enabled,should_contain_instructions", + [ + (True, True), + (False, False), + ], +) +def test_markdown_option_in_task_prompt(markdown_enabled, should_contain_instructions): + """Test that markdown flag correctly controls the inclusion of markdown formatting instructions.""" + + researcher = Agent( + role="Researcher", + goal="Research a topic", + backstory="You're a researcher specialized in providing well-formatted content.", + allow_delegation=False, + ) + + task = Task( + description="Research advances in AI in 2023", + expected_output="A summary of key AI advances in 2023", + markdown=markdown_enabled, + agent=researcher, + ) + + prompt = task.prompt() + + assert "Research advances in AI in 2023" in prompt + assert "A summary of key AI advances in 2023" in prompt + + if should_contain_instructions: + assert "Your final answer MUST be formatted in Markdown syntax." in prompt + assert "Use # for headers" in prompt + assert "Use ** for bold text" in prompt + else: + assert "Your final answer MUST be formatted in Markdown syntax." not in prompt + + +def test_markdown_with_empty_description(): + """Test markdown formatting with empty description.""" + + researcher = Agent( + role="Researcher", + goal="Research a topic", + backstory="You're a researcher.", + allow_delegation=False, + ) + + task = Task( + description="", + expected_output="A summary", + markdown=True, + agent=researcher, + ) + + prompt = task.prompt() + + assert prompt.strip() != "" + assert "A summary" in prompt + assert "Your final answer MUST be formatted in Markdown syntax." in prompt + + +def test_markdown_with_complex_output_format(): + """Test markdown with JSON output format to ensure compatibility.""" + + class ResearchOutput(BaseModel): + title: str + findings: list[str] + + researcher = Agent( + role="Researcher", + goal="Research a topic", + backstory="You're a researcher.", + allow_delegation=False, + ) + + task = Task( + description="Research topic", + expected_output="Research results", + markdown=True, + output_json=ResearchOutput, + agent=researcher, + ) + + prompt = task.prompt() + + assert "Your final answer MUST be formatted in Markdown syntax." in prompt + assert "Research topic" in prompt + assert "Research results" in prompt diff --git a/tests/test_task_guardrails.py b/tests/test_task_guardrails.py index aaac05bb7..901b962b9 100644 --- a/tests/test_task_guardrails.py +++ b/tests/test_task_guardrails.py @@ -1,9 +1,10 @@ -from unittest.mock import ANY, Mock, patch +from unittest.mock import Mock, patch import pytest from crewai import Agent, Task from crewai.llm import LLM +from crewai.tasks.hallucination_guardrail import HallucinationGuardrail from crewai.tasks.llm_guardrail import LLMGuardrail from crewai.tasks.task_output import TaskOutput from crewai.utilities.events import ( @@ -267,3 +268,37 @@ def test_guardrail_when_an_error_occurs(sample_agent, task_output): max_retries=0, ) task.execute_sync(agent=sample_agent) + + +def test_hallucination_guardrail_integration(): + """Test that HallucinationGuardrail integrates properly with the task system.""" + agent = Mock() + agent.role = "test_agent" + agent.execute_task.return_value = "test result" + agent.crew = None + + mock_llm = Mock(spec=LLM) + guardrail = HallucinationGuardrail( + context="Test reference context for validation", llm=mock_llm, threshold=8.0 + ) + + task = Task( + description="Test task with hallucination guardrail", + expected_output="Valid output", + guardrail=guardrail, + ) + + result = task.execute_sync(agent=agent) + assert isinstance(result, TaskOutput) + assert result.raw == "test result" + + +def test_hallucination_guardrail_description_in_events(): + """Test that HallucinationGuardrail description appears correctly in events.""" + mock_llm = Mock(spec=LLM) + guardrail = HallucinationGuardrail(context="Test context", llm=mock_llm) + + assert guardrail.description == "HallucinationGuardrail (no-op)" + + event = LLMGuardrailStartedEvent(guardrail=guardrail, retry_count=0) + assert event.guardrail == "HallucinationGuardrail (no-op)" diff --git a/tests/utilities/cassettes/test_converter_with_llama3_1_model.yaml b/tests/utilities/cassettes/test_converter_with_llama3_1_model.yaml index c63e006d9..89ab768a3 100644 --- a/tests/utilities/cassettes/test_converter_with_llama3_1_model.yaml +++ b/tests/utilities/cassettes/test_converter_with_llama3_1_model.yaml @@ -1222,4 +1222,1627 @@ interactions: - chunked http_version: HTTP/1.1 status_code: 200 +- request: + body: '{"model": "llama3.1", "prompt": "### User:\nName: Alice Llama, Age: 30\n\n### + System:\nProduce JSON OUTPUT ONLY! Adhere to this format {\"name\": \"function_name\", + \"arguments\":{\"argument_name\": \"argument_value\"}} The following functions + are available to you:\n{''type'': ''function'', ''function'': {''name'': ''SimpleModel'', + ''description'': ''Correctly extracted `SimpleModel` with all the required parameters + with correct types'', ''parameters'': {''properties'': {''name'': {''title'': + ''Name'', ''type'': ''string''}, ''age'': {''title'': ''Age'', ''type'': ''integer''}}, + ''required'': [''age'', ''name''], ''type'': ''object''}}}\n\n\n", "options": + {}, "stream": false, "format": "json", "images": []}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '668' + host: + - localhost:11434 + user-agent: + - litellm/1.68.0 + method: POST + uri: http://localhost:11434/api/generate + response: + body: + string: '{"model":"llama3.1","created_at":"2025-05-07T01:16:23.653756921Z","response":"{\"name\": + \"SimpleModel\", \"arguments\":{\"name\": \"Alice Llama\", \"age\": 30}}","done":true,"done_reason":"stop","context":[128006,882,128007,271,14711,2724,512,678,25,30505,445,81101,11,13381,25,220,966,271,14711,744,512,1360,13677,4823,32090,27785,0,2467,6881,311,420,3645,5324,609,794,330,1723,1292,498,330,16774,23118,14819,1292,794,330,14819,3220,32075,578,2768,5865,527,2561,311,499,512,13922,1337,1232,364,1723,518,364,1723,1232,5473,609,1232,364,16778,1747,518,364,4789,1232,364,34192,398,28532,1595,16778,1747,63,449,682,279,2631,5137,449,4495,4595,518,364,14105,1232,5473,13495,1232,5473,609,1232,5473,2150,1232,364,678,518,364,1337,1232,364,928,25762,364,425,1232,5473,2150,1232,364,17166,518,364,1337,1232,364,11924,8439,2186,364,6413,1232,2570,425,518,364,609,4181,364,1337,1232,364,1735,23742,3818,128009,128006,78191,128007,271,5018,609,794,330,16778,1747,498,330,16774,23118,609,794,330,62786,445,81101,498,330,425,794,220,966,3500],"total_duration":5656133628,"load_duration":19896000,"prompt_eval_count":152,"prompt_eval_duration":4544235710,"eval_count":24,"eval_duration":1089740418}' + headers: + Content-Length: + - '1186' + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 07 May 2025 01:16:23 GMT + status: + code: 200 + message: OK +- request: + body: '{"name": "llama3.1"}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '20' + content-type: + - application/json + host: + - localhost:11434 + user-agent: + - litellm/1.68.0 + method: POST + uri: http://localhost:11434/api/show + response: + body: + string: "{\"license\":\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version + Release Date: July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and + conditions for use, reproduction, distribution and modification of the\\nLlama + Materials set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\",\"modelfile\":\"# + Modelfile generated by \\\"ollama show\\\"\\n# To build a new Modelfile based + on this, replace FROM with:\\n# FROM llama3.1:latest\\n\\nFROM /root/.ollama/models/blobs/sha256-667b0c1932bc6ffc593ed1d03f895bf2dc8dc6df21db3042284a6f4416b06a29\\nTEMPLATE + \\\"\\\"\\\"{{- if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER + stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE + \\\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version Release Date: + July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions for + use, reproduction, distribution and modification of the\\nLlama Materials + set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop + \ \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop + \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"{{- + if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"8.0B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Meta-Llama-3.1\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.license\":\"llama3.1\",\"general.parameter_count\":8030261312,\"general.quantization_version\":2,\"general.size_label\":\"8B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":32,\"llama.attention.head_count_kv\":8,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.block_count\":32,\"llama.context_length\":131072,\"llama.embedding_length\":4096,\"llama.feed_forward_length\":14336,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"tensors\":[{\"name\":\"token_embd.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,128256]},{\"name\":\"rope_freqs.weight\",\"type\":\"F32\",\"shape\":[64]},{\"name\":\"blk.0.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.0.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.0.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.1.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.2.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.3.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.4.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.5.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.6.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.7.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.8.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.10.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.11.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.12.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.13.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.14.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.15.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.16.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.17.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.18.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.19.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.20.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.9.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.20.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.20.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.21.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.21.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.22.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.23.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.24.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.25.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.26.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.27.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.28.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.29.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.30.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.31.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.31.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"output.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,128256]},{\"name\":\"blk.31.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.31.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.31.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"output_norm.weight\",\"type\":\"F32\",\"shape\":[4096]}],\"capabilities\":[\"completion\",\"tools\"],\"modified_at\":\"2025-04-11T14:41:15.05985701Z\"}" + headers: + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 07 May 2025 01:16:23 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"name": "llama3.1"}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '20' + content-type: + - application/json + host: + - localhost:11434 + user-agent: + - litellm/1.68.0 + method: POST + uri: http://localhost:11434/api/show + response: + body: + string: "{\"license\":\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version + Release Date: July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and + conditions for use, reproduction, distribution and modification of the\\nLlama + Materials set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\",\"modelfile\":\"# + Modelfile generated by \\\"ollama show\\\"\\n# To build a new Modelfile based + on this, replace FROM with:\\n# FROM llama3.1:latest\\n\\nFROM /root/.ollama/models/blobs/sha256-667b0c1932bc6ffc593ed1d03f895bf2dc8dc6df21db3042284a6f4416b06a29\\nTEMPLATE + \\\"\\\"\\\"{{- if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER + stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE + \\\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version Release Date: + July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions for + use, reproduction, distribution and modification of the\\nLlama Materials + set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop + \ \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop + \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"{{- + if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"8.0B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Meta-Llama-3.1\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.license\":\"llama3.1\",\"general.parameter_count\":8030261312,\"general.quantization_version\":2,\"general.size_label\":\"8B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":32,\"llama.attention.head_count_kv\":8,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.block_count\":32,\"llama.context_length\":131072,\"llama.embedding_length\":4096,\"llama.feed_forward_length\":14336,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"tensors\":[{\"name\":\"token_embd.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,128256]},{\"name\":\"rope_freqs.weight\",\"type\":\"F32\",\"shape\":[64]},{\"name\":\"blk.0.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.0.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.0.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.1.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.2.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.3.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.4.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.5.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.6.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.7.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.8.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.10.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.11.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.12.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.13.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.14.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.15.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.16.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.17.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.18.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.19.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.20.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.9.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.20.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.20.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.21.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.21.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.22.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.23.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.24.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.25.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.26.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.27.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.28.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.29.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.30.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.31.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.31.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"output.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,128256]},{\"name\":\"blk.31.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.31.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.31.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"output_norm.weight\",\"type\":\"F32\",\"shape\":[4096]}],\"capabilities\":[\"completion\",\"tools\"],\"modified_at\":\"2025-04-11T14:41:15.05985701Z\"}" + headers: + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 07 May 2025 01:16:23 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"name": "llama3.1"}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '20' + content-type: + - application/json + host: + - localhost:11434 + user-agent: + - litellm/1.68.0 + method: POST + uri: http://localhost:11434/api/show + response: + body: + string: "{\"license\":\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version + Release Date: July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and + conditions for use, reproduction, distribution and modification of the\\nLlama + Materials set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\",\"modelfile\":\"# + Modelfile generated by \\\"ollama show\\\"\\n# To build a new Modelfile based + on this, replace FROM with:\\n# FROM llama3.1:latest\\n\\nFROM /root/.ollama/models/blobs/sha256-667b0c1932bc6ffc593ed1d03f895bf2dc8dc6df21db3042284a6f4416b06a29\\nTEMPLATE + \\\"\\\"\\\"{{- if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER + stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE + \\\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version Release Date: + July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions for + use, reproduction, distribution and modification of the\\nLlama Materials + set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop + \ \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop + \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"{{- + if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"8.0B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Meta-Llama-3.1\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.license\":\"llama3.1\",\"general.parameter_count\":8030261312,\"general.quantization_version\":2,\"general.size_label\":\"8B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":32,\"llama.attention.head_count_kv\":8,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.block_count\":32,\"llama.context_length\":131072,\"llama.embedding_length\":4096,\"llama.feed_forward_length\":14336,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"tensors\":[{\"name\":\"token_embd.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,128256]},{\"name\":\"rope_freqs.weight\",\"type\":\"F32\",\"shape\":[64]},{\"name\":\"blk.0.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.0.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.0.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.1.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.2.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.3.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.4.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.5.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.6.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.7.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.8.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.10.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.11.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.12.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.13.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.14.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.15.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.16.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.17.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.18.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.19.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.20.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.9.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.20.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.20.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.21.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.21.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.22.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.23.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.24.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.25.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.26.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.27.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.28.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.29.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.30.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.31.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.31.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"output.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,128256]},{\"name\":\"blk.31.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.31.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.31.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"output_norm.weight\",\"type\":\"F32\",\"shape\":[4096]}],\"capabilities\":[\"completion\",\"tools\"],\"modified_at\":\"2025-04-11T14:41:15.05985701Z\"}" + headers: + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 07 May 2025 01:17:28 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"name": "llama3.1"}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '20' + content-type: + - application/json + host: + - localhost:11434 + user-agent: + - litellm/1.68.0 + method: POST + uri: http://localhost:11434/api/show + response: + body: + string: "{\"license\":\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version + Release Date: July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and + conditions for use, reproduction, distribution and modification of the\\nLlama + Materials set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\",\"modelfile\":\"# + Modelfile generated by \\\"ollama show\\\"\\n# To build a new Modelfile based + on this, replace FROM with:\\n# FROM llama3.1:latest\\n\\nFROM /root/.ollama/models/blobs/sha256-667b0c1932bc6ffc593ed1d03f895bf2dc8dc6df21db3042284a6f4416b06a29\\nTEMPLATE + \\\"\\\"\\\"{{- if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER + stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE + \\\"LLAMA 3.1 COMMUNITY LICENSE AGREEMENT\\nLlama 3.1 Version Release Date: + July 23, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions for + use, reproduction, distribution and modification of the\\nLlama Materials + set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.1\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are entering + into\\nthis Agreement on such person or entity\u2019s behalf), of the age + required under applicable laws, rules or\\nregulations to provide legal consent + and that has legal authority to bind your employer or such other\\nperson + or entity if you are entering in this Agreement on their behalf.\\n\\n\u201CLlama + 3.1\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at\\nhttps://llama.meta.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.1 and + Documentation (and any\\nportion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, if you are an entity, your\\nprincipal place of business is in the + EEA or Switzerland) and Meta Platforms, Inc. (if you are located\\noutside + of the EEA or Switzerland).\\n\\nBy clicking \u201CI Accept\u201D below or + by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable + and royalty-free\\nlimited license under Meta\u2019s intellectual property + or other rights owned by Meta embodied in the Llama\\nMaterials to use, reproduce, + distribute, copy, create derivative works of, and make modifications to the\\nLlama + Materials.\\n\\n b. Redistribution and Use.\\n\\n i. If you distribute + or make available the Llama Materials (or any derivative works\\nthereof), + or a product or service (including another AI model) that contains any of + them, you shall (A)\\nprovide a copy of this Agreement with any such Llama + Materials; and (B) prominently display \u201CBuilt with\\nLlama\u201D on a + related website, user interface, blogpost, about page, or product documentation. + If you use\\nthe Llama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D at\\nthe + beginning of any such AI model name.\\n\\n ii. If you receive Llama Materials, + or any derivative works thereof, from a Licensee as part \\nof an integrated + end user product, then Section 2 of this Agreement will not apply to you.\\n\\n + \ iii. You must retain in all copies of the Llama Materials that you distribute + the following\\nattribution notice within a \u201CNotice\u201D text file distributed + as a part of such copies: \u201CLlama 3.1 is\\nlicensed under the Llama 3.1 + Community License, Copyright \xA9 Meta Platforms, Inc. All Rights\\nReserved.\u201D\\n\\n + \ iv. Your use of the Llama Materials must comply with applicable laws + and regulations\\n(including trade compliance laws and regulations) and adhere + to the Acceptable Use Policy for the Llama\\nMaterials (available at https://llama.meta.com/llama3_1/use-policy), + which is hereby incorporated by\\nreference into this Agreement.\\n\\n2. Additional + Commercial Terms. If, on the Llama 3.1 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, is greater than 700\\nmillion monthly active users + in the preceding calendar month, you must request a license from Meta,\\nwhich + Meta may grant to you in its sole discretion, and you are not authorized to + exercise any of the\\nrights under this Agreement unless or until Meta otherwise + expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. UNLESS REQUIRED + BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY\\nOUTPUT AND RESULTS THEREFROM + ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF\\nANY KIND, + AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,\\nINCLUDING, + WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,\\nMERCHANTABILITY, + OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR\\nDETERMINING + THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND\\nASSUME + ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND\\nRESULTS.\\n\\n4. + Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE + UNDER ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS + LIABILITY, OR OTHERWISE, ARISING\\nOUT OF THIS AGREEMENT, FOR ANY LOST PROFITS + OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,\\nINCIDENTAL, EXEMPLARY OR PUNITIVE + DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED\\nOF THE POSSIBILITY + OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama\\nMaterials, + neither Meta nor Licensee may use any name or mark owned by or associated + with the other\\nor any of its affiliates, except as required for reasonable + and customary use in describing and\\nredistributing the Llama Materials or + as set forth in this Section 5(a). Meta hereby grants you a license to\\nuse + \u201CLlama\u201D (the \u201CMark\u201D) solely as required to comply with + the last sentence of Section 1.b.i. You will\\ncomply with Meta\u2019s brand + guidelines (currently accessible at\\nhttps://about.meta.com/brand/resources/meta/company-brand/ + ). All goodwill arising out of your use\\nof the Mark will inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with\\nrespect to any derivative works and + modifications of the Llama Materials that are made by you, as\\nbetween you + and Meta, you are and will be the owner of such derivative works and modifications.\\n\\n + \ c. If you institute litigation or other proceedings against Meta or any + entity (including a\\ncross-claim or counterclaim in a lawsuit) alleging that + the Llama Materials or Llama 3.1 outputs or\\nresults, or any portion of any + of the foregoing, constitutes infringement of intellectual property or other\\nrights + owned or licensable by you, then any licenses granted to you under this Agreement + shall\\nterminate as of the date such litigation or claim is filed or instituted. + You will indemnify and hold\\nharmless Meta from and against any claim by + any third party arising out of or related to your use or\\ndistribution of + the Llama Materials.\\n\\n6. Term and Termination. The term of this Agreement + will commence upon your acceptance of this\\nAgreement or access to the Llama + Materials and will continue in full force and effect until terminated in\\naccordance + with the terms and conditions herein. Meta may terminate this Agreement if + you are in\\nbreach of any term or condition of this Agreement. Upon termination + of this Agreement, you shall delete\\nand cease use of the Llama Materials. + Sections 3, 4 and 7 shall survive the termination of this\\nAgreement.\\n\\n7. + Governing Law and Jurisdiction. This Agreement will be governed and construed + under the laws of\\nthe State of California without regard to choice of law + principles, and the UN Convention on Contracts\\nfor the International Sale + of Goods does not apply to this Agreement. The courts of California shall + have\\nexclusive jurisdiction of any dispute arising out of this Agreement.\\n\\n# + Llama 3.1 Acceptable Use Policy\\n\\nMeta is committed to promoting safe and + fair use of its tools and features, including Llama 3.1. If you\\naccess or + use Llama 3.1, you agree to this Acceptable Use Policy (\u201CPolicy\u201D). + The most recent copy of\\nthis policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)\\n\\n## + Prohibited Uses\\n\\nWe want everyone to use Llama 3.1 safely and responsibly. + You agree you will not use, or allow\\nothers to use, Llama 3.1 to:\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 3. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 4. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 5. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 6. Collect, process, disclose, generate, or infer health, demographic, + or other sensitive personal or private information about individuals without + rights and consents required by applicable laws\\n 7. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 8. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n\\n2. + Engage in, promote, incite, facilitate, or assist in the planning or development + of activities that present a risk of death or bodily harm to individuals, + including use of Llama 3.1 related to the following:\\n 1. Military, warfare, + nuclear industries or applications, espionage, use for materials or activities + that are subject to the International Traffic Arms Regulations (ITAR) maintained + by the United States Department of State\\n 2. Guns and illegal weapons + (including weapon development)\\n 3. Illegal drugs and regulated/controlled + substances\\n 4. Operation of critical infrastructure, transportation technologies, + or heavy machinery\\n 5. Self-harm or harm to others, including suicide, + cutting, and eating disorders\\n 6. Any content intended to incite or promote + violence, abuse, or any infliction of bodily harm to an individual\\n\\n3. + Intentionally deceive or mislead others, including use of Llama 3.1 related + to the following:\\n 1. Generating, promoting, or furthering fraud or the + creation or promotion of disinformation\\n 2. Generating, promoting, or + furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 3. Generating, promoting, or further distributing + spam\\n 4. Impersonating another individual without consent, authorization, + or legal right\\n 5. Representing that the use of Llama 3.1 or outputs + are human-generated\\n 6. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n\\nPlease + report any violation of this Policy, software \u201Cbug,\u201D or other problems + that could lead to a violation\\nof this Policy through one of the following + means:\\n\\n* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)\\n* + Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback\\n* + Reporting bugs and security concerns: facebook.com/whitehat/info\\n* Reporting + violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop + \ \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop + \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"{{- + if or .System .Tools }}\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n{{- + if .System }}\\n\\n{{ .System }}\\n{{- end }}\\n{{- if .Tools }}\\n\\nCutting + Knowledge Date: December 2023\\n\\nWhen you receive a tool call response, + use the output to format an answer to the orginal user question.\\n\\nYou + are a helpful assistant with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- + end }}\\n{{- range $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages + $i)) 1 }}\\n{{- if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\nQuestion: {{ + .Content }}\\u003c|eot_id|\\u003e\\n{{- else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"8.0B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Meta-Llama-3.1\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.license\":\"llama3.1\",\"general.parameter_count\":8030261312,\"general.quantization_version\":2,\"general.size_label\":\"8B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":32,\"llama.attention.head_count_kv\":8,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.block_count\":32,\"llama.context_length\":131072,\"llama.embedding_length\":4096,\"llama.feed_forward_length\":14336,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"tensors\":[{\"name\":\"token_embd.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,128256]},{\"name\":\"rope_freqs.weight\",\"type\":\"F32\",\"shape\":[64]},{\"name\":\"blk.0.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.0.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.0.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.0.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.0.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.0.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.1.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.1.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.1.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.1.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.1.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.2.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.2.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.2.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.2.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.2.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.3.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.3.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.3.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.3.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.3.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.4.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.4.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.4.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.4.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.4.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.5.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.5.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.5.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.5.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.5.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.6.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.6.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.6.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.6.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.6.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.7.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.7.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.7.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.7.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.7.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.8.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.8.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.8.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.8.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.8.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.10.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.10.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.10.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.10.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.10.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.11.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.11.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.11.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.11.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.11.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.12.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.12.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.12.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.12.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.12.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.13.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.13.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.13.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.13.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.13.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.14.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.14.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.14.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.14.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.14.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.15.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.15.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.15.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.15.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.15.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.16.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.16.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.16.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.16.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.16.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.17.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.17.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.17.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.17.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.17.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.18.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.18.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.18.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.18.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.18.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.19.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.19.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.19.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.19.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.19.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.20.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.20.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.9.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.9.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.9.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.9.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.9.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.20.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.20.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.20.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.20.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.21.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.21.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.21.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.21.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.21.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.22.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.22.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.22.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.22.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.22.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.23.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.23.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.23.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.23.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.23.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.24.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.24.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.24.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.24.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.24.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.25.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.25.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.25.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.25.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.25.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[14336,4096]},{\"name\":\"blk.26.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.26.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.26.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.26.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.26.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.27.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.27.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.27.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.27.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.27.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.28.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.28.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.28.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.28.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.28.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.29.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.29.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.29.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.29.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.29.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.30.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.30.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.30.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.30.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.30.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"blk.31.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,14336]},{\"name\":\"blk.31.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,1024]},{\"name\":\"blk.31.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[4096,4096]},{\"name\":\"blk.31.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,1024]},{\"name\":\"output.weight\",\"type\":\"Q4_K_S\",\"shape\":[4096,128256]},{\"name\":\"blk.31.attn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"blk.31.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[14336,4096]},{\"name\":\"blk.31.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[4096]},{\"name\":\"output_norm.weight\",\"type\":\"F32\",\"shape\":[4096]}],\"capabilities\":[\"completion\",\"tools\"],\"modified_at\":\"2025-04-11T14:41:15.05985701Z\"}" + headers: + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 07 May 2025 01:17:28 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK version: 1 diff --git a/tests/utilities/cassettes/test_converter_with_llama3_2_model.yaml b/tests/utilities/cassettes/test_converter_with_llama3_2_model.yaml index d538308ca..e468d8e11 100644 --- a/tests/utilities/cassettes/test_converter_with_llama3_2_model.yaml +++ b/tests/utilities/cassettes/test_converter_with_llama3_2_model.yaml @@ -1,9 +1,10 @@ interactions: - request: - body: '{"model": "llama3.2:3b", "prompt": "### System:\nPlease convert the following - text into valid JSON.\n\nOutput ONLY the valid JSON and nothing else.\n\nThe - JSON must follow this format exactly:\n{\n \"name\": str,\n \"age\": int\n}\n\n### - User:\nName: Alice Llama, Age: 30\n\n", "options": {"stop": []}, "stream": false}' + body: '{"model": "meta-llama/llama-3.2-3b-instruct", "messages": [{"role": "system", + "content": "Please convert the following text into valid JSON.\n\nOutput ONLY + the valid JSON and nothing else.\n\nThe JSON must follow this format exactly:\n{\n \"name\": + str,\n \"age\": int\n}"}, {"role": "user", "content": "Name: Alice Llama, Age: + 30"}], "stream": false, "stop": []}' headers: accept: - '*/*' @@ -12,853 +13,55 @@ interactions: connection: - keep-alive content-length: - - '321' - host: - - localhost:11434 - user-agent: - - litellm/1.60.2 - method: POST - uri: http://localhost:11434/api/generate - response: - content: '{"model":"llama3.2:3b","created_at":"2025-02-21T02:57:55.059392Z","response":"{\"name\": - \"Alice Llama\", \"age\": 30}","done":true,"done_reason":"stop","context":[128006,9125,128007,271,38766,1303,33025,2696,25,6790,220,2366,18,271,128009,128006,882,128007,271,14711,744,512,5618,5625,279,2768,1495,1139,2764,4823,382,5207,27785,279,2764,4823,323,4400,775,382,791,4823,2011,1833,420,3645,7041,512,517,220,330,609,794,610,345,220,330,425,794,528,198,633,14711,2724,512,678,25,30505,445,81101,11,13381,25,220,966,271,128009,128006,78191,128007,271,5018,609,794,330,62786,445,81101,498,330,425,794,220,966,92],"total_duration":4675906000,"load_duration":836091458,"prompt_eval_count":82,"prompt_eval_duration":3561000000,"eval_count":15,"eval_duration":275000000}' - headers: - Content-Length: - - '761' - Content-Type: - - application/json; charset=utf-8 - Date: - - Fri, 21 Feb 2025 02:57:55 GMT - http_version: HTTP/1.1 - status_code: 200 -- request: - body: '{"name": "llama3.2:3b"}' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: - - keep-alive - content-length: - - '23' + - '365' content-type: - application/json host: - - localhost:11434 + - openrouter.ai + http-referer: + - https://litellm.ai user-agent: - - litellm/1.60.2 + - litellm/1.68.0 + x-title: + - liteLLM method: POST - uri: http://localhost:11434/api/show + uri: https://openrouter.ai/api/v1/chat/completions response: - content: "{\"license\":\"LLAMA 3.2 COMMUNITY LICENSE AGREEMENT\\nLlama 3.2 Version - Release Date: September 25, 2024\\n\\n\u201CAgreement\u201D means the terms - and conditions for use, reproduction, distribution \\nand modification of the - Llama Materials set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, - manuals and documentation accompanying Llama 3.2\\ndistributed by Meta at https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D - or \u201Cyou\u201D means you, or your employer or any other person or entity - (if you are \\nentering into this Agreement on such person or entity\u2019s - behalf), of the age required under\\napplicable laws, rules or regulations to - provide legal consent and that has legal authority\\nto bind your employer or - such other person or entity if you are entering in this Agreement\\non their - behalf.\\n\\n\u201CLlama 3.2\u201D means the foundational large language models - and software and algorithms, including\\nmachine-learning model code, trained - model weights, inference-enabling code, training-enabling code,\\nfine-tuning - enabling code and other elements of the foregoing distributed by Meta at \\nhttps://www.llama.com/llama-downloads.\\n\\n\u201CLlama - Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.2 and Documentation - (and \\nany portion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D - or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located in - or, \\nif you are an entity, your principal place of business is in the EEA - or Switzerland) \\nand Meta Platforms, Inc. (if you are located outside of the - EEA or Switzerland). \\n\\n\\nBy clicking \u201CI Accept\u201D below or by using - or distributing any portion or element of the Llama Materials,\\nyou agree to - be bound by this Agreement.\\n\\n\\n1. License Rights and Redistribution.\\n\\n - \ a. Grant of Rights. You are granted a non-exclusive, worldwide, \\nnon-transferable - and royalty-free limited license under Meta\u2019s intellectual property or - other rights \\nowned by Meta embodied in the Llama Materials to use, reproduce, - distribute, copy, create derivative works \\nof, and make modifications to the - Llama Materials. \\n\\n b. Redistribution and Use. \\n\\n i. If - you distribute or make available the Llama Materials (or any derivative works - thereof), \\nor a product or service (including another AI model) that contains - any of them, you shall (A) provide\\na copy of this Agreement with any such - Llama Materials; and (B) prominently display \u201CBuilt with Llama\u201D\\non - a related website, user interface, blogpost, about page, or product documentation. - If you use the\\nLlama Materials or any outputs or results of the Llama Materials - to create, train, fine tune, or\\notherwise improve an AI model, which is distributed - or made available, you shall also include \u201CLlama\u201D\\nat the beginning - of any such AI model name.\\n\\n ii. If you receive Llama Materials, - or any derivative works thereof, from a Licensee as part\\nof an integrated - end user product, then Section 2 of this Agreement will not apply to you. \\n\\n - \ iii. You must retain in all copies of the Llama Materials that you distribute - the \\nfollowing attribution notice within a \u201CNotice\u201D text file distributed - as a part of such copies: \\n\u201CLlama 3.2 is licensed under the Llama 3.2 - Community License, Copyright \xA9 Meta Platforms,\\nInc. All Rights Reserved.\u201D\\n\\n - \ iv. Your use of the Llama Materials must comply with applicable laws - and regulations\\n(including trade compliance laws and regulations) and adhere - to the Acceptable Use Policy for\\nthe Llama Materials (available at https://www.llama.com/llama3_2/use-policy), - which is hereby \\nincorporated by reference into this Agreement.\\n \\n2. - Additional Commercial Terms. If, on the Llama 3.2 version release date, the - monthly active users\\nof the products or services made available by or for - Licensee, or Licensee\u2019s affiliates, \\nis greater than 700 million monthly - active users in the preceding calendar month, you must request \\na license - from Meta, which Meta may grant to you in its sole discretion, and you are not - authorized to\\nexercise any of the rights under this Agreement unless or until - Meta otherwise expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. - UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY OUTPUT AND \\nRESULTS - THEREFROM ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF - ANY KIND, AND META DISCLAIMS\\nALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND - IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES\\nOF TITLE, NON-INFRINGEMENT, - MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE\\nFOR - DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS - AND ASSUME ANY RISKS ASSOCIATED\\nWITH YOUR USE OF THE LLAMA MATERIALS AND ANY - OUTPUT AND RESULTS.\\n\\n4. Limitation of Liability. IN NO EVENT WILL META OR - ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, \\nWHETHER IN CONTRACT, - TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, - \\nFOR ANY LOST PROFITS OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, - EXEMPLARY OR PUNITIVE DAMAGES, EVEN \\nIF META OR ITS AFFILIATES HAVE BEEN ADVISED - OF THE POSSIBILITY OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n - \ a. No trademark licenses are granted under this Agreement, and in connection - with the Llama Materials, \\nneither Meta nor Licensee may use any name or mark - owned by or associated with the other or any of its affiliates, \\nexcept as - required for reasonable and customary use in describing and redistributing the - Llama Materials or as \\nset forth in this Section 5(a). Meta hereby grants - you a license to use \u201CLlama\u201D (the \u201CMark\u201D) solely as required - \\nto comply with the last sentence of Section 1.b.i. You will comply with Meta\u2019s - brand guidelines (currently accessible \\nat https://about.meta.com/brand/resources/meta/company-brand/). - All goodwill arising out of your use of the Mark \\nwill inure to the benefit - of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and - derivatives made by or for Meta, with respect to any\\n derivative works - and modifications of the Llama Materials that are made by you, as between you - and Meta,\\n you are and will be the owner of such derivative works and modifications.\\n\\n - \ c. If you institute litigation or other proceedings against Meta or any - entity (including a cross-claim or\\n counterclaim in a lawsuit) alleging - that the Llama Materials or Llama 3.2 outputs or results, or any portion\\n - \ of any of the foregoing, constitutes infringement of intellectual property - or other rights owned or licensable\\n by you, then any licenses granted - to you under this Agreement shall terminate as of the date such litigation or\\n - \ claim is filed or instituted. You will indemnify and hold harmless Meta - from and against any claim by any third\\n party arising out of or related - to your use or distribution of the Llama Materials.\\n\\n6. Term and Termination. - The term of this Agreement will commence upon your acceptance of this Agreement - or access\\nto the Llama Materials and will continue in full force and effect - until terminated in accordance with the terms\\nand conditions herein. Meta - may terminate this Agreement if you are in breach of any term or condition of - this\\nAgreement. Upon termination of this Agreement, you shall delete and cease - use of the Llama Materials. Sections 3,\\n4 and 7 shall survive the termination - of this Agreement. \\n\\n7. Governing Law and Jurisdiction. This Agreement will - be governed and construed under the laws of the State of \\nCalifornia without - regard to choice of law principles, and the UN Convention on Contracts for the - International\\nSale of Goods does not apply to this Agreement. The courts of - California shall have exclusive jurisdiction of\\nany dispute arising out of - this Agreement.\\n**Llama 3.2** **Acceptable Use Policy**\\n\\nMeta is committed - to promoting safe and fair use of its tools and features, including Llama 3.2. - If you access or use Llama 3.2, you agree to this Acceptable Use Policy (\u201C**Policy**\u201D). - The most recent copy of this policy can be found at [https://www.llama.com/llama3_2/use-policy](https://www.llama.com/llama3_2/use-policy).\\n\\n**Prohibited - Uses**\\n\\nWe want everyone to use Llama 3.2 safely and responsibly. You agree - you will not use, or allow others to use, Llama 3.2 to:\\n\\n\\n\\n1. Violate - the law or others\u2019 rights, including to:\\n 1. Engage in, promote, generate, - contribute to, encourage, plan, incite, or further illegal or unlawful activity - or content, such as:\\n 1. Violence or terrorism\\n 2. Exploitation - or harm to children, including the solicitation, creation, acquisition, or dissemination - of child exploitative content or failure to report Child Sexual Abuse Material\\n - \ 3. Human trafficking, exploitation, and sexual violence\\n 4. - The illegal distribution of information or materials to minors, including obscene - materials, or failure to employ legally required age-gating in connection with - such information or materials.\\n 5. Sexual solicitation\\n 6. - Any other criminal activity\\n 1. Engage in, promote, incite, or facilitate - the harassment, abuse, threatening, or bullying of individuals or groups of - individuals\\n 2. Engage in, promote, incite, or facilitate discrimination - or other unlawful or harmful conduct in the provision of employment, employment - benefits, credit, housing, other economic benefits, or other essential goods - and services\\n 3. Engage in the unauthorized or unlicensed practice of any - profession including, but not limited to, financial, legal, medical/health, - or related professional practices\\n 4. Collect, process, disclose, generate, - or infer private or sensitive information about individuals, including information - about individuals\u2019 identity, health, or demographic information, unless - you have obtained the right to do so in accordance with applicable law\\n 5. - Engage in or facilitate any action or generate any content that infringes, misappropriates, - or otherwise violates any third-party rights, including the outputs or results - of any products or services using the Llama Materials\\n 6. Create, generate, - or facilitate the creation of malicious code, malware, computer viruses or do - anything else that could disable, overburden, interfere with or impair the proper - working, integrity, operation or appearance of a website or computer system\\n - \ 7. Engage in any action, or facilitate any action, to intentionally circumvent - or remove usage restrictions or other safety measures, or to enable functionality - disabled by Meta\\n2. Engage in, promote, incite, facilitate, or assist in the - planning or development of activities that present a risk of death or bodily - harm to individuals, including use of Llama 3.2 related to the following:\\n - \ 8. Military, warfare, nuclear industries or applications, espionage, use - for materials or activities that are subject to the International Traffic Arms - Regulations (ITAR) maintained by the United States Department of State or to - the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical Weapons - Convention Implementation Act of 1997\\n 9. Guns and illegal weapons (including - weapon development)\\n 10. Illegal drugs and regulated/controlled substances\\n - \ 11. Operation of critical infrastructure, transportation technologies, or - heavy machinery\\n 12. Self-harm or harm to others, including suicide, cutting, - and eating disorders\\n 13. Any content intended to incite or promote violence, - abuse, or any infliction of bodily harm to an individual\\n3. Intentionally - deceive or mislead others, including use of Llama 3.2 related to the following:\\n - \ 14. Generating, promoting, or furthering fraud or the creation or promotion - of disinformation\\n 15. Generating, promoting, or furthering defamatory - content, including the creation of defamatory statements, images, or other content\\n - \ 16. Generating, promoting, or further distributing spam\\n 17. Impersonating - another individual without consent, authorization, or legal right\\n 18. - Representing that the use of Llama 3.2 or outputs are human-generated\\n 19. - Generating or facilitating false online engagement, including fake reviews and - other means of fake online engagement\\n4. Fail to appropriately disclose to - end users any known dangers of your AI system\\n5. Interact with third party - tools, models, or software designed to generate unlawful content or engage in - unlawful or harmful conduct and/or represent that the outputs of such tools, - models, or software are associated with Meta or Llama 3.2\\n\\nWith respect - to any multimodal models included in Llama 3.2, the rights granted under Section - 1(a) of the Llama 3.2 Community License Agreement are not being granted to you - if you are an individual domiciled in, or a company with a principal place of - business in, the European Union. This restriction does not apply to end users - of a product or service that incorporates any such multimodal models.\\n\\nPlease - report any violation of this Policy, software \u201Cbug,\u201D or other problems - that could lead to a violation of this Policy through one of the following means:\\n\\n\\n\\n* - Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://l.workplace.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeta-llama%2Fllama-models%2Fissues\\u0026h=AT0qV8W9BFT6NwihiOHRuKYQM_UnkzN_NmHMy91OT55gkLpgi4kQupHUl0ssR4dQsIQ8n3tfd0vtkobvsEvt1l4Ic6GXI2EeuHV8N08OG2WnbAmm0FL4ObkazC6G_256vN0lN9DsykCvCqGZ)\\n* - Reporting risky content generated by the model: [developers.facebook.com/llama_output_feedback](http://developers.facebook.com/llama_output_feedback)\\n* - Reporting bugs and security concerns: [facebook.com/whitehat/info](http://facebook.com/whitehat/info)\\n* - Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama - 3.2: LlamaUseReport@meta.com\",\"modelfile\":\"# Modelfile generated by \\\"ollama - show\\\"\\n# To build a new Modelfile based on this, replace FROM with:\\n# - FROM llama3.2:3b\\n\\nFROM /Users/joaomoura/.ollama/models/blobs/sha256-dde5aa3fc5ffc17176b5e8bdc82f587b24b2678c6c66101bf7da77af9f7ccdff\\nTEMPLATE - \\\"\\\"\\\"\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n\\nCutting - Knowledge Date: December 2023\\n\\n{{ if .System }}{{ .System }}\\n{{- end }}\\n{{- - if .Tools }}When you receive a tool call response, use the output to format - an answer to the orginal user question.\\n\\nYou are a helpful assistant with - tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- range $i, - $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages $i)) 1 }}\\n{{- - if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- - if and $.Tools $last }}\\n\\nGiven the following functions, please respond with - a JSON for a function call with its proper arguments that best answers the given - prompt.\\n\\nRespond in the format {\\\"name\\\": function name, \\\"parameters\\\": - dictionary of argument name and its value}. Do not use variables.\\n\\n{{ range - $.Tools }}\\n{{- . }}\\n{{ end }}\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- - else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- - if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name - }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else }}\\n\\n{{ - .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ end }}\\n{{- - else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ - .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER - stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE - \\\"LLAMA 3.2 COMMUNITY LICENSE AGREEMENT\\nLlama 3.2 Version Release Date: - September 25, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions - for use, reproduction, distribution \\nand modification of the Llama Materials - set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, manuals - and documentation accompanying Llama 3.2\\ndistributed by Meta at https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D - or \u201Cyou\u201D means you, or your employer or any other person or entity - (if you are \\nentering into this Agreement on such person or entity\u2019s - behalf), of the age required under\\napplicable laws, rules or regulations to - provide legal consent and that has legal authority\\nto bind your employer or - such other person or entity if you are entering in this Agreement\\non their - behalf.\\n\\n\u201CLlama 3.2\u201D means the foundational large language models - and software and algorithms, including\\nmachine-learning model code, trained - model weights, inference-enabling code, training-enabling code,\\nfine-tuning - enabling code and other elements of the foregoing distributed by Meta at \\nhttps://www.llama.com/llama-downloads.\\n\\n\u201CLlama - Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.2 and Documentation - (and \\nany portion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D - or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located in - or, \\nif you are an entity, your principal place of business is in the EEA - or Switzerland) \\nand Meta Platforms, Inc. (if you are located outside of the - EEA or Switzerland). \\n\\n\\nBy clicking \u201CI Accept\u201D below or by using - or distributing any portion or element of the Llama Materials,\\nyou agree to - be bound by this Agreement.\\n\\n\\n1. License Rights and Redistribution.\\n\\n - \ a. Grant of Rights. You are granted a non-exclusive, worldwide, \\nnon-transferable - and royalty-free limited license under Meta\u2019s intellectual property or - other rights \\nowned by Meta embodied in the Llama Materials to use, reproduce, - distribute, copy, create derivative works \\nof, and make modifications to the - Llama Materials. \\n\\n b. Redistribution and Use. \\n\\n i. If - you distribute or make available the Llama Materials (or any derivative works - thereof), \\nor a product or service (including another AI model) that contains - any of them, you shall (A) provide\\na copy of this Agreement with any such - Llama Materials; and (B) prominently display \u201CBuilt with Llama\u201D\\non - a related website, user interface, blogpost, about page, or product documentation. - If you use the\\nLlama Materials or any outputs or results of the Llama Materials - to create, train, fine tune, or\\notherwise improve an AI model, which is distributed - or made available, you shall also include \u201CLlama\u201D\\nat the beginning - of any such AI model name.\\n\\n ii. If you receive Llama Materials, - or any derivative works thereof, from a Licensee as part\\nof an integrated - end user product, then Section 2 of this Agreement will not apply to you. \\n\\n - \ iii. You must retain in all copies of the Llama Materials that you distribute - the \\nfollowing attribution notice within a \u201CNotice\u201D text file distributed - as a part of such copies: \\n\u201CLlama 3.2 is licensed under the Llama 3.2 - Community License, Copyright \xA9 Meta Platforms,\\nInc. All Rights Reserved.\u201D\\n\\n - \ iv. Your use of the Llama Materials must comply with applicable laws - and regulations\\n(including trade compliance laws and regulations) and adhere - to the Acceptable Use Policy for\\nthe Llama Materials (available at https://www.llama.com/llama3_2/use-policy), - which is hereby \\nincorporated by reference into this Agreement.\\n \\n2. - Additional Commercial Terms. If, on the Llama 3.2 version release date, the - monthly active users\\nof the products or services made available by or for - Licensee, or Licensee\u2019s affiliates, \\nis greater than 700 million monthly - active users in the preceding calendar month, you must request \\na license - from Meta, which Meta may grant to you in its sole discretion, and you are not - authorized to\\nexercise any of the rights under this Agreement unless or until - Meta otherwise expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. - UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY OUTPUT AND \\nRESULTS - THEREFROM ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF - ANY KIND, AND META DISCLAIMS\\nALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND - IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES\\nOF TITLE, NON-INFRINGEMENT, - MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE\\nFOR - DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS - AND ASSUME ANY RISKS ASSOCIATED\\nWITH YOUR USE OF THE LLAMA MATERIALS AND ANY - OUTPUT AND RESULTS.\\n\\n4. Limitation of Liability. IN NO EVENT WILL META OR - ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, \\nWHETHER IN CONTRACT, - TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, - \\nFOR ANY LOST PROFITS OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, - EXEMPLARY OR PUNITIVE DAMAGES, EVEN \\nIF META OR ITS AFFILIATES HAVE BEEN ADVISED - OF THE POSSIBILITY OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n - \ a. No trademark licenses are granted under this Agreement, and in connection - with the Llama Materials, \\nneither Meta nor Licensee may use any name or mark - owned by or associated with the other or any of its affiliates, \\nexcept as - required for reasonable and customary use in describing and redistributing the - Llama Materials or as \\nset forth in this Section 5(a). Meta hereby grants - you a license to use \u201CLlama\u201D (the \u201CMark\u201D) solely as required - \\nto comply with the last sentence of Section 1.b.i. You will comply with Meta\u2019s - brand guidelines (currently accessible \\nat https://about.meta.com/brand/resources/meta/company-brand/). - All goodwill arising out of your use of the Mark \\nwill inure to the benefit - of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and - derivatives made by or for Meta, with respect to any\\n derivative works - and modifications of the Llama Materials that are made by you, as between you - and Meta,\\n you are and will be the owner of such derivative works and modifications.\\n\\n - \ c. If you institute litigation or other proceedings against Meta or any - entity (including a cross-claim or\\n counterclaim in a lawsuit) alleging - that the Llama Materials or Llama 3.2 outputs or results, or any portion\\n - \ of any of the foregoing, constitutes infringement of intellectual property - or other rights owned or licensable\\n by you, then any licenses granted - to you under this Agreement shall terminate as of the date such litigation or\\n - \ claim is filed or instituted. You will indemnify and hold harmless Meta - from and against any claim by any third\\n party arising out of or related - to your use or distribution of the Llama Materials.\\n\\n6. Term and Termination. - The term of this Agreement will commence upon your acceptance of this Agreement - or access\\nto the Llama Materials and will continue in full force and effect - until terminated in accordance with the terms\\nand conditions herein. Meta - may terminate this Agreement if you are in breach of any term or condition of - this\\nAgreement. Upon termination of this Agreement, you shall delete and cease - use of the Llama Materials. Sections 3,\\n4 and 7 shall survive the termination - of this Agreement. \\n\\n7. Governing Law and Jurisdiction. This Agreement will - be governed and construed under the laws of the State of \\nCalifornia without - regard to choice of law principles, and the UN Convention on Contracts for the - International\\nSale of Goods does not apply to this Agreement. The courts of - California shall have exclusive jurisdiction of\\nany dispute arising out of - this Agreement.\\\"\\nLICENSE \\\"**Llama 3.2** **Acceptable Use Policy**\\n\\nMeta - is committed to promoting safe and fair use of its tools and features, including - Llama 3.2. If you access or use Llama 3.2, you agree to this Acceptable Use - Policy (\u201C**Policy**\u201D). The most recent copy of this policy can be - found at [https://www.llama.com/llama3_2/use-policy](https://www.llama.com/llama3_2/use-policy).\\n\\n**Prohibited - Uses**\\n\\nWe want everyone to use Llama 3.2 safely and responsibly. You agree - you will not use, or allow others to use, Llama 3.2 to:\\n\\n\\n\\n1. Violate - the law or others\u2019 rights, including to:\\n 1. Engage in, promote, generate, - contribute to, encourage, plan, incite, or further illegal or unlawful activity - or content, such as:\\n 1. Violence or terrorism\\n 2. Exploitation - or harm to children, including the solicitation, creation, acquisition, or dissemination - of child exploitative content or failure to report Child Sexual Abuse Material\\n - \ 3. Human trafficking, exploitation, and sexual violence\\n 4. - The illegal distribution of information or materials to minors, including obscene - materials, or failure to employ legally required age-gating in connection with - such information or materials.\\n 5. Sexual solicitation\\n 6. - Any other criminal activity\\n 1. Engage in, promote, incite, or facilitate - the harassment, abuse, threatening, or bullying of individuals or groups of - individuals\\n 2. Engage in, promote, incite, or facilitate discrimination - or other unlawful or harmful conduct in the provision of employment, employment - benefits, credit, housing, other economic benefits, or other essential goods - and services\\n 3. Engage in the unauthorized or unlicensed practice of any - profession including, but not limited to, financial, legal, medical/health, - or related professional practices\\n 4. Collect, process, disclose, generate, - or infer private or sensitive information about individuals, including information - about individuals\u2019 identity, health, or demographic information, unless - you have obtained the right to do so in accordance with applicable law\\n 5. - Engage in or facilitate any action or generate any content that infringes, misappropriates, - or otherwise violates any third-party rights, including the outputs or results - of any products or services using the Llama Materials\\n 6. Create, generate, - or facilitate the creation of malicious code, malware, computer viruses or do - anything else that could disable, overburden, interfere with or impair the proper - working, integrity, operation or appearance of a website or computer system\\n - \ 7. Engage in any action, or facilitate any action, to intentionally circumvent - or remove usage restrictions or other safety measures, or to enable functionality - disabled by Meta\\n2. Engage in, promote, incite, facilitate, or assist in the - planning or development of activities that present a risk of death or bodily - harm to individuals, including use of Llama 3.2 related to the following:\\n - \ 8. Military, warfare, nuclear industries or applications, espionage, use - for materials or activities that are subject to the International Traffic Arms - Regulations (ITAR) maintained by the United States Department of State or to - the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical Weapons - Convention Implementation Act of 1997\\n 9. Guns and illegal weapons (including - weapon development)\\n 10. Illegal drugs and regulated/controlled substances\\n - \ 11. Operation of critical infrastructure, transportation technologies, or - heavy machinery\\n 12. Self-harm or harm to others, including suicide, cutting, - and eating disorders\\n 13. Any content intended to incite or promote violence, - abuse, or any infliction of bodily harm to an individual\\n3. Intentionally - deceive or mislead others, including use of Llama 3.2 related to the following:\\n - \ 14. Generating, promoting, or furthering fraud or the creation or promotion - of disinformation\\n 15. Generating, promoting, or furthering defamatory - content, including the creation of defamatory statements, images, or other content\\n - \ 16. Generating, promoting, or further distributing spam\\n 17. Impersonating - another individual without consent, authorization, or legal right\\n 18. - Representing that the use of Llama 3.2 or outputs are human-generated\\n 19. - Generating or facilitating false online engagement, including fake reviews and - other means of fake online engagement\\n4. Fail to appropriately disclose to - end users any known dangers of your AI system\\n5. Interact with third party - tools, models, or software designed to generate unlawful content or engage in - unlawful or harmful conduct and/or represent that the outputs of such tools, - models, or software are associated with Meta or Llama 3.2\\n\\nWith respect - to any multimodal models included in Llama 3.2, the rights granted under Section - 1(a) of the Llama 3.2 Community License Agreement are not being granted to you - if you are an individual domiciled in, or a company with a principal place of - business in, the European Union. This restriction does not apply to end users - of a product or service that incorporates any such multimodal models.\\n\\nPlease - report any violation of this Policy, software \u201Cbug,\u201D or other problems - that could lead to a violation of this Policy through one of the following means:\\n\\n\\n\\n* - Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://l.workplace.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeta-llama%2Fllama-models%2Fissues\\u0026h=AT0qV8W9BFT6NwihiOHRuKYQM_UnkzN_NmHMy91OT55gkLpgi4kQupHUl0ssR4dQsIQ8n3tfd0vtkobvsEvt1l4Ic6GXI2EeuHV8N08OG2WnbAmm0FL4ObkazC6G_256vN0lN9DsykCvCqGZ)\\n* - Reporting risky content generated by the model: [developers.facebook.com/llama_output_feedback](http://developers.facebook.com/llama_output_feedback)\\n* - Reporting bugs and security concerns: [facebook.com/whitehat/info](http://facebook.com/whitehat/info)\\n* - Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama - 3.2: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop - \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n\\nCutting - Knowledge Date: December 2023\\n\\n{{ if .System }}{{ .System }}\\n{{- end }}\\n{{- - if .Tools }}When you receive a tool call response, use the output to format - an answer to the orginal user question.\\n\\nYou are a helpful assistant with - tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- range $i, - $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages $i)) 1 }}\\n{{- - if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- - if and $.Tools $last }}\\n\\nGiven the following functions, please respond with - a JSON for a function call with its proper arguments that best answers the given - prompt.\\n\\nRespond in the format {\\\"name\\\": function name, \\\"parameters\\\": - dictionary of argument name and its value}. Do not use variables.\\n\\n{{ range - $.Tools }}\\n{{- . }}\\n{{ end }}\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- - else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- - if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name - }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else }}\\n\\n{{ - .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ end }}\\n{{- - else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ - .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"3.2B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Llama-3.2\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.parameter_count\":3212749888,\"general.quantization_version\":2,\"general.size_label\":\"3B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":24,\"llama.attention.head_count_kv\":8,\"llama.attention.key_length\":128,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.attention.value_length\":128,\"llama.block_count\":28,\"llama.context_length\":131072,\"llama.embedding_length\":3072,\"llama.feed_forward_length\":8192,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"modified_at\":\"2025-02-20T18:55:09.150577031-08:00\"}" + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//dJDBTsMwEER/pZqzU1ICKfKNMwgQEieCKsfZJgbHG9mbghTl31FatZy4 + 7GHm8N7OBNdAo6WQbbY327zMi81t9vwizVv5sB9f22/DdOg730FhiHxwDUVoPFHtxgSFnhvy0OhJ + TOa96c3V8WbF+jor6syFJHG0AgWuP8kKNGxnZG25HzyJ4wAFG8kINdB/Egq2Y2cpQb9P8NwOkesE + HUbvFfYuuNTtIpnEARpJeIBCMOIOtPundaGhH+hcoaeUTEvQEyJ7goZJySUxYRG1HITCYjpVCKan + CnpV4d47S6vH5bsKalXBtMemyGcoRNqPyfiz4IntQnsK5vlDYTwzh8j9IDvhLwoJuiwX5nmOS7xs + ICzGX5K7zTz/AgAA//8DAIXfumyyAQAA headers: - Content-Type: - - application/json; charset=utf-8 - Date: - - Fri, 21 Feb 2025 02:57:55 GMT - Transfer-Encoding: - - chunked - http_version: HTTP/1.1 - status_code: 200 -- request: - body: '{"name": "llama3.2:3b"}' - headers: - accept: - - '*/*' - accept-encoding: - - gzip, deflate - connection: + Access-Control-Allow-Origin: + - '*' + CF-RAY: + - 93ea9f59596559fa-DEL + Connection: - keep-alive - content-length: - - '23' - content-type: - - application/json - host: - - localhost:11434 - user-agent: - - litellm/1.60.2 - method: POST - uri: http://localhost:11434/api/show - response: - content: "{\"license\":\"LLAMA 3.2 COMMUNITY LICENSE AGREEMENT\\nLlama 3.2 Version - Release Date: September 25, 2024\\n\\n\u201CAgreement\u201D means the terms - and conditions for use, reproduction, distribution \\nand modification of the - Llama Materials set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, - manuals and documentation accompanying Llama 3.2\\ndistributed by Meta at https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D - or \u201Cyou\u201D means you, or your employer or any other person or entity - (if you are \\nentering into this Agreement on such person or entity\u2019s - behalf), of the age required under\\napplicable laws, rules or regulations to - provide legal consent and that has legal authority\\nto bind your employer or - such other person or entity if you are entering in this Agreement\\non their - behalf.\\n\\n\u201CLlama 3.2\u201D means the foundational large language models - and software and algorithms, including\\nmachine-learning model code, trained - model weights, inference-enabling code, training-enabling code,\\nfine-tuning - enabling code and other elements of the foregoing distributed by Meta at \\nhttps://www.llama.com/llama-downloads.\\n\\n\u201CLlama - Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.2 and Documentation - (and \\nany portion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D - or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located in - or, \\nif you are an entity, your principal place of business is in the EEA - or Switzerland) \\nand Meta Platforms, Inc. (if you are located outside of the - EEA or Switzerland). \\n\\n\\nBy clicking \u201CI Accept\u201D below or by using - or distributing any portion or element of the Llama Materials,\\nyou agree to - be bound by this Agreement.\\n\\n\\n1. License Rights and Redistribution.\\n\\n - \ a. Grant of Rights. You are granted a non-exclusive, worldwide, \\nnon-transferable - and royalty-free limited license under Meta\u2019s intellectual property or - other rights \\nowned by Meta embodied in the Llama Materials to use, reproduce, - distribute, copy, create derivative works \\nof, and make modifications to the - Llama Materials. \\n\\n b. Redistribution and Use. \\n\\n i. If - you distribute or make available the Llama Materials (or any derivative works - thereof), \\nor a product or service (including another AI model) that contains - any of them, you shall (A) provide\\na copy of this Agreement with any such - Llama Materials; and (B) prominently display \u201CBuilt with Llama\u201D\\non - a related website, user interface, blogpost, about page, or product documentation. - If you use the\\nLlama Materials or any outputs or results of the Llama Materials - to create, train, fine tune, or\\notherwise improve an AI model, which is distributed - or made available, you shall also include \u201CLlama\u201D\\nat the beginning - of any such AI model name.\\n\\n ii. If you receive Llama Materials, - or any derivative works thereof, from a Licensee as part\\nof an integrated - end user product, then Section 2 of this Agreement will not apply to you. \\n\\n - \ iii. You must retain in all copies of the Llama Materials that you distribute - the \\nfollowing attribution notice within a \u201CNotice\u201D text file distributed - as a part of such copies: \\n\u201CLlama 3.2 is licensed under the Llama 3.2 - Community License, Copyright \xA9 Meta Platforms,\\nInc. All Rights Reserved.\u201D\\n\\n - \ iv. Your use of the Llama Materials must comply with applicable laws - and regulations\\n(including trade compliance laws and regulations) and adhere - to the Acceptable Use Policy for\\nthe Llama Materials (available at https://www.llama.com/llama3_2/use-policy), - which is hereby \\nincorporated by reference into this Agreement.\\n \\n2. - Additional Commercial Terms. If, on the Llama 3.2 version release date, the - monthly active users\\nof the products or services made available by or for - Licensee, or Licensee\u2019s affiliates, \\nis greater than 700 million monthly - active users in the preceding calendar month, you must request \\na license - from Meta, which Meta may grant to you in its sole discretion, and you are not - authorized to\\nexercise any of the rights under this Agreement unless or until - Meta otherwise expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. - UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY OUTPUT AND \\nRESULTS - THEREFROM ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF - ANY KIND, AND META DISCLAIMS\\nALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND - IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES\\nOF TITLE, NON-INFRINGEMENT, - MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE\\nFOR - DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS - AND ASSUME ANY RISKS ASSOCIATED\\nWITH YOUR USE OF THE LLAMA MATERIALS AND ANY - OUTPUT AND RESULTS.\\n\\n4. Limitation of Liability. IN NO EVENT WILL META OR - ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, \\nWHETHER IN CONTRACT, - TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, - \\nFOR ANY LOST PROFITS OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, - EXEMPLARY OR PUNITIVE DAMAGES, EVEN \\nIF META OR ITS AFFILIATES HAVE BEEN ADVISED - OF THE POSSIBILITY OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n - \ a. No trademark licenses are granted under this Agreement, and in connection - with the Llama Materials, \\nneither Meta nor Licensee may use any name or mark - owned by or associated with the other or any of its affiliates, \\nexcept as - required for reasonable and customary use in describing and redistributing the - Llama Materials or as \\nset forth in this Section 5(a). Meta hereby grants - you a license to use \u201CLlama\u201D (the \u201CMark\u201D) solely as required - \\nto comply with the last sentence of Section 1.b.i. You will comply with Meta\u2019s - brand guidelines (currently accessible \\nat https://about.meta.com/brand/resources/meta/company-brand/). - All goodwill arising out of your use of the Mark \\nwill inure to the benefit - of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and - derivatives made by or for Meta, with respect to any\\n derivative works - and modifications of the Llama Materials that are made by you, as between you - and Meta,\\n you are and will be the owner of such derivative works and modifications.\\n\\n - \ c. If you institute litigation or other proceedings against Meta or any - entity (including a cross-claim or\\n counterclaim in a lawsuit) alleging - that the Llama Materials or Llama 3.2 outputs or results, or any portion\\n - \ of any of the foregoing, constitutes infringement of intellectual property - or other rights owned or licensable\\n by you, then any licenses granted - to you under this Agreement shall terminate as of the date such litigation or\\n - \ claim is filed or instituted. You will indemnify and hold harmless Meta - from and against any claim by any third\\n party arising out of or related - to your use or distribution of the Llama Materials.\\n\\n6. Term and Termination. - The term of this Agreement will commence upon your acceptance of this Agreement - or access\\nto the Llama Materials and will continue in full force and effect - until terminated in accordance with the terms\\nand conditions herein. Meta - may terminate this Agreement if you are in breach of any term or condition of - this\\nAgreement. Upon termination of this Agreement, you shall delete and cease - use of the Llama Materials. Sections 3,\\n4 and 7 shall survive the termination - of this Agreement. \\n\\n7. Governing Law and Jurisdiction. This Agreement will - be governed and construed under the laws of the State of \\nCalifornia without - regard to choice of law principles, and the UN Convention on Contracts for the - International\\nSale of Goods does not apply to this Agreement. The courts of - California shall have exclusive jurisdiction of\\nany dispute arising out of - this Agreement.\\n**Llama 3.2** **Acceptable Use Policy**\\n\\nMeta is committed - to promoting safe and fair use of its tools and features, including Llama 3.2. - If you access or use Llama 3.2, you agree to this Acceptable Use Policy (\u201C**Policy**\u201D). - The most recent copy of this policy can be found at [https://www.llama.com/llama3_2/use-policy](https://www.llama.com/llama3_2/use-policy).\\n\\n**Prohibited - Uses**\\n\\nWe want everyone to use Llama 3.2 safely and responsibly. You agree - you will not use, or allow others to use, Llama 3.2 to:\\n\\n\\n\\n1. Violate - the law or others\u2019 rights, including to:\\n 1. Engage in, promote, generate, - contribute to, encourage, plan, incite, or further illegal or unlawful activity - or content, such as:\\n 1. Violence or terrorism\\n 2. Exploitation - or harm to children, including the solicitation, creation, acquisition, or dissemination - of child exploitative content or failure to report Child Sexual Abuse Material\\n - \ 3. Human trafficking, exploitation, and sexual violence\\n 4. - The illegal distribution of information or materials to minors, including obscene - materials, or failure to employ legally required age-gating in connection with - such information or materials.\\n 5. Sexual solicitation\\n 6. - Any other criminal activity\\n 1. Engage in, promote, incite, or facilitate - the harassment, abuse, threatening, or bullying of individuals or groups of - individuals\\n 2. Engage in, promote, incite, or facilitate discrimination - or other unlawful or harmful conduct in the provision of employment, employment - benefits, credit, housing, other economic benefits, or other essential goods - and services\\n 3. Engage in the unauthorized or unlicensed practice of any - profession including, but not limited to, financial, legal, medical/health, - or related professional practices\\n 4. Collect, process, disclose, generate, - or infer private or sensitive information about individuals, including information - about individuals\u2019 identity, health, or demographic information, unless - you have obtained the right to do so in accordance with applicable law\\n 5. - Engage in or facilitate any action or generate any content that infringes, misappropriates, - or otherwise violates any third-party rights, including the outputs or results - of any products or services using the Llama Materials\\n 6. Create, generate, - or facilitate the creation of malicious code, malware, computer viruses or do - anything else that could disable, overburden, interfere with or impair the proper - working, integrity, operation or appearance of a website or computer system\\n - \ 7. Engage in any action, or facilitate any action, to intentionally circumvent - or remove usage restrictions or other safety measures, or to enable functionality - disabled by Meta\\n2. Engage in, promote, incite, facilitate, or assist in the - planning or development of activities that present a risk of death or bodily - harm to individuals, including use of Llama 3.2 related to the following:\\n - \ 8. Military, warfare, nuclear industries or applications, espionage, use - for materials or activities that are subject to the International Traffic Arms - Regulations (ITAR) maintained by the United States Department of State or to - the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical Weapons - Convention Implementation Act of 1997\\n 9. Guns and illegal weapons (including - weapon development)\\n 10. Illegal drugs and regulated/controlled substances\\n - \ 11. Operation of critical infrastructure, transportation technologies, or - heavy machinery\\n 12. Self-harm or harm to others, including suicide, cutting, - and eating disorders\\n 13. Any content intended to incite or promote violence, - abuse, or any infliction of bodily harm to an individual\\n3. Intentionally - deceive or mislead others, including use of Llama 3.2 related to the following:\\n - \ 14. Generating, promoting, or furthering fraud or the creation or promotion - of disinformation\\n 15. Generating, promoting, or furthering defamatory - content, including the creation of defamatory statements, images, or other content\\n - \ 16. Generating, promoting, or further distributing spam\\n 17. Impersonating - another individual without consent, authorization, or legal right\\n 18. - Representing that the use of Llama 3.2 or outputs are human-generated\\n 19. - Generating or facilitating false online engagement, including fake reviews and - other means of fake online engagement\\n4. Fail to appropriately disclose to - end users any known dangers of your AI system\\n5. Interact with third party - tools, models, or software designed to generate unlawful content or engage in - unlawful or harmful conduct and/or represent that the outputs of such tools, - models, or software are associated with Meta or Llama 3.2\\n\\nWith respect - to any multimodal models included in Llama 3.2, the rights granted under Section - 1(a) of the Llama 3.2 Community License Agreement are not being granted to you - if you are an individual domiciled in, or a company with a principal place of - business in, the European Union. This restriction does not apply to end users - of a product or service that incorporates any such multimodal models.\\n\\nPlease - report any violation of this Policy, software \u201Cbug,\u201D or other problems - that could lead to a violation of this Policy through one of the following means:\\n\\n\\n\\n* - Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://l.workplace.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeta-llama%2Fllama-models%2Fissues\\u0026h=AT0qV8W9BFT6NwihiOHRuKYQM_UnkzN_NmHMy91OT55gkLpgi4kQupHUl0ssR4dQsIQ8n3tfd0vtkobvsEvt1l4Ic6GXI2EeuHV8N08OG2WnbAmm0FL4ObkazC6G_256vN0lN9DsykCvCqGZ)\\n* - Reporting risky content generated by the model: [developers.facebook.com/llama_output_feedback](http://developers.facebook.com/llama_output_feedback)\\n* - Reporting bugs and security concerns: [facebook.com/whitehat/info](http://facebook.com/whitehat/info)\\n* - Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama - 3.2: LlamaUseReport@meta.com\",\"modelfile\":\"# Modelfile generated by \\\"ollama - show\\\"\\n# To build a new Modelfile based on this, replace FROM with:\\n# - FROM llama3.2:3b\\n\\nFROM /Users/joaomoura/.ollama/models/blobs/sha256-dde5aa3fc5ffc17176b5e8bdc82f587b24b2678c6c66101bf7da77af9f7ccdff\\nTEMPLATE - \\\"\\\"\\\"\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n\\nCutting - Knowledge Date: December 2023\\n\\n{{ if .System }}{{ .System }}\\n{{- end }}\\n{{- - if .Tools }}When you receive a tool call response, use the output to format - an answer to the orginal user question.\\n\\nYou are a helpful assistant with - tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- range $i, - $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages $i)) 1 }}\\n{{- - if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- - if and $.Tools $last }}\\n\\nGiven the following functions, please respond with - a JSON for a function call with its proper arguments that best answers the given - prompt.\\n\\nRespond in the format {\\\"name\\\": function name, \\\"parameters\\\": - dictionary of argument name and its value}. Do not use variables.\\n\\n{{ range - $.Tools }}\\n{{- . }}\\n{{ end }}\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- - else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- - if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name - }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else }}\\n\\n{{ - .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ end }}\\n{{- - else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ - .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER - stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE - \\\"LLAMA 3.2 COMMUNITY LICENSE AGREEMENT\\nLlama 3.2 Version Release Date: - September 25, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions - for use, reproduction, distribution \\nand modification of the Llama Materials - set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, manuals - and documentation accompanying Llama 3.2\\ndistributed by Meta at https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D - or \u201Cyou\u201D means you, or your employer or any other person or entity - (if you are \\nentering into this Agreement on such person or entity\u2019s - behalf), of the age required under\\napplicable laws, rules or regulations to - provide legal consent and that has legal authority\\nto bind your employer or - such other person or entity if you are entering in this Agreement\\non their - behalf.\\n\\n\u201CLlama 3.2\u201D means the foundational large language models - and software and algorithms, including\\nmachine-learning model code, trained - model weights, inference-enabling code, training-enabling code,\\nfine-tuning - enabling code and other elements of the foregoing distributed by Meta at \\nhttps://www.llama.com/llama-downloads.\\n\\n\u201CLlama - Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.2 and Documentation - (and \\nany portion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D - or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located in - or, \\nif you are an entity, your principal place of business is in the EEA - or Switzerland) \\nand Meta Platforms, Inc. (if you are located outside of the - EEA or Switzerland). \\n\\n\\nBy clicking \u201CI Accept\u201D below or by using - or distributing any portion or element of the Llama Materials,\\nyou agree to - be bound by this Agreement.\\n\\n\\n1. License Rights and Redistribution.\\n\\n - \ a. Grant of Rights. You are granted a non-exclusive, worldwide, \\nnon-transferable - and royalty-free limited license under Meta\u2019s intellectual property or - other rights \\nowned by Meta embodied in the Llama Materials to use, reproduce, - distribute, copy, create derivative works \\nof, and make modifications to the - Llama Materials. \\n\\n b. Redistribution and Use. \\n\\n i. If - you distribute or make available the Llama Materials (or any derivative works - thereof), \\nor a product or service (including another AI model) that contains - any of them, you shall (A) provide\\na copy of this Agreement with any such - Llama Materials; and (B) prominently display \u201CBuilt with Llama\u201D\\non - a related website, user interface, blogpost, about page, or product documentation. - If you use the\\nLlama Materials or any outputs or results of the Llama Materials - to create, train, fine tune, or\\notherwise improve an AI model, which is distributed - or made available, you shall also include \u201CLlama\u201D\\nat the beginning - of any such AI model name.\\n\\n ii. If you receive Llama Materials, - or any derivative works thereof, from a Licensee as part\\nof an integrated - end user product, then Section 2 of this Agreement will not apply to you. \\n\\n - \ iii. You must retain in all copies of the Llama Materials that you distribute - the \\nfollowing attribution notice within a \u201CNotice\u201D text file distributed - as a part of such copies: \\n\u201CLlama 3.2 is licensed under the Llama 3.2 - Community License, Copyright \xA9 Meta Platforms,\\nInc. All Rights Reserved.\u201D\\n\\n - \ iv. Your use of the Llama Materials must comply with applicable laws - and regulations\\n(including trade compliance laws and regulations) and adhere - to the Acceptable Use Policy for\\nthe Llama Materials (available at https://www.llama.com/llama3_2/use-policy), - which is hereby \\nincorporated by reference into this Agreement.\\n \\n2. - Additional Commercial Terms. If, on the Llama 3.2 version release date, the - monthly active users\\nof the products or services made available by or for - Licensee, or Licensee\u2019s affiliates, \\nis greater than 700 million monthly - active users in the preceding calendar month, you must request \\na license - from Meta, which Meta may grant to you in its sole discretion, and you are not - authorized to\\nexercise any of the rights under this Agreement unless or until - Meta otherwise expressly grants you such rights.\\n\\n3. Disclaimer of Warranty. - UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY OUTPUT AND \\nRESULTS - THEREFROM ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, WITHOUT WARRANTIES OF - ANY KIND, AND META DISCLAIMS\\nALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND - IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES\\nOF TITLE, NON-INFRINGEMENT, - MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE\\nFOR - DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS - AND ASSUME ANY RISKS ASSOCIATED\\nWITH YOUR USE OF THE LLAMA MATERIALS AND ANY - OUTPUT AND RESULTS.\\n\\n4. Limitation of Liability. IN NO EVENT WILL META OR - ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, \\nWHETHER IN CONTRACT, - TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, - \\nFOR ANY LOST PROFITS OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, - EXEMPLARY OR PUNITIVE DAMAGES, EVEN \\nIF META OR ITS AFFILIATES HAVE BEEN ADVISED - OF THE POSSIBILITY OF ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n - \ a. No trademark licenses are granted under this Agreement, and in connection - with the Llama Materials, \\nneither Meta nor Licensee may use any name or mark - owned by or associated with the other or any of its affiliates, \\nexcept as - required for reasonable and customary use in describing and redistributing the - Llama Materials or as \\nset forth in this Section 5(a). Meta hereby grants - you a license to use \u201CLlama\u201D (the \u201CMark\u201D) solely as required - \\nto comply with the last sentence of Section 1.b.i. You will comply with Meta\u2019s - brand guidelines (currently accessible \\nat https://about.meta.com/brand/resources/meta/company-brand/). - All goodwill arising out of your use of the Mark \\nwill inure to the benefit - of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and - derivatives made by or for Meta, with respect to any\\n derivative works - and modifications of the Llama Materials that are made by you, as between you - and Meta,\\n you are and will be the owner of such derivative works and modifications.\\n\\n - \ c. If you institute litigation or other proceedings against Meta or any - entity (including a cross-claim or\\n counterclaim in a lawsuit) alleging - that the Llama Materials or Llama 3.2 outputs or results, or any portion\\n - \ of any of the foregoing, constitutes infringement of intellectual property - or other rights owned or licensable\\n by you, then any licenses granted - to you under this Agreement shall terminate as of the date such litigation or\\n - \ claim is filed or instituted. You will indemnify and hold harmless Meta - from and against any claim by any third\\n party arising out of or related - to your use or distribution of the Llama Materials.\\n\\n6. Term and Termination. - The term of this Agreement will commence upon your acceptance of this Agreement - or access\\nto the Llama Materials and will continue in full force and effect - until terminated in accordance with the terms\\nand conditions herein. Meta - may terminate this Agreement if you are in breach of any term or condition of - this\\nAgreement. Upon termination of this Agreement, you shall delete and cease - use of the Llama Materials. Sections 3,\\n4 and 7 shall survive the termination - of this Agreement. \\n\\n7. Governing Law and Jurisdiction. This Agreement will - be governed and construed under the laws of the State of \\nCalifornia without - regard to choice of law principles, and the UN Convention on Contracts for the - International\\nSale of Goods does not apply to this Agreement. The courts of - California shall have exclusive jurisdiction of\\nany dispute arising out of - this Agreement.\\\"\\nLICENSE \\\"**Llama 3.2** **Acceptable Use Policy**\\n\\nMeta - is committed to promoting safe and fair use of its tools and features, including - Llama 3.2. If you access or use Llama 3.2, you agree to this Acceptable Use - Policy (\u201C**Policy**\u201D). The most recent copy of this policy can be - found at [https://www.llama.com/llama3_2/use-policy](https://www.llama.com/llama3_2/use-policy).\\n\\n**Prohibited - Uses**\\n\\nWe want everyone to use Llama 3.2 safely and responsibly. You agree - you will not use, or allow others to use, Llama 3.2 to:\\n\\n\\n\\n1. Violate - the law or others\u2019 rights, including to:\\n 1. Engage in, promote, generate, - contribute to, encourage, plan, incite, or further illegal or unlawful activity - or content, such as:\\n 1. Violence or terrorism\\n 2. Exploitation - or harm to children, including the solicitation, creation, acquisition, or dissemination - of child exploitative content or failure to report Child Sexual Abuse Material\\n - \ 3. Human trafficking, exploitation, and sexual violence\\n 4. - The illegal distribution of information or materials to minors, including obscene - materials, or failure to employ legally required age-gating in connection with - such information or materials.\\n 5. Sexual solicitation\\n 6. - Any other criminal activity\\n 1. Engage in, promote, incite, or facilitate - the harassment, abuse, threatening, or bullying of individuals or groups of - individuals\\n 2. Engage in, promote, incite, or facilitate discrimination - or other unlawful or harmful conduct in the provision of employment, employment - benefits, credit, housing, other economic benefits, or other essential goods - and services\\n 3. Engage in the unauthorized or unlicensed practice of any - profession including, but not limited to, financial, legal, medical/health, - or related professional practices\\n 4. Collect, process, disclose, generate, - or infer private or sensitive information about individuals, including information - about individuals\u2019 identity, health, or demographic information, unless - you have obtained the right to do so in accordance with applicable law\\n 5. - Engage in or facilitate any action or generate any content that infringes, misappropriates, - or otherwise violates any third-party rights, including the outputs or results - of any products or services using the Llama Materials\\n 6. Create, generate, - or facilitate the creation of malicious code, malware, computer viruses or do - anything else that could disable, overburden, interfere with or impair the proper - working, integrity, operation or appearance of a website or computer system\\n - \ 7. Engage in any action, or facilitate any action, to intentionally circumvent - or remove usage restrictions or other safety measures, or to enable functionality - disabled by Meta\\n2. Engage in, promote, incite, facilitate, or assist in the - planning or development of activities that present a risk of death or bodily - harm to individuals, including use of Llama 3.2 related to the following:\\n - \ 8. Military, warfare, nuclear industries or applications, espionage, use - for materials or activities that are subject to the International Traffic Arms - Regulations (ITAR) maintained by the United States Department of State or to - the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical Weapons - Convention Implementation Act of 1997\\n 9. Guns and illegal weapons (including - weapon development)\\n 10. Illegal drugs and regulated/controlled substances\\n - \ 11. Operation of critical infrastructure, transportation technologies, or - heavy machinery\\n 12. Self-harm or harm to others, including suicide, cutting, - and eating disorders\\n 13. Any content intended to incite or promote violence, - abuse, or any infliction of bodily harm to an individual\\n3. Intentionally - deceive or mislead others, including use of Llama 3.2 related to the following:\\n - \ 14. Generating, promoting, or furthering fraud or the creation or promotion - of disinformation\\n 15. Generating, promoting, or furthering defamatory - content, including the creation of defamatory statements, images, or other content\\n - \ 16. Generating, promoting, or further distributing spam\\n 17. Impersonating - another individual without consent, authorization, or legal right\\n 18. - Representing that the use of Llama 3.2 or outputs are human-generated\\n 19. - Generating or facilitating false online engagement, including fake reviews and - other means of fake online engagement\\n4. Fail to appropriately disclose to - end users any known dangers of your AI system\\n5. Interact with third party - tools, models, or software designed to generate unlawful content or engage in - unlawful or harmful conduct and/or represent that the outputs of such tools, - models, or software are associated with Meta or Llama 3.2\\n\\nWith respect - to any multimodal models included in Llama 3.2, the rights granted under Section - 1(a) of the Llama 3.2 Community License Agreement are not being granted to you - if you are an individual domiciled in, or a company with a principal place of - business in, the European Union. This restriction does not apply to end users - of a product or service that incorporates any such multimodal models.\\n\\nPlease - report any violation of this Policy, software \u201Cbug,\u201D or other problems - that could lead to a violation of this Policy through one of the following means:\\n\\n\\n\\n* - Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://l.workplace.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeta-llama%2Fllama-models%2Fissues\\u0026h=AT0qV8W9BFT6NwihiOHRuKYQM_UnkzN_NmHMy91OT55gkLpgi4kQupHUl0ssR4dQsIQ8n3tfd0vtkobvsEvt1l4Ic6GXI2EeuHV8N08OG2WnbAmm0FL4ObkazC6G_256vN0lN9DsykCvCqGZ)\\n* - Reporting risky content generated by the model: [developers.facebook.com/llama_output_feedback](http://developers.facebook.com/llama_output_feedback)\\n* - Reporting bugs and security concerns: [facebook.com/whitehat/info](http://facebook.com/whitehat/info)\\n* - Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama - 3.2: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop - \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n\\nCutting - Knowledge Date: December 2023\\n\\n{{ if .System }}{{ .System }}\\n{{- end }}\\n{{- - if .Tools }}When you receive a tool call response, use the output to format - an answer to the orginal user question.\\n\\nYou are a helpful assistant with - tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- range $i, - $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages $i)) 1 }}\\n{{- - if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- - if and $.Tools $last }}\\n\\nGiven the following functions, please respond with - a JSON for a function call with its proper arguments that best answers the given - prompt.\\n\\nRespond in the format {\\\"name\\\": function name, \\\"parameters\\\": - dictionary of argument name and its value}. Do not use variables.\\n\\n{{ range - $.Tools }}\\n{{- . }}\\n{{ end }}\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- - else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- end }}{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- - if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name - }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else }}\\n\\n{{ - .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ end }}\\n{{- - else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ - .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ - end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"3.2B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Llama-3.2\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.parameter_count\":3212749888,\"general.quantization_version\":2,\"general.size_label\":\"3B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":24,\"llama.attention.head_count_kv\":8,\"llama.attention.key_length\":128,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.attention.value_length\":128,\"llama.block_count\":28,\"llama.context_length\":131072,\"llama.embedding_length\":3072,\"llama.feed_forward_length\":8192,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"modified_at\":\"2025-02-20T18:55:09.150577031-08:00\"}" - headers: + Content-Encoding: + - gzip Content-Type: - - application/json; charset=utf-8 + - application/json Date: - - Fri, 21 Feb 2025 02:57:55 GMT + - Mon, 12 May 2025 14:31:55 GMT + Server: + - cloudflare Transfer-Encoding: - chunked - http_version: HTTP/1.1 - status_code: 200 + Vary: + - Accept-Encoding + x-clerk-auth-message: + - Invalid JWT form. A JWT consists of three parts separated by dots. (reason=token-invalid, + token-carrier=header) + x-clerk-auth-reason: + - token-invalid + x-clerk-auth-status: + - signed-out + status: + code: 200 + message: OK version: 1 diff --git a/tests/utilities/cassettes/test_converter_with_nested_model.yaml b/tests/utilities/cassettes/test_converter_with_nested_model.yaml index b5f8e38e7..4a4f8bbfa 100644 --- a/tests/utilities/cassettes/test_converter_with_nested_model.yaml +++ b/tests/utilities/cassettes/test_converter_with_nested_model.yaml @@ -113,4 +113,434 @@ interactions: - req_2f9d1e3f0ace4944891dde05093486aa http_version: HTTP/1.1 status_code: 200 +- request: + body: '{"name": "llama3.2:3b"}' + headers: + accept: + - '*/*' + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '23' + content-type: + - application/json + host: + - localhost:11434 + user-agent: + - litellm/1.68.0 + method: POST + uri: http://localhost:11434/api/show + response: + body: + string: "{\"license\":\"LLAMA 3.2 COMMUNITY LICENSE AGREEMENT\\nLlama 3.2 Version + Release Date: September 25, 2024\\n\\n\u201CAgreement\u201D means the terms + and conditions for use, reproduction, distribution \\nand modification of + the Llama Materials set forth herein.\\n\\n\u201CDocumentation\u201D means + the specifications, manuals and documentation accompanying Llama 3.2\\ndistributed + by Meta at https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D + or \u201Cyou\u201D means you, or your employer or any other person or entity + (if you are \\nentering into this Agreement on such person or entity\u2019s + behalf), of the age required under\\napplicable laws, rules or regulations + to provide legal consent and that has legal authority\\nto bind your employer + or such other person or entity if you are entering in this Agreement\\non + their behalf.\\n\\n\u201CLlama 3.2\u201D means the foundational large language + models and software and algorithms, including\\nmachine-learning model code, + trained model weights, inference-enabling code, training-enabling code,\\nfine-tuning + enabling code and other elements of the foregoing distributed by Meta at \\nhttps://www.llama.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.2 and + Documentation (and \\nany portion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, \\nif you are an entity, your principal place of business is in the + EEA or Switzerland) \\nand Meta Platforms, Inc. (if you are located outside + of the EEA or Switzerland). \\n\\n\\nBy clicking \u201CI Accept\u201D below + or by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, \\nnon-transferable + and royalty-free limited license under Meta\u2019s intellectual property or + other rights \\nowned by Meta embodied in the Llama Materials to use, reproduce, + distribute, copy, create derivative works \\nof, and make modifications to + the Llama Materials. \\n\\n b. Redistribution and Use. \\n\\n i. + If you distribute or make available the Llama Materials (or any derivative + works thereof), \\nor a product or service (including another AI model) that + contains any of them, you shall (A) provide\\na copy of this Agreement with + any such Llama Materials; and (B) prominently display \u201CBuilt with Llama\u201D\\non + a related website, user interface, blogpost, about page, or product documentation. + If you use the\\nLlama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D\\nat + the beginning of any such AI model name.\\n\\n ii. If you receive Llama + Materials, or any derivative works thereof, from a Licensee as part\\nof an + integrated end user product, then Section 2 of this Agreement will not apply + to you. \\n\\n iii. You must retain in all copies of the Llama Materials + that you distribute the \\nfollowing attribution notice within a \u201CNotice\u201D + text file distributed as a part of such copies: \\n\u201CLlama 3.2 is licensed + under the Llama 3.2 Community License, Copyright \xA9 Meta Platforms,\\nInc. + All Rights Reserved.\u201D\\n\\n iv. Your use of the Llama Materials + must comply with applicable laws and regulations\\n(including trade compliance + laws and regulations) and adhere to the Acceptable Use Policy for\\nthe Llama + Materials (available at https://www.llama.com/llama3_2/use-policy), which + is hereby \\nincorporated by reference into this Agreement.\\n \\n2. Additional + Commercial Terms. If, on the Llama 3.2 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, \\nis greater than 700 million monthly active + users in the preceding calendar month, you must request \\na license from + Meta, which Meta may grant to you in its sole discretion, and you are not + authorized to\\nexercise any of the rights under this Agreement unless or + until Meta otherwise expressly grants you such rights.\\n\\n3. Disclaimer + of Warranty. UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY + OUTPUT AND \\nRESULTS THEREFROM ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, + WITHOUT WARRANTIES OF ANY KIND, AND META DISCLAIMS\\nALL WARRANTIES OF ANY + KIND, BOTH EXPRESS AND IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES\\nOF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. + YOU ARE SOLELY RESPONSIBLE\\nFOR DETERMINING THE APPROPRIATENESS OF USING + OR REDISTRIBUTING THE LLAMA MATERIALS AND ASSUME ANY RISKS ASSOCIATED\\nWITH + YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND RESULTS.\\n\\n4. Limitation + of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE UNDER ANY + THEORY OF LIABILITY, \\nWHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS LIABILITY, + OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, \\nFOR ANY LOST PROFITS OR ANY + INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, EXEMPLARY OR PUNITIVE DAMAGES, + EVEN \\nIF META OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF + ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama + Materials, \\nneither Meta nor Licensee may use any name or mark owned by + or associated with the other or any of its affiliates, \\nexcept as required + for reasonable and customary use in describing and redistributing the Llama + Materials or as \\nset forth in this Section 5(a). Meta hereby grants you + a license to use \u201CLlama\u201D (the \u201CMark\u201D) solely as required + \\nto comply with the last sentence of Section 1.b.i. You will comply with + Meta\u2019s brand guidelines (currently accessible \\nat https://about.meta.com/brand/resources/meta/company-brand/). + All goodwill arising out of your use of the Mark \\nwill inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with respect to any\\n derivative works + and modifications of the Llama Materials that are made by you, as between + you and Meta,\\n you are and will be the owner of such derivative works + and modifications.\\n\\n c. If you institute litigation or other proceedings + against Meta or any entity (including a cross-claim or\\n counterclaim + in a lawsuit) alleging that the Llama Materials or Llama 3.2 outputs or results, + or any portion\\n of any of the foregoing, constitutes infringement of + intellectual property or other rights owned or licensable\\n by you, then + any licenses granted to you under this Agreement shall terminate as of the + date such litigation or\\n claim is filed or instituted. You will indemnify + and hold harmless Meta from and against any claim by any third\\n party + arising out of or related to your use or distribution of the Llama Materials.\\n\\n6. + Term and Termination. The term of this Agreement will commence upon your acceptance + of this Agreement or access\\nto the Llama Materials and will continue in + full force and effect until terminated in accordance with the terms\\nand + conditions herein. Meta may terminate this Agreement if you are in breach + of any term or condition of this\\nAgreement. Upon termination of this Agreement, + you shall delete and cease use of the Llama Materials. Sections 3,\\n4 and + 7 shall survive the termination of this Agreement. \\n\\n7. Governing Law + and Jurisdiction. This Agreement will be governed and construed under the + laws of the State of \\nCalifornia without regard to choice of law principles, + and the UN Convention on Contracts for the International\\nSale of Goods does + not apply to this Agreement. The courts of California shall have exclusive + jurisdiction of\\nany dispute arising out of this Agreement.\\n**Llama 3.2** + **Acceptable Use Policy**\\n\\nMeta is committed to promoting safe and fair + use of its tools and features, including Llama 3.2. If you access or use Llama + 3.2, you agree to this Acceptable Use Policy (\u201C**Policy**\u201D). The + most recent copy of this policy can be found at [https://www.llama.com/llama3_2/use-policy](https://www.llama.com/llama3_2/use-policy).\\n\\n**Prohibited + Uses**\\n\\nWe want everyone to use Llama 3.2 safely and responsibly. You + agree you will not use, or allow others to use, Llama 3.2 to:\\n\\n\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 1. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 2. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 3. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 4. Collect, process, disclose, generate, or infer private or sensitive + information about individuals, including information about individuals\u2019 + identity, health, or demographic information, unless you have obtained the + right to do so in accordance with applicable law\\n 5. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 6. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n 7. + Engage in any action, or facilitate any action, to intentionally circumvent + or remove usage restrictions or other safety measures, or to enable functionality + disabled by Meta\\n2. Engage in, promote, incite, facilitate, or assist in + the planning or development of activities that present a risk of death or + bodily harm to individuals, including use of Llama 3.2 related to the following:\\n + \ 8. Military, warfare, nuclear industries or applications, espionage, use + for materials or activities that are subject to the International Traffic + Arms Regulations (ITAR) maintained by the United States Department of State + or to the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical + Weapons Convention Implementation Act of 1997\\n 9. Guns and illegal weapons + (including weapon development)\\n 10. Illegal drugs and regulated/controlled + substances\\n 11. Operation of critical infrastructure, transportation + technologies, or heavy machinery\\n 12. Self-harm or harm to others, including + suicide, cutting, and eating disorders\\n 13. Any content intended to incite + or promote violence, abuse, or any infliction of bodily harm to an individual\\n3. + Intentionally deceive or mislead others, including use of Llama 3.2 related + to the following:\\n 14. Generating, promoting, or furthering fraud or + the creation or promotion of disinformation\\n 15. Generating, promoting, + or furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 16. Generating, promoting, or further distributing + spam\\n 17. Impersonating another individual without consent, authorization, + or legal right\\n 18. Representing that the use of Llama 3.2 or outputs + are human-generated\\n 19. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n5. + Interact with third party tools, models, or software designed to generate + unlawful content or engage in unlawful or harmful conduct and/or represent + that the outputs of such tools, models, or software are associated with Meta + or Llama 3.2\\n\\nWith respect to any multimodal models included in Llama + 3.2, the rights granted under Section 1(a) of the Llama 3.2 Community License + Agreement are not being granted to you if you are an individual domiciled + in, or a company with a principal place of business in, the European Union. + This restriction does not apply to end users of a product or service that + incorporates any such multimodal models.\\n\\nPlease report any violation + of this Policy, software \u201Cbug,\u201D or other problems that could lead + to a violation of this Policy through one of the following means:\\n\\n\\n\\n* + Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://l.workplace.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeta-llama%2Fllama-models%2Fissues\\u0026h=AT0qV8W9BFT6NwihiOHRuKYQM_UnkzN_NmHMy91OT55gkLpgi4kQupHUl0ssR4dQsIQ8n3tfd0vtkobvsEvt1l4Ic6GXI2EeuHV8N08OG2WnbAmm0FL4ObkazC6G_256vN0lN9DsykCvCqGZ)\\n* + Reporting risky content generated by the model: [developers.facebook.com/llama_output_feedback](http://developers.facebook.com/llama_output_feedback)\\n* + Reporting bugs and security concerns: [facebook.com/whitehat/info](http://facebook.com/whitehat/info)\\n* + Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama + 3.2: LlamaUseReport@meta.com\",\"modelfile\":\"# Modelfile generated by \\\"ollama + show\\\"\\n# To build a new Modelfile based on this, replace FROM with:\\n# + FROM llama3.2:3b\\n\\nFROM /root/.ollama/models/blobs/sha256-dde5aa3fc5ffc17176b5e8bdc82f587b24b2678c6c66101bf7da77af9f7ccdff\\nTEMPLATE + \\\"\\\"\\\"\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n\\nCutting + Knowledge Date: December 2023\\n\\n{{ if .System }}{{ .System }}\\n{{- end + }}\\n{{- if .Tools }}When you receive a tool call response, use the output + to format an answer to the orginal user question.\\n\\nYou are a helpful assistant + with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- range + $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages $i)) 1 }}\\n{{- + if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- end }}{{ if $last + }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\\\"\\\"\\\"\\nPARAMETER stop \\u003c|start_header_id|\\u003e\\nPARAMETER + stop \\u003c|end_header_id|\\u003e\\nPARAMETER stop \\u003c|eot_id|\\u003e\\nLICENSE + \\\"LLAMA 3.2 COMMUNITY LICENSE AGREEMENT\\nLlama 3.2 Version Release Date: + September 25, 2024\\n\\n\u201CAgreement\u201D means the terms and conditions + for use, reproduction, distribution \\nand modification of the Llama Materials + set forth herein.\\n\\n\u201CDocumentation\u201D means the specifications, + manuals and documentation accompanying Llama 3.2\\ndistributed by Meta at + https://llama.meta.com/doc/overview.\\n\\n\u201CLicensee\u201D or \u201Cyou\u201D + means you, or your employer or any other person or entity (if you are \\nentering + into this Agreement on such person or entity\u2019s behalf), of the age required + under\\napplicable laws, rules or regulations to provide legal consent and + that has legal authority\\nto bind your employer or such other person or entity + if you are entering in this Agreement\\non their behalf.\\n\\n\u201CLlama + 3.2\u201D means the foundational large language models and software and algorithms, + including\\nmachine-learning model code, trained model weights, inference-enabling + code, training-enabling code,\\nfine-tuning enabling code and other elements + of the foregoing distributed by Meta at \\nhttps://www.llama.com/llama-downloads.\\n\\n\u201CLlama + Materials\u201D means, collectively, Meta\u2019s proprietary Llama 3.2 and + Documentation (and \\nany portion thereof) made available under this Agreement.\\n\\n\u201CMeta\u201D + or \u201Cwe\u201D means Meta Platforms Ireland Limited (if you are located + in or, \\nif you are an entity, your principal place of business is in the + EEA or Switzerland) \\nand Meta Platforms, Inc. (if you are located outside + of the EEA or Switzerland). \\n\\n\\nBy clicking \u201CI Accept\u201D below + or by using or distributing any portion or element of the Llama Materials,\\nyou + agree to be bound by this Agreement.\\n\\n\\n1. License Rights and Redistribution.\\n\\n + \ a. Grant of Rights. You are granted a non-exclusive, worldwide, \\nnon-transferable + and royalty-free limited license under Meta\u2019s intellectual property or + other rights \\nowned by Meta embodied in the Llama Materials to use, reproduce, + distribute, copy, create derivative works \\nof, and make modifications to + the Llama Materials. \\n\\n b. Redistribution and Use. \\n\\n i. + If you distribute or make available the Llama Materials (or any derivative + works thereof), \\nor a product or service (including another AI model) that + contains any of them, you shall (A) provide\\na copy of this Agreement with + any such Llama Materials; and (B) prominently display \u201CBuilt with Llama\u201D\\non + a related website, user interface, blogpost, about page, or product documentation. + If you use the\\nLlama Materials or any outputs or results of the Llama Materials + to create, train, fine tune, or\\notherwise improve an AI model, which is + distributed or made available, you shall also include \u201CLlama\u201D\\nat + the beginning of any such AI model name.\\n\\n ii. If you receive Llama + Materials, or any derivative works thereof, from a Licensee as part\\nof an + integrated end user product, then Section 2 of this Agreement will not apply + to you. \\n\\n iii. You must retain in all copies of the Llama Materials + that you distribute the \\nfollowing attribution notice within a \u201CNotice\u201D + text file distributed as a part of such copies: \\n\u201CLlama 3.2 is licensed + under the Llama 3.2 Community License, Copyright \xA9 Meta Platforms,\\nInc. + All Rights Reserved.\u201D\\n\\n iv. Your use of the Llama Materials + must comply with applicable laws and regulations\\n(including trade compliance + laws and regulations) and adhere to the Acceptable Use Policy for\\nthe Llama + Materials (available at https://www.llama.com/llama3_2/use-policy), which + is hereby \\nincorporated by reference into this Agreement.\\n \\n2. Additional + Commercial Terms. If, on the Llama 3.2 version release date, the monthly active + users\\nof the products or services made available by or for Licensee, or + Licensee\u2019s affiliates, \\nis greater than 700 million monthly active + users in the preceding calendar month, you must request \\na license from + Meta, which Meta may grant to you in its sole discretion, and you are not + authorized to\\nexercise any of the rights under this Agreement unless or + until Meta otherwise expressly grants you such rights.\\n\\n3. Disclaimer + of Warranty. UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY + OUTPUT AND \\nRESULTS THEREFROM ARE PROVIDED ON AN \u201CAS IS\u201D BASIS, + WITHOUT WARRANTIES OF ANY KIND, AND META DISCLAIMS\\nALL WARRANTIES OF ANY + KIND, BOTH EXPRESS AND IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES\\nOF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. + YOU ARE SOLELY RESPONSIBLE\\nFOR DETERMINING THE APPROPRIATENESS OF USING + OR REDISTRIBUTING THE LLAMA MATERIALS AND ASSUME ANY RISKS ASSOCIATED\\nWITH + YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND RESULTS.\\n\\n4. Limitation + of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE UNDER ANY + THEORY OF LIABILITY, \\nWHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS LIABILITY, + OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, \\nFOR ANY LOST PROFITS OR ANY + INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, EXEMPLARY OR PUNITIVE DAMAGES, + EVEN \\nIF META OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF + ANY OF THE FOREGOING.\\n\\n5. Intellectual Property.\\n\\n a. No trademark + licenses are granted under this Agreement, and in connection with the Llama + Materials, \\nneither Meta nor Licensee may use any name or mark owned by + or associated with the other or any of its affiliates, \\nexcept as required + for reasonable and customary use in describing and redistributing the Llama + Materials or as \\nset forth in this Section 5(a). Meta hereby grants you + a license to use \u201CLlama\u201D (the \u201CMark\u201D) solely as required + \\nto comply with the last sentence of Section 1.b.i. You will comply with + Meta\u2019s brand guidelines (currently accessible \\nat https://about.meta.com/brand/resources/meta/company-brand/). + All goodwill arising out of your use of the Mark \\nwill inure to the benefit + of Meta.\\n\\n b. Subject to Meta\u2019s ownership of Llama Materials and + derivatives made by or for Meta, with respect to any\\n derivative works + and modifications of the Llama Materials that are made by you, as between + you and Meta,\\n you are and will be the owner of such derivative works + and modifications.\\n\\n c. If you institute litigation or other proceedings + against Meta or any entity (including a cross-claim or\\n counterclaim + in a lawsuit) alleging that the Llama Materials or Llama 3.2 outputs or results, + or any portion\\n of any of the foregoing, constitutes infringement of + intellectual property or other rights owned or licensable\\n by you, then + any licenses granted to you under this Agreement shall terminate as of the + date such litigation or\\n claim is filed or instituted. You will indemnify + and hold harmless Meta from and against any claim by any third\\n party + arising out of or related to your use or distribution of the Llama Materials.\\n\\n6. + Term and Termination. The term of this Agreement will commence upon your acceptance + of this Agreement or access\\nto the Llama Materials and will continue in + full force and effect until terminated in accordance with the terms\\nand + conditions herein. Meta may terminate this Agreement if you are in breach + of any term or condition of this\\nAgreement. Upon termination of this Agreement, + you shall delete and cease use of the Llama Materials. Sections 3,\\n4 and + 7 shall survive the termination of this Agreement. \\n\\n7. Governing Law + and Jurisdiction. This Agreement will be governed and construed under the + laws of the State of \\nCalifornia without regard to choice of law principles, + and the UN Convention on Contracts for the International\\nSale of Goods does + not apply to this Agreement. The courts of California shall have exclusive + jurisdiction of\\nany dispute arising out of this Agreement.\\\"\\nLICENSE + \\\"**Llama 3.2** **Acceptable Use Policy**\\n\\nMeta is committed to promoting + safe and fair use of its tools and features, including Llama 3.2. If you access + or use Llama 3.2, you agree to this Acceptable Use Policy (\u201C**Policy**\u201D). + The most recent copy of this policy can be found at [https://www.llama.com/llama3_2/use-policy](https://www.llama.com/llama3_2/use-policy).\\n\\n**Prohibited + Uses**\\n\\nWe want everyone to use Llama 3.2 safely and responsibly. You + agree you will not use, or allow others to use, Llama 3.2 to:\\n\\n\\n\\n1. + Violate the law or others\u2019 rights, including to:\\n 1. Engage in, + promote, generate, contribute to, encourage, plan, incite, or further illegal + or unlawful activity or content, such as:\\n 1. Violence or terrorism\\n + \ 2. Exploitation or harm to children, including the solicitation, creation, + acquisition, or dissemination of child exploitative content or failure to + report Child Sexual Abuse Material\\n 3. Human trafficking, exploitation, + and sexual violence\\n 4. The illegal distribution of information or + materials to minors, including obscene materials, or failure to employ legally + required age-gating in connection with such information or materials.\\n 5. + Sexual solicitation\\n 6. Any other criminal activity\\n 1. Engage + in, promote, incite, or facilitate the harassment, abuse, threatening, or + bullying of individuals or groups of individuals\\n 2. Engage in, promote, + incite, or facilitate discrimination or other unlawful or harmful conduct + in the provision of employment, employment benefits, credit, housing, other + economic benefits, or other essential goods and services\\n 3. Engage in + the unauthorized or unlicensed practice of any profession including, but not + limited to, financial, legal, medical/health, or related professional practices\\n + \ 4. Collect, process, disclose, generate, or infer private or sensitive + information about individuals, including information about individuals\u2019 + identity, health, or demographic information, unless you have obtained the + right to do so in accordance with applicable law\\n 5. Engage in or facilitate + any action or generate any content that infringes, misappropriates, or otherwise + violates any third-party rights, including the outputs or results of any products + or services using the Llama Materials\\n 6. Create, generate, or facilitate + the creation of malicious code, malware, computer viruses or do anything else + that could disable, overburden, interfere with or impair the proper working, + integrity, operation or appearance of a website or computer system\\n 7. + Engage in any action, or facilitate any action, to intentionally circumvent + or remove usage restrictions or other safety measures, or to enable functionality + disabled by Meta\\n2. Engage in, promote, incite, facilitate, or assist in + the planning or development of activities that present a risk of death or + bodily harm to individuals, including use of Llama 3.2 related to the following:\\n + \ 8. Military, warfare, nuclear industries or applications, espionage, use + for materials or activities that are subject to the International Traffic + Arms Regulations (ITAR) maintained by the United States Department of State + or to the U.S. Biological Weapons Anti-Terrorism Act of 1989 or the Chemical + Weapons Convention Implementation Act of 1997\\n 9. Guns and illegal weapons + (including weapon development)\\n 10. Illegal drugs and regulated/controlled + substances\\n 11. Operation of critical infrastructure, transportation + technologies, or heavy machinery\\n 12. Self-harm or harm to others, including + suicide, cutting, and eating disorders\\n 13. Any content intended to incite + or promote violence, abuse, or any infliction of bodily harm to an individual\\n3. + Intentionally deceive or mislead others, including use of Llama 3.2 related + to the following:\\n 14. Generating, promoting, or furthering fraud or + the creation or promotion of disinformation\\n 15. Generating, promoting, + or furthering defamatory content, including the creation of defamatory statements, + images, or other content\\n 16. Generating, promoting, or further distributing + spam\\n 17. Impersonating another individual without consent, authorization, + or legal right\\n 18. Representing that the use of Llama 3.2 or outputs + are human-generated\\n 19. Generating or facilitating false online engagement, + including fake reviews and other means of fake online engagement\\n4. Fail + to appropriately disclose to end users any known dangers of your AI system\\n5. + Interact with third party tools, models, or software designed to generate + unlawful content or engage in unlawful or harmful conduct and/or represent + that the outputs of such tools, models, or software are associated with Meta + or Llama 3.2\\n\\nWith respect to any multimodal models included in Llama + 3.2, the rights granted under Section 1(a) of the Llama 3.2 Community License + Agreement are not being granted to you if you are an individual domiciled + in, or a company with a principal place of business in, the European Union. + This restriction does not apply to end users of a product or service that + incorporates any such multimodal models.\\n\\nPlease report any violation + of this Policy, software \u201Cbug,\u201D or other problems that could lead + to a violation of this Policy through one of the following means:\\n\\n\\n\\n* + Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://l.workplace.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeta-llama%2Fllama-models%2Fissues\\u0026h=AT0qV8W9BFT6NwihiOHRuKYQM_UnkzN_NmHMy91OT55gkLpgi4kQupHUl0ssR4dQsIQ8n3tfd0vtkobvsEvt1l4Ic6GXI2EeuHV8N08OG2WnbAmm0FL4ObkazC6G_256vN0lN9DsykCvCqGZ)\\n* + Reporting risky content generated by the model: [developers.facebook.com/llama_output_feedback](http://developers.facebook.com/llama_output_feedback)\\n* + Reporting bugs and security concerns: [facebook.com/whitehat/info](http://facebook.com/whitehat/info)\\n* + Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama + 3.2: LlamaUseReport@meta.com\\\"\\n\",\"parameters\":\"stop \\\"\\u003c|start_header_id|\\u003e\\\"\\nstop + \ \\\"\\u003c|end_header_id|\\u003e\\\"\\nstop \\\"\\u003c|eot_id|\\u003e\\\"\",\"template\":\"\\u003c|start_header_id|\\u003esystem\\u003c|end_header_id|\\u003e\\n\\nCutting + Knowledge Date: December 2023\\n\\n{{ if .System }}{{ .System }}\\n{{- end + }}\\n{{- if .Tools }}When you receive a tool call response, use the output + to format an answer to the orginal user question.\\n\\nYou are a helpful assistant + with tool calling capabilities.\\n{{- end }}\\u003c|eot_id|\\u003e\\n{{- range + $i, $_ := .Messages }}\\n{{- $last := eq (len (slice $.Messages $i)) 1 }}\\n{{- + if eq .Role \\\"user\\\" }}\\u003c|start_header_id|\\u003euser\\u003c|end_header_id|\\u003e\\n{{- + if and $.Tools $last }}\\n\\nGiven the following functions, please respond + with a JSON for a function call with its proper arguments that best answers + the given prompt.\\n\\nRespond in the format {\\\"name\\\": function name, + \\\"parameters\\\": dictionary of argument name and its value}. Do not use + variables.\\n\\n{{ range $.Tools }}\\n{{- . }}\\n{{ end }}\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- + else }}\\n\\n{{ .Content }}\\u003c|eot_id|\\u003e\\n{{- end }}{{ if $last + }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- else if eq .Role \\\"assistant\\\" }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n{{- + if .ToolCalls }}\\n{{ range .ToolCalls }}\\n{\\\"name\\\": \\\"{{ .Function.Name + }}\\\", \\\"parameters\\\": {{ .Function.Arguments }}}{{ end }}\\n{{- else + }}\\n\\n{{ .Content }}\\n{{- end }}{{ if not $last }}\\u003c|eot_id|\\u003e{{ + end }}\\n{{- else if eq .Role \\\"tool\\\" }}\\u003c|start_header_id|\\u003eipython\\u003c|end_header_id|\\u003e\\n\\n{{ + .Content }}\\u003c|eot_id|\\u003e{{ if $last }}\\u003c|start_header_id|\\u003eassistant\\u003c|end_header_id|\\u003e\\n\\n{{ + end }}\\n{{- end }}\\n{{- end }}\",\"details\":{\"parent_model\":\"\",\"format\":\"gguf\",\"family\":\"llama\",\"families\":[\"llama\"],\"parameter_size\":\"3.2B\",\"quantization_level\":\"Q4_K_M\"},\"model_info\":{\"general.architecture\":\"llama\",\"general.basename\":\"Llama-3.2\",\"general.file_type\":15,\"general.finetune\":\"Instruct\",\"general.languages\":[\"en\",\"de\",\"fr\",\"it\",\"pt\",\"hi\",\"es\",\"th\"],\"general.parameter_count\":3212749888,\"general.quantization_version\":2,\"general.size_label\":\"3B\",\"general.tags\":[\"facebook\",\"meta\",\"pytorch\",\"llama\",\"llama-3\",\"text-generation\"],\"general.type\":\"model\",\"llama.attention.head_count\":24,\"llama.attention.head_count_kv\":8,\"llama.attention.key_length\":128,\"llama.attention.layer_norm_rms_epsilon\":0.00001,\"llama.attention.value_length\":128,\"llama.block_count\":28,\"llama.context_length\":131072,\"llama.embedding_length\":3072,\"llama.feed_forward_length\":8192,\"llama.rope.dimension_count\":128,\"llama.rope.freq_base\":500000,\"llama.vocab_size\":128256,\"tokenizer.ggml.bos_token_id\":128000,\"tokenizer.ggml.eos_token_id\":128009,\"tokenizer.ggml.merges\":null,\"tokenizer.ggml.model\":\"gpt2\",\"tokenizer.ggml.pre\":\"llama-bpe\",\"tokenizer.ggml.token_type\":null,\"tokenizer.ggml.tokens\":null},\"tensors\":[{\"name\":\"rope_freqs.weight\",\"type\":\"F32\",\"shape\":[64]},{\"name\":\"token_embd.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,128256]},{\"name\":\"blk.0.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.0.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.0.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.0.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.0.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.0.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.0.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.0.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.0.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.1.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.1.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.1.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.1.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.1.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.1.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.1.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.1.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.1.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.10.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.10.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.10.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.10.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.10.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.10.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.10.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.10.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.10.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.11.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.11.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.11.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.11.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.11.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.11.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.11.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.11.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.11.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.12.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.12.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.12.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.12.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.12.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.12.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.12.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.12.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.12.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.13.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.13.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.13.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.13.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.13.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.13.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.13.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.13.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.13.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.14.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.14.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.14.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.14.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.14.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.14.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.14.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.14.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.14.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.15.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.15.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.15.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.15.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.15.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.15.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.15.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.15.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.15.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.16.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.16.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.16.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.16.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.16.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.16.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.16.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.16.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.16.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.17.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.17.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.17.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.17.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.17.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.17.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.17.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.17.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.17.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.18.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.18.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.18.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.18.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.18.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.18.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.18.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.18.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.18.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.19.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.19.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.19.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.19.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.19.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.19.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.19.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.19.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.19.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.2.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.2.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.2.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.2.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.2.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.2.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.2.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.2.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.2.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.20.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.20.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.20.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.20.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.20.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.20.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.3.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.3.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.3.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.3.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.3.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.3.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.3.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.3.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.3.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.4.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.4.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.4.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.4.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.4.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.4.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.4.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.4.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.4.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.5.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.5.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.5.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.5.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.5.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.5.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.5.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.5.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.5.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.6.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.6.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.6.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.6.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.6.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.6.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.6.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.6.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.6.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.7.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.7.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.7.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.7.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.7.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.7.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.7.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.7.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.7.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.8.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.8.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.8.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.8.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.8.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.8.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.8.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.8.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.8.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.9.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.9.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.9.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.9.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.9.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.9.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.9.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.9.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.9.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.20.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.20.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.20.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.21.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.21.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.21.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.21.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.21.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.21.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.21.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.21.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.21.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.22.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.22.ffn_down.weight\",\"type\":\"Q3_K_M\",\"shape\":[8192,3072]},{\"name\":\"blk.22.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.22.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.22.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.22.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.22.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.22.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.22.attn_v.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.23.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.23.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.23.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.23.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.23.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.23.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.23.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.23.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.23.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.24.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.24.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.24.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.24.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.24.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.24.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.24.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.24.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.24.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.25.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.25.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.25.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.25.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.25.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.25.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.25.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.25.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.25.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.26.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.26.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.26.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.26.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.26.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.26.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.26.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.26.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.26.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"blk.27.attn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.27.ffn_down.weight\",\"type\":\"Q4_K_S\",\"shape\":[8192,3072]},{\"name\":\"blk.27.ffn_gate.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.27.ffn_up.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,8192]},{\"name\":\"blk.27.ffn_norm.weight\",\"type\":\"F32\",\"shape\":[3072]},{\"name\":\"blk.27.attn_k.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,1024]},{\"name\":\"blk.27.attn_output.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.27.attn_q.weight\",\"type\":\"Q3_K_M\",\"shape\":[3072,3072]},{\"name\":\"blk.27.attn_v.weight\",\"type\":\"Q4_K_S\",\"shape\":[3072,1024]},{\"name\":\"output_norm.weight\",\"type\":\"F32\",\"shape\":[3072]}],\"capabilities\":[\"completion\",\"tools\"],\"modified_at\":\"2025-05-07T01:18:18.293364002Z\"}" + headers: + Content-Type: + - application/json; charset=utf-8 + Date: + - Wed, 07 May 2025 01:18:39 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK version: 1 diff --git a/tests/utilities/cassettes/test_crew_emits_test_kickoff_type_event.yaml b/tests/utilities/cassettes/test_crew_emits_test_kickoff_type_event.yaml index 5905cf66c..aa6c77ad1 100644 --- a/tests/utilities/cassettes/test_crew_emits_test_kickoff_type_event.yaml +++ b/tests/utilities/cassettes/test_crew_emits_test_kickoff_type_event.yaml @@ -1,4 +1,114 @@ interactions: +- request: + body: null + headers: {} + method: GET + uri: https://pypi.org/pypi/agentops/json + response: + body: + string: '{"info":{"author":null,"author_email":"Alex Reibman , + Shawn Qiu , Braelyn Boynton , Howard + Gil , Constantin Teodorescu , Pratyush + Shukla , Travis Dent , Dwij Patel ","bugtrack_url":null,"classifiers":["License + :: OSI Approved :: MIT License","Operating System :: OS Independent","Programming + Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming + Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming + Language :: Python :: 3.13","Programming Language :: Python :: 3.9"],"description":"","description_content_type":null,"docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":null,"keywords":null,"license":null,"license_expression":null,"license_files":["LICENSE"],"maintainer":null,"maintainer_email":null,"name":"agentops","package_url":"https://pypi.org/project/agentops/","platform":null,"project_url":"https://pypi.org/project/agentops/","project_urls":{"Homepage":"https://github.com/AgentOps-AI/agentops","Issues":"https://github.com/AgentOps-AI/agentops/issues"},"provides_extra":null,"release_url":"https://pypi.org/project/agentops/0.4.12/","requires_dist":["httpx<0.29.0,>=0.24.0","opentelemetry-api==1.29.0; + python_version < \"3.10\"","opentelemetry-api>1.29.0; python_version >= \"3.10\"","opentelemetry-exporter-otlp-proto-http==1.29.0; + python_version < \"3.10\"","opentelemetry-exporter-otlp-proto-http>1.29.0; + python_version >= \"3.10\"","opentelemetry-instrumentation==0.50b0; python_version + < \"3.10\"","opentelemetry-instrumentation>=0.50b0; python_version >= \"3.10\"","opentelemetry-sdk==1.29.0; + python_version < \"3.10\"","opentelemetry-sdk>1.29.0; python_version >= \"3.10\"","opentelemetry-semantic-conventions==0.50b0; + python_version < \"3.10\"","opentelemetry-semantic-conventions>=0.50b0; python_version + >= \"3.10\"","ordered-set<5.0.0,>=4.0.0","packaging<25.0,>=21.0","psutil<6.1.0,>=5.9.8","pyyaml<7.0,>=5.3","requests<3.0.0,>=2.0.0","termcolor<2.5.0,>=2.3.0","wrapt<2.0.0,>=1.0.0"],"requires_python":"<3.14,>=3.9","summary":"Observability + and DevTool Platform for AI Agents","version":"0.4.12","yanked":false,"yanked_reason":null},"last_serial":29075100,"releases":{"0.0.1":[{"comment_text":"","digests":{"blake2b_256":"9b4641d084346e88671acc02e3a0049d3e0925fe99edd88c8b82700dc3c04d01","md5":"2b491f3b3dd01edd4ee37c361087bb46","sha256":"f2cb9d59a0413e7977a44a23dbd6a9d89cda5309b63ed08f5c346c7488acf645"},"downloads":-1,"filename":"agentops-0.0.1-py3-none-any.whl","has_sig":false,"md5_digest":"2b491f3b3dd01edd4ee37c361087bb46","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":10328,"upload_time":"2023-08-21T18:33:47","upload_time_iso_8601":"2023-08-21T18:33:47.827866Z","url":"https://files.pythonhosted.org/packages/9b/46/41d084346e88671acc02e3a0049d3e0925fe99edd88c8b82700dc3c04d01/agentops-0.0.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"b280bf609d98778499bd42df723100a8e910d9b9827cbd00b804cf0b13bb3c87","md5":"ff218fc16d45cf72f73d50ee9a0afe82","sha256":"5c3d4311b9dde0c71cb475ec99d2963a71604c78d468b333f55e81364f4fe79e"},"downloads":-1,"filename":"agentops-0.0.1.tar.gz","has_sig":false,"md5_digest":"ff218fc16d45cf72f73d50ee9a0afe82","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":11452,"upload_time":"2023-08-21T18:33:49","upload_time_iso_8601":"2023-08-21T18:33:49.613830Z","url":"https://files.pythonhosted.org/packages/b2/80/bf609d98778499bd42df723100a8e910d9b9827cbd00b804cf0b13bb3c87/agentops-0.0.1.tar.gz","yanked":false,"yanked_reason":null}],"0.0.10":[{"comment_text":"","digests":{"blake2b_256":"92933862af53105332cb524db237138d3284b5d6abcc7df5fd4406e382372d94","md5":"8bdea319b5579775eb88efac72e70cd6","sha256":"e8a333567458c1df35538d626bc596f3ba7b8fa2aac5015bc378f3f7f8850669"},"downloads":-1,"filename":"agentops-0.0.10-py3-none-any.whl","has_sig":false,"md5_digest":"8bdea319b5579775eb88efac72e70cd6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14752,"upload_time":"2023-12-16T01:40:40","upload_time_iso_8601":"2023-12-16T01:40:40.867657Z","url":"https://files.pythonhosted.org/packages/92/93/3862af53105332cb524db237138d3284b5d6abcc7df5fd4406e382372d94/agentops-0.0.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"c63136b1f2e508b67f92ddb5f51f2acf5abdf2bf4b32d5b355d8018b368dc854","md5":"87bdcd4d7469d22ce922234d4f0b2b98","sha256":"5fbc567bece7b218fc35ce70d208e88e89bb399a9dbf84ab7ad59a2aa559648c"},"downloads":-1,"filename":"agentops-0.0.10.tar.gz","has_sig":false,"md5_digest":"87bdcd4d7469d22ce922234d4f0b2b98","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":15099,"upload_time":"2023-12-16T01:40:42","upload_time_iso_8601":"2023-12-16T01:40:42.281826Z","url":"https://files.pythonhosted.org/packages/c6/31/36b1f2e508b67f92ddb5f51f2acf5abdf2bf4b32d5b355d8018b368dc854/agentops-0.0.10.tar.gz","yanked":false,"yanked_reason":null}],"0.0.11":[{"comment_text":"","digests":{"blake2b_256":"7125ed114f918332cda824092f620b1002fd76ab6b538dd83711b31c93907139","md5":"83ba7e621f01412144aa38306fc1e04c","sha256":"cb80823e065d17dc26bdc8fe951ea7e04b23677ef2b4da939669c6fe1b2502bf"},"downloads":-1,"filename":"agentops-0.0.11-py3-none-any.whl","has_sig":false,"md5_digest":"83ba7e621f01412144aa38306fc1e04c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":16627,"upload_time":"2023-12-21T19:50:28","upload_time_iso_8601":"2023-12-21T19:50:28.595886Z","url":"https://files.pythonhosted.org/packages/71/25/ed114f918332cda824092f620b1002fd76ab6b538dd83711b31c93907139/agentops-0.0.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"9e037750b04398cda2548bbf3d84ce554c4009592095c060c4904e773f3a43da","md5":"5bbb120cc9a5f5ff6fb5dd45691ba279","sha256":"cbf0f39768d47e32be448a3ff3ded665fce64ff8a90c0e10692fd7a3ab4790ee"},"downloads":-1,"filename":"agentops-0.0.11.tar.gz","has_sig":false,"md5_digest":"5bbb120cc9a5f5ff6fb5dd45691ba279","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":16794,"upload_time":"2023-12-21T19:50:29","upload_time_iso_8601":"2023-12-21T19:50:29.881561Z","url":"https://files.pythonhosted.org/packages/9e/03/7750b04398cda2548bbf3d84ce554c4009592095c060c4904e773f3a43da/agentops-0.0.11.tar.gz","yanked":false,"yanked_reason":null}],"0.0.12":[{"comment_text":"","digests":{"blake2b_256":"adf5cc3e93b2328532ea80b8b36450b8b48a8199ebbe1f75ebb490e57a926b88","md5":"694ba49ca8841532039bdf8dc0250b85","sha256":"9a2c773efbe3353f60d1b86da12333951dad288ba54839615a53b57e5965bea8"},"downloads":-1,"filename":"agentops-0.0.12-py3-none-any.whl","has_sig":false,"md5_digest":"694ba49ca8841532039bdf8dc0250b85","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18602,"upload_time":"2024-01-03T03:47:07","upload_time_iso_8601":"2024-01-03T03:47:07.184203Z","url":"https://files.pythonhosted.org/packages/ad/f5/cc3e93b2328532ea80b8b36450b8b48a8199ebbe1f75ebb490e57a926b88/agentops-0.0.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"7eb0633ecd30c74a0613c7330ececf0303286622ce429f08ce0daa9ee8cc4ecf","md5":"025daef9622472882a1fa58b6c1fddb5","sha256":"fbb4c38711a7dff3ab08004591451b5a5c33bea5e496fa71fac668c7284513d2"},"downloads":-1,"filename":"agentops-0.0.12.tar.gz","has_sig":false,"md5_digest":"025daef9622472882a1fa58b6c1fddb5","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19826,"upload_time":"2024-01-03T03:47:08","upload_time_iso_8601":"2024-01-03T03:47:08.942790Z","url":"https://files.pythonhosted.org/packages/7e/b0/633ecd30c74a0613c7330ececf0303286622ce429f08ce0daa9ee8cc4ecf/agentops-0.0.12.tar.gz","yanked":false,"yanked_reason":null}],"0.0.13":[{"comment_text":"","digests":{"blake2b_256":"3a0f9c1500adb4191531374db4d7920c51aba92c5472d13d172108e881c36948","md5":"f0a3b78c15af3ab467778f94fb50bf4a","sha256":"3379a231f37a375bda421114a5626643263e84ce951503d0bdff8411149946e0"},"downloads":-1,"filename":"agentops-0.0.13-py3-none-any.whl","has_sig":false,"md5_digest":"f0a3b78c15af3ab467778f94fb50bf4a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18709,"upload_time":"2024-01-07T08:57:57","upload_time_iso_8601":"2024-01-07T08:57:57.456769Z","url":"https://files.pythonhosted.org/packages/3a/0f/9c1500adb4191531374db4d7920c51aba92c5472d13d172108e881c36948/agentops-0.0.13-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"cbf9a3824bd30d7107aaca8d409165c0a3574a879efd7ca0fea755e903623b61","md5":"0ebceb6aad82c0622adcd4c2633fc677","sha256":"5e6adf68c2a533496648ea3fabb6e791f39ce810d18dbc1354d118b195fd8556"},"downloads":-1,"filename":"agentops-0.0.13.tar.gz","has_sig":false,"md5_digest":"0ebceb6aad82c0622adcd4c2633fc677","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19933,"upload_time":"2024-01-07T08:57:59","upload_time_iso_8601":"2024-01-07T08:57:59.146933Z","url":"https://files.pythonhosted.org/packages/cb/f9/a3824bd30d7107aaca8d409165c0a3574a879efd7ca0fea755e903623b61/agentops-0.0.13.tar.gz","yanked":false,"yanked_reason":null}],"0.0.14":[{"comment_text":"","digests":{"blake2b_256":"252b1d8ee3b4ab02215eb1a52865a9f2c209d6d4cbf4a3444fb7faf23b02ca66","md5":"a8ba77b0ec0d25072b2e0535a135cc40","sha256":"d5bb4661642daf8fc63a257ef0f04ccc5c79a73e73d57ea04190e74d9a3e6df9"},"downloads":-1,"filename":"agentops-0.0.14-py3-none-any.whl","has_sig":false,"md5_digest":"a8ba77b0ec0d25072b2e0535a135cc40","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18710,"upload_time":"2024-01-08T21:52:28","upload_time_iso_8601":"2024-01-08T21:52:28.340899Z","url":"https://files.pythonhosted.org/packages/25/2b/1d8ee3b4ab02215eb1a52865a9f2c209d6d4cbf4a3444fb7faf23b02ca66/agentops-0.0.14-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"bf3a1fdf85563c47c2fc6571a1406aecb772f644d53a2adabf4981012971587a","md5":"1ecf7177ab57738c6663384de20887e5","sha256":"c54cee1c9ed1b5b7829fd80d5d01278b1efb50e977e5a890627f4688d0f2afb2"},"downloads":-1,"filename":"agentops-0.0.14.tar.gz","has_sig":false,"md5_digest":"1ecf7177ab57738c6663384de20887e5","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19932,"upload_time":"2024-01-08T21:52:29","upload_time_iso_8601":"2024-01-08T21:52:29.988596Z","url":"https://files.pythonhosted.org/packages/bf/3a/1fdf85563c47c2fc6571a1406aecb772f644d53a2adabf4981012971587a/agentops-0.0.14.tar.gz","yanked":false,"yanked_reason":null}],"0.0.15":[{"comment_text":"","digests":{"blake2b_256":"0c5374cbe5c78db9faa7c939d1a91eff111c4d3f13f4d8d18920ddd48f89f335","md5":"c4528a66151e76c7b1abdcac3c3eaf52","sha256":"aa8034dc9a0e9e56014a06fac521fc2a63a968d34f73e4d4c9bef4b0e87f8241"},"downloads":-1,"filename":"agentops-0.0.15-py3-none-any.whl","has_sig":false,"md5_digest":"c4528a66151e76c7b1abdcac3c3eaf52","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18734,"upload_time":"2024-01-23T08:43:24","upload_time_iso_8601":"2024-01-23T08:43:24.651479Z","url":"https://files.pythonhosted.org/packages/0c/53/74cbe5c78db9faa7c939d1a91eff111c4d3f13f4d8d18920ddd48f89f335/agentops-0.0.15-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"da56c7d8189f4accc182be6729bc44a8006d981173e721ff4751ab784bbadfb3","md5":"cd27bff6c943c6fcbed33ed8280ab5ea","sha256":"71b0e048d2f1b86744105509436cbb6fa51e6b418a50a8253849dc6cdeda6cca"},"downloads":-1,"filename":"agentops-0.0.15.tar.gz","has_sig":false,"md5_digest":"cd27bff6c943c6fcbed33ed8280ab5ea","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19985,"upload_time":"2024-01-23T08:43:26","upload_time_iso_8601":"2024-01-23T08:43:26.316265Z","url":"https://files.pythonhosted.org/packages/da/56/c7d8189f4accc182be6729bc44a8006d981173e721ff4751ab784bbadfb3/agentops-0.0.15.tar.gz","yanked":false,"yanked_reason":null}],"0.0.16":[{"comment_text":"","digests":{"blake2b_256":"b694d78d43f49688829cab72b7326db1d9e3f436f71eed113f26d402fefa6856","md5":"657c2cad11b3c8b97469524bff19b916","sha256":"e9633dcbc419a47db8de13bd0dc4f5d55f0a50ef3434ffe8e1f8a3468561bd60"},"downloads":-1,"filename":"agentops-0.0.16-py3-none-any.whl","has_sig":false,"md5_digest":"657c2cad11b3c8b97469524bff19b916","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18736,"upload_time":"2024-01-23T09:03:05","upload_time_iso_8601":"2024-01-23T09:03:05.799496Z","url":"https://files.pythonhosted.org/packages/b6/94/d78d43f49688829cab72b7326db1d9e3f436f71eed113f26d402fefa6856/agentops-0.0.16-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"ec353005c98c1e2642d61510a9977c2118d3baa72f50e3c45ef6a341bfd9a3b0","md5":"2f9b28dd0953fdd2da606e19b9131006","sha256":"469588d72734fc6e90c66cf9658613baf2a0b94c933a23cab16820435576c61f"},"downloads":-1,"filename":"agentops-0.0.16.tar.gz","has_sig":false,"md5_digest":"2f9b28dd0953fdd2da606e19b9131006","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19986,"upload_time":"2024-01-23T09:03:07","upload_time_iso_8601":"2024-01-23T09:03:07.645949Z","url":"https://files.pythonhosted.org/packages/ec/35/3005c98c1e2642d61510a9977c2118d3baa72f50e3c45ef6a341bfd9a3b0/agentops-0.0.16.tar.gz","yanked":false,"yanked_reason":null}],"0.0.17":[{"comment_text":"","digests":{"blake2b_256":"f3b2eff27fc5373097fc4f4d3d90f4d0fad1c3be7b923a6213750fe1cb022e6e","md5":"20325afd9b9d9633b120b63967d4ae85","sha256":"1a7c8d8fc8821e2e7eedbbe2683e076bfaca3434401b0d1ca6b830bf3230e61e"},"downloads":-1,"filename":"agentops-0.0.17-py3-none-any.whl","has_sig":false,"md5_digest":"20325afd9b9d9633b120b63967d4ae85","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18827,"upload_time":"2024-01-23T17:12:19","upload_time_iso_8601":"2024-01-23T17:12:19.300806Z","url":"https://files.pythonhosted.org/packages/f3/b2/eff27fc5373097fc4f4d3d90f4d0fad1c3be7b923a6213750fe1cb022e6e/agentops-0.0.17-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"ac2a2cb7548cce5b009bee9e6f9b46b26df1cca777830231e2d1603b83740053","md5":"4ac65e38fa45946f1d382ce290b904e9","sha256":"cc1e7f796a84c66a29b271d8f0faa4999c152c80195911b817502da002a3ae02"},"downloads":-1,"filename":"agentops-0.0.17.tar.gz","has_sig":false,"md5_digest":"4ac65e38fa45946f1d382ce290b904e9","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":20063,"upload_time":"2024-01-23T17:12:20","upload_time_iso_8601":"2024-01-23T17:12:20.558647Z","url":"https://files.pythonhosted.org/packages/ac/2a/2cb7548cce5b009bee9e6f9b46b26df1cca777830231e2d1603b83740053/agentops-0.0.17.tar.gz","yanked":false,"yanked_reason":null}],"0.0.18":[{"comment_text":"","digests":{"blake2b_256":"321102c865df2245ab8cfaeb48a72ef7011a7bbbe1553a43791d68295ff7c20d","md5":"ad10ec2bf28bf434d3d2f11500f5a396","sha256":"df241f6a62368aa645d1599bb6885688fba0d49dcc26f97f7f65ab29a6af1a2a"},"downloads":-1,"filename":"agentops-0.0.18-py3-none-any.whl","has_sig":false,"md5_digest":"ad10ec2bf28bf434d3d2f11500f5a396","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18860,"upload_time":"2024-01-24T04:39:06","upload_time_iso_8601":"2024-01-24T04:39:06.952175Z","url":"https://files.pythonhosted.org/packages/32/11/02c865df2245ab8cfaeb48a72ef7011a7bbbe1553a43791d68295ff7c20d/agentops-0.0.18-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"7831bd4249dcf9a0cdcad5451ca62aa83187295bb9c16fd1b3034999bff7ceaf","md5":"76dc30c0a2e68f09c0411c23dd5e3a36","sha256":"47e071424247dbbb1b9aaf07ff60a7e376ae01666478d0305d62a9068d61c1c1"},"downloads":-1,"filename":"agentops-0.0.18.tar.gz","has_sig":false,"md5_digest":"76dc30c0a2e68f09c0411c23dd5e3a36","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":20094,"upload_time":"2024-01-24T04:39:09","upload_time_iso_8601":"2024-01-24T04:39:09.795862Z","url":"https://files.pythonhosted.org/packages/78/31/bd4249dcf9a0cdcad5451ca62aa83187295bb9c16fd1b3034999bff7ceaf/agentops-0.0.18.tar.gz","yanked":false,"yanked_reason":null}],"0.0.19":[{"comment_text":"","digests":{"blake2b_256":"9d48292d743b748eddc01b51747e1dac4b62dea0eb5f240877bae821c0049572","md5":"a26178cdf9d5fc5b466a30e5990c16a1","sha256":"0e663e26aad41bf0288d250685e88130430dd087d03ffc69aa7f43e587921b59"},"downloads":-1,"filename":"agentops-0.0.19-py3-none-any.whl","has_sig":false,"md5_digest":"a26178cdf9d5fc5b466a30e5990c16a1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18380,"upload_time":"2024-01-24T07:58:38","upload_time_iso_8601":"2024-01-24T07:58:38.440021Z","url":"https://files.pythonhosted.org/packages/9d/48/292d743b748eddc01b51747e1dac4b62dea0eb5f240877bae821c0049572/agentops-0.0.19-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"dfe6f3b3fc53b050ec70de947e27227d0ea1e7a75037d082fc5f4d914178d12f","md5":"c62a69951acd19121b059215cf0ddb8b","sha256":"3d46faabf2dad44bd4705279569c76240ab5c71f03f511ba9d363dfd033d453e"},"downloads":-1,"filename":"agentops-0.0.19.tar.gz","has_sig":false,"md5_digest":"c62a69951acd19121b059215cf0ddb8b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19728,"upload_time":"2024-01-24T07:58:41","upload_time_iso_8601":"2024-01-24T07:58:41.352463Z","url":"https://files.pythonhosted.org/packages/df/e6/f3b3fc53b050ec70de947e27227d0ea1e7a75037d082fc5f4d914178d12f/agentops-0.0.19.tar.gz","yanked":false,"yanked_reason":null}],"0.0.2":[{"comment_text":"","digests":{"blake2b_256":"e593e3863d3c61a75e43a347d423f754bc57559989773af6a9c7bc696ff1d6b4","md5":"8ff77b84c32a4e846ce50c6844664b49","sha256":"3bea2bdd8a26c190675aaf2775d97bc2e3c52d7da05c04ae8ec46fed959e0c6e"},"downloads":-1,"filename":"agentops-0.0.2-py3-none-any.whl","has_sig":false,"md5_digest":"8ff77b84c32a4e846ce50c6844664b49","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":10452,"upload_time":"2023-08-28T23:14:23","upload_time_iso_8601":"2023-08-28T23:14:23.488523Z","url":"https://files.pythonhosted.org/packages/e5/93/e3863d3c61a75e43a347d423f754bc57559989773af6a9c7bc696ff1d6b4/agentops-0.0.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"82dbea7088c3ba71d9882a8d09d896d8529100f3103d1fe58ff4b890f9d616f1","md5":"02c4fed5ca014de524e5c1dfe3ec2dd2","sha256":"dc183d28965a9514cb33d916b29b3159189f5be64c4a7d943be0cad1a00379f9"},"downloads":-1,"filename":"agentops-0.0.2.tar.gz","has_sig":false,"md5_digest":"02c4fed5ca014de524e5c1dfe3ec2dd2","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":11510,"upload_time":"2023-08-28T23:14:24","upload_time_iso_8601":"2023-08-28T23:14:24.882664Z","url":"https://files.pythonhosted.org/packages/82/db/ea7088c3ba71d9882a8d09d896d8529100f3103d1fe58ff4b890f9d616f1/agentops-0.0.2.tar.gz","yanked":false,"yanked_reason":null}],"0.0.20":[{"comment_text":"","digests":{"blake2b_256":"ad68d8cc6d631618e04ec6988d0c3f4462a74b0b5849719b8373c2470cf9d533","md5":"09b2866043abc3e5cb5dfc17b80068cb","sha256":"ba20fc48902434858f28e3c4a7febe56d275a28bd33378868e7fcde2f53f2430"},"downloads":-1,"filename":"agentops-0.0.20-py3-none-any.whl","has_sig":false,"md5_digest":"09b2866043abc3e5cb5dfc17b80068cb","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18367,"upload_time":"2024-01-25T07:12:48","upload_time_iso_8601":"2024-01-25T07:12:48.514177Z","url":"https://files.pythonhosted.org/packages/ad/68/d8cc6d631618e04ec6988d0c3f4462a74b0b5849719b8373c2470cf9d533/agentops-0.0.20-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"0ba37435a8ce7125c7d75b931a373a188acf1c9e793be28db1b5c5e5a57d7a10","md5":"fb700178ad44a4697b696ecbd28d115c","sha256":"d50623b03b410c8c88718c29ea271304681e1305b5c05ba824edb92d18aab4f8"},"downloads":-1,"filename":"agentops-0.0.20.tar.gz","has_sig":false,"md5_digest":"fb700178ad44a4697b696ecbd28d115c","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19707,"upload_time":"2024-01-25T07:12:49","upload_time_iso_8601":"2024-01-25T07:12:49.915462Z","url":"https://files.pythonhosted.org/packages/0b/a3/7435a8ce7125c7d75b931a373a188acf1c9e793be28db1b5c5e5a57d7a10/agentops-0.0.20.tar.gz","yanked":false,"yanked_reason":null}],"0.0.21":[{"comment_text":"","digests":{"blake2b_256":"9182ceb8c12e05c0e56ea6c5ba7395c57764ffc5a8134fd045b247793873c172","md5":"ce428cf01a0c1066d3f1f3c8ca6b4f9b","sha256":"fdefe50d945ad669b33c90bf526f9af0e7dc4792b4443aeb907b0a36de2be186"},"downloads":-1,"filename":"agentops-0.0.21-py3-none-any.whl","has_sig":false,"md5_digest":"ce428cf01a0c1066d3f1f3c8ca6b4f9b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18483,"upload_time":"2024-02-22T03:07:14","upload_time_iso_8601":"2024-02-22T03:07:14.032143Z","url":"https://files.pythonhosted.org/packages/91/82/ceb8c12e05c0e56ea6c5ba7395c57764ffc5a8134fd045b247793873c172/agentops-0.0.21-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"acbb361e3d7ed85fc4207ffbbe44ddfa7ee3b8f96b76c3712d4153d63ebb45e2","md5":"360f00d330fa37ad10f687906e31e219","sha256":"ec10f8e64c553a1c400f1d5c792c3daef383cd718747cabb8e5abc9ef685f25d"},"downloads":-1,"filename":"agentops-0.0.21.tar.gz","has_sig":false,"md5_digest":"360f00d330fa37ad10f687906e31e219","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19787,"upload_time":"2024-02-22T03:07:15","upload_time_iso_8601":"2024-02-22T03:07:15.546312Z","url":"https://files.pythonhosted.org/packages/ac/bb/361e3d7ed85fc4207ffbbe44ddfa7ee3b8f96b76c3712d4153d63ebb45e2/agentops-0.0.21.tar.gz","yanked":false,"yanked_reason":null}],"0.0.22":[{"comment_text":"","digests":{"blake2b_256":"b9da29a808d5bd3045f80b5652737e94695056b4a7cf7830ed7de037b1fe941c","md5":"d9e04a68f0b143432b9e34341e4f0a17","sha256":"fbcd962ff08a2e216637341c36c558be74368fbfda0b2408e55388e4c96474ca"},"downloads":-1,"filename":"agentops-0.0.22-py3-none-any.whl","has_sig":false,"md5_digest":"d9e04a68f0b143432b9e34341e4f0a17","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":18485,"upload_time":"2024-02-29T21:16:00","upload_time_iso_8601":"2024-02-29T21:16:00.124986Z","url":"https://files.pythonhosted.org/packages/b9/da/29a808d5bd3045f80b5652737e94695056b4a7cf7830ed7de037b1fe941c/agentops-0.0.22-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"4d842d1c5d80c69e6c9b8f3fd925c2f2fd084ad6eb29d93fdeadbdeca79e5eda","md5":"8f3b286fd01c2c43f7f7b1e4aebe3594","sha256":"397544ce90474fee59f1e8561c92f4923e9034842be593f1ac41437c5fca5841"},"downloads":-1,"filename":"agentops-0.0.22.tar.gz","has_sig":false,"md5_digest":"8f3b286fd01c2c43f7f7b1e4aebe3594","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":19784,"upload_time":"2024-02-29T21:16:01","upload_time_iso_8601":"2024-02-29T21:16:01.909583Z","url":"https://files.pythonhosted.org/packages/4d/84/2d1c5d80c69e6c9b8f3fd925c2f2fd084ad6eb29d93fdeadbdeca79e5eda/agentops-0.0.22.tar.gz","yanked":false,"yanked_reason":null}],"0.0.3":[{"comment_text":"","digests":{"blake2b_256":"324eda261865c2042eeb5da9827a350760e435896855d5480b8f3136212c3f65","md5":"07a9f9f479a14e65b82054a145514e8d","sha256":"35351701e3caab900243771bda19d6613bdcb84cc9ef2e1adde431a775c09af8"},"downloads":-1,"filename":"agentops-0.0.3-py3-none-any.whl","has_sig":false,"md5_digest":"07a9f9f479a14e65b82054a145514e8d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":11872,"upload_time":"2023-09-13T23:03:34","upload_time_iso_8601":"2023-09-13T23:03:34.300564Z","url":"https://files.pythonhosted.org/packages/32/4e/da261865c2042eeb5da9827a350760e435896855d5480b8f3136212c3f65/agentops-0.0.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"643485e455d4f411b56bef2a99c40e32f35f456c93deda0a3915231f1da92e56","md5":"c637ee3cfa358b65ed14cfc20d5f803f","sha256":"45a57492e4072f3f27b5e851f6e501b54c796f6ace5f65ecf70e51dbe18ca1a8"},"downloads":-1,"filename":"agentops-0.0.3.tar.gz","has_sig":false,"md5_digest":"c637ee3cfa358b65ed14cfc20d5f803f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":12455,"upload_time":"2023-09-13T23:03:35","upload_time_iso_8601":"2023-09-13T23:03:35.513682Z","url":"https://files.pythonhosted.org/packages/64/34/85e455d4f411b56bef2a99c40e32f35f456c93deda0a3915231f1da92e56/agentops-0.0.3.tar.gz","yanked":false,"yanked_reason":null}],"0.0.4":[{"comment_text":"","digests":{"blake2b_256":"20cc12cf2391854ed588eaf6cdc87f60048f84e8dc7d15792850b7e90a0406b8","md5":"7a3c11004517e22dc7cde83cf6d8d5e8","sha256":"5a5cdcbe6e32c59237521182b83768e650b4519416b42f4e13929a115a0f20ee"},"downloads":-1,"filename":"agentops-0.0.4-py3-none-any.whl","has_sig":false,"md5_digest":"7a3c11004517e22dc7cde83cf6d8d5e8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":13520,"upload_time":"2023-09-22T09:23:52","upload_time_iso_8601":"2023-09-22T09:23:52.896099Z","url":"https://files.pythonhosted.org/packages/20/cc/12cf2391854ed588eaf6cdc87f60048f84e8dc7d15792850b7e90a0406b8/agentops-0.0.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"98d2d9f9932d17711dd5d98af674c868686bdbdd9aaae9b8d69e9eecfd4c68f4","md5":"712d3bc3b28703963f8f398845b1d17a","sha256":"97743c6420bc5ba2655ac690041d5f5732fb950130cf61ab25ef6d44be6ecfb2"},"downloads":-1,"filename":"agentops-0.0.4.tar.gz","has_sig":false,"md5_digest":"712d3bc3b28703963f8f398845b1d17a","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":14050,"upload_time":"2023-09-22T09:23:54","upload_time_iso_8601":"2023-09-22T09:23:54.315467Z","url":"https://files.pythonhosted.org/packages/98/d2/d9f9932d17711dd5d98af674c868686bdbdd9aaae9b8d69e9eecfd4c68f4/agentops-0.0.4.tar.gz","yanked":false,"yanked_reason":null}],"0.0.5":[{"comment_text":"","digests":{"blake2b_256":"e900cd903074a01932ded9a05dac7849a16c5850ed20c027b954b1eccfba54c1","md5":"1bd4fd6cca14dac4947ecc6c4e3fe0a1","sha256":"e39e1051ba8c58f222f3495196eb939ccc53f04bd279372ae01e694973dd25d6"},"downloads":-1,"filename":"agentops-0.0.5-py3-none-any.whl","has_sig":false,"md5_digest":"1bd4fd6cca14dac4947ecc6c4e3fe0a1","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14107,"upload_time":"2023-10-07T00:22:48","upload_time_iso_8601":"2023-10-07T00:22:48.714074Z","url":"https://files.pythonhosted.org/packages/e9/00/cd903074a01932ded9a05dac7849a16c5850ed20c027b954b1eccfba54c1/agentops-0.0.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"08d5c29068ce4df9c85865b45e1cdb7be1df06e54fce087fad18ec390a7aea54","md5":"4d8fc5553e3199fe24d6118337884a2b","sha256":"8f3662e600ba57e9a102c6bf86a6a1e16c0e53e1f38a84fa1b9c01cc07ca4990"},"downloads":-1,"filename":"agentops-0.0.5.tar.gz","has_sig":false,"md5_digest":"4d8fc5553e3199fe24d6118337884a2b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":14724,"upload_time":"2023-10-07T00:22:50","upload_time_iso_8601":"2023-10-07T00:22:50.304226Z","url":"https://files.pythonhosted.org/packages/08/d5/c29068ce4df9c85865b45e1cdb7be1df06e54fce087fad18ec390a7aea54/agentops-0.0.5.tar.gz","yanked":false,"yanked_reason":null}],"0.0.6":[{"comment_text":"","digests":{"blake2b_256":"2f5b5f3bd8a5b2d96b6417fd4a3fc72ed484e3a4ffacac49035f17bb8df1dd5b","md5":"b7e701ff7953ecca01ceec3a6b9374b2","sha256":"05dea1d06f8f8d06a8f460d18d302febe91f4dad2e3fc0088d05b7017765f3b6"},"downloads":-1,"filename":"agentops-0.0.6-py3-none-any.whl","has_sig":false,"md5_digest":"b7e701ff7953ecca01ceec3a6b9374b2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14236,"upload_time":"2023-10-27T06:56:14","upload_time_iso_8601":"2023-10-27T06:56:14.029277Z","url":"https://files.pythonhosted.org/packages/2f/5b/5f3bd8a5b2d96b6417fd4a3fc72ed484e3a4ffacac49035f17bb8df1dd5b/agentops-0.0.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"4af43743bf40518545c8906687038e5717b1bd33db7ba300a084ec4f6c9c59e0","md5":"0a78dcafcbc6292cf0823181cdc226a7","sha256":"0057cb5d6dc0dd2c444f3371faef40c844a1510700b31824a4fccf5302713361"},"downloads":-1,"filename":"agentops-0.0.6.tar.gz","has_sig":false,"md5_digest":"0a78dcafcbc6292cf0823181cdc226a7","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":14785,"upload_time":"2023-10-27T06:56:15","upload_time_iso_8601":"2023-10-27T06:56:15.069192Z","url":"https://files.pythonhosted.org/packages/4a/f4/3743bf40518545c8906687038e5717b1bd33db7ba300a084ec4f6c9c59e0/agentops-0.0.6.tar.gz","yanked":false,"yanked_reason":null}],"0.0.7":[{"comment_text":"","digests":{"blake2b_256":"3cb1d15c39bbc95f66c64d01cca304f9b4b0c3503509ad92ef29f926c9163599","md5":"f494f6c256899103a80666be68d136ad","sha256":"6984429ca1a9013fd4386105516cb36a46dd7078f7ac81e0a4701f1700bd25b5"},"downloads":-1,"filename":"agentops-0.0.7-py3-none-any.whl","has_sig":false,"md5_digest":"f494f6c256899103a80666be68d136ad","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14370,"upload_time":"2023-11-02T06:37:36","upload_time_iso_8601":"2023-11-02T06:37:36.480189Z","url":"https://files.pythonhosted.org/packages/3c/b1/d15c39bbc95f66c64d01cca304f9b4b0c3503509ad92ef29f926c9163599/agentops-0.0.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"ba709ae02fc635cab51b237dcc3657ec69aac61ee67ea5f903cfae07de19abc8","md5":"b163eaaf9cbafbbd19ec3f91b2b56969","sha256":"a6f36d94a82d8e481b406f040790cefd4d939f07108737c696327d97c0ccdaf4"},"downloads":-1,"filename":"agentops-0.0.7.tar.gz","has_sig":false,"md5_digest":"b163eaaf9cbafbbd19ec3f91b2b56969","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":14895,"upload_time":"2023-11-02T06:37:37","upload_time_iso_8601":"2023-11-02T06:37:37.698159Z","url":"https://files.pythonhosted.org/packages/ba/70/9ae02fc635cab51b237dcc3657ec69aac61ee67ea5f903cfae07de19abc8/agentops-0.0.7.tar.gz","yanked":false,"yanked_reason":null}],"0.0.8":[{"comment_text":"","digests":{"blake2b_256":"8147fa3ee8807ad961aa50a773b6567e3a624000936d3cc1a578af72d83e02e7","md5":"20cffb5534b4545fa1e8b24a6a24b1da","sha256":"5d50b2ab18a203dbb4555a2cd482dae8df5bf2aa3e771a9758ee28b540330da3"},"downloads":-1,"filename":"agentops-0.0.8-py3-none-any.whl","has_sig":false,"md5_digest":"20cffb5534b4545fa1e8b24a6a24b1da","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":14391,"upload_time":"2023-11-23T06:17:56","upload_time_iso_8601":"2023-11-23T06:17:56.154712Z","url":"https://files.pythonhosted.org/packages/81/47/fa3ee8807ad961aa50a773b6567e3a624000936d3cc1a578af72d83e02e7/agentops-0.0.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"707473dc640a3fecfbe84ab7da230f7c862f72f231514a2a488b43a896146ed6","md5":"bba7e74b58849f15d50f4e1270cbd23f","sha256":"3a625d2acc922d99563ce71c5032b0b3b0db57d1c6fade319cf1bb636608eca0"},"downloads":-1,"filename":"agentops-0.0.8.tar.gz","has_sig":false,"md5_digest":"bba7e74b58849f15d50f4e1270cbd23f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":14775,"upload_time":"2023-11-23T06:17:58","upload_time_iso_8601":"2023-11-23T06:17:58.768877Z","url":"https://files.pythonhosted.org/packages/70/74/73dc640a3fecfbe84ab7da230f7c862f72f231514a2a488b43a896146ed6/agentops-0.0.8.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0":[{"comment_text":"","digests":{"blake2b_256":"c2a41dc8456edc9bccc0c560967cfdce23a4d7ab8162946be288b54391d80f7c","md5":"5fb09f82b7eeb270c6644dcd3656953f","sha256":"b480fd51fbffc76ae13bb885c2adb1236a7d3b0095b4dafb4a992f6e25647433"},"downloads":-1,"filename":"agentops-0.1.0-py3-none-any.whl","has_sig":false,"md5_digest":"5fb09f82b7eeb270c6644dcd3656953f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":25045,"upload_time":"2024-04-03T02:01:56","upload_time_iso_8601":"2024-04-03T02:01:56.936873Z","url":"https://files.pythonhosted.org/packages/c2/a4/1dc8456edc9bccc0c560967cfdce23a4d7ab8162946be288b54391d80f7c/agentops-0.1.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"a81756443f28de774cb7c863a2856e1b07658a9a772ba86dfb1cfbb19bc08fe3","md5":"b93c602c1d1da5d8f7a2dcdaa70f8e21","sha256":"22d3dc87dedf93b3b78a0dfdef8c685b2f3bff9fbab32016360e298a24d311dc"},"downloads":-1,"filename":"agentops-0.1.0.tar.gz","has_sig":false,"md5_digest":"b93c602c1d1da5d8f7a2dcdaa70f8e21","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":24685,"upload_time":"2024-04-03T02:01:58","upload_time_iso_8601":"2024-04-03T02:01:58.623055Z","url":"https://files.pythonhosted.org/packages/a8/17/56443f28de774cb7c863a2856e1b07658a9a772ba86dfb1cfbb19bc08fe3/agentops-0.1.0.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0b1":[{"comment_text":"","digests":{"blake2b_256":"c03a329c59f001f50701e9e541775c79304a5ce4ffe34d717b1d2af555362e9e","md5":"7c7e84b3b4448580bf5a7e9c08012477","sha256":"825ab57ac5f7840f5a7f8ac195f4af75ec07a9c0972b17d1a57a595420d06208"},"downloads":-1,"filename":"agentops-0.1.0b1-py3-none-any.whl","has_sig":false,"md5_digest":"7c7e84b3b4448580bf5a7e9c08012477","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":23258,"upload_time":"2024-03-18T18:51:08","upload_time_iso_8601":"2024-03-18T18:51:08.693772Z","url":"https://files.pythonhosted.org/packages/c0/3a/329c59f001f50701e9e541775c79304a5ce4ffe34d717b1d2af555362e9e/agentops-0.1.0b1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"026ee44f1d5a49924867475f7d101abe40170c0674b4b395f28ce88552c1ba71","md5":"9cf6699fe45f13f1893c8992405e7261","sha256":"f5ce4b34999fe4b21a4ce3643980253d30f8ea9c55f01d96cd35631355fc7ac3"},"downloads":-1,"filename":"agentops-0.1.0b1.tar.gz","has_sig":false,"md5_digest":"9cf6699fe45f13f1893c8992405e7261","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":23842,"upload_time":"2024-03-18T18:51:10","upload_time_iso_8601":"2024-03-18T18:51:10.250127Z","url":"https://files.pythonhosted.org/packages/02/6e/e44f1d5a49924867475f7d101abe40170c0674b4b395f28ce88552c1ba71/agentops-0.1.0b1.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0b2":[{"comment_text":"","digests":{"blake2b_256":"6a25e9282f81c3f2615ef6543a0b5ca49dd14b03f311fc5a108ad1aff4f0b720","md5":"1d3e736ef44c0ad8829c50f036ac807b","sha256":"485362b9a68d2327da250f0681b30a9296f0b41e058672b023ae2a8ed924b4d3"},"downloads":-1,"filename":"agentops-0.1.0b2-py3-none-any.whl","has_sig":false,"md5_digest":"1d3e736ef44c0ad8829c50f036ac807b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":23477,"upload_time":"2024-03-21T23:31:20","upload_time_iso_8601":"2024-03-21T23:31:20.022797Z","url":"https://files.pythonhosted.org/packages/6a/25/e9282f81c3f2615ef6543a0b5ca49dd14b03f311fc5a108ad1aff4f0b720/agentops-0.1.0b2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"3165f702684da6e01f8df74a4291be2914c382ec4cb6f8ed2c3dc6d5a9f177ff","md5":"0d51a6f6bf7cb0d3651574404c9c703c","sha256":"cf9a8b54cc4f76592b6380729c03ec7adfe2256e6b200876d7595e50015f5d62"},"downloads":-1,"filename":"agentops-0.1.0b2.tar.gz","has_sig":false,"md5_digest":"0d51a6f6bf7cb0d3651574404c9c703c","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":23659,"upload_time":"2024-03-21T23:31:21","upload_time_iso_8601":"2024-03-21T23:31:21.330837Z","url":"https://files.pythonhosted.org/packages/31/65/f702684da6e01f8df74a4291be2914c382ec4cb6f8ed2c3dc6d5a9f177ff/agentops-0.1.0b2.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0b3":[{"comment_text":"","digests":{"blake2b_256":"2e64bfe82911b8981ce57f86154915d53b45fffa83ccb9cd6cf4cc71af3f796b","md5":"470bc56525c114dddd908628dcb4f267","sha256":"45b5aaa9f38989cfbfcc4f64e3041050df6d417177874316839225085e60d18d"},"downloads":-1,"filename":"agentops-0.1.0b3-py3-none-any.whl","has_sig":false,"md5_digest":"470bc56525c114dddd908628dcb4f267","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":23522,"upload_time":"2024-03-25T19:34:58","upload_time_iso_8601":"2024-03-25T19:34:58.102867Z","url":"https://files.pythonhosted.org/packages/2e/64/bfe82911b8981ce57f86154915d53b45fffa83ccb9cd6cf4cc71af3f796b/agentops-0.1.0b3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"0858e4b718e30a6bbe27d32b7128398cb3884f83f89b4121e36cbb7f979466ca","md5":"8ddb13824d3636d841739479e02a12e6","sha256":"9020daab306fe8c7ed0a98a9edcad9772eb1df0eacce7f936a5ed6bf0f7d2af1"},"downloads":-1,"filename":"agentops-0.1.0b3.tar.gz","has_sig":false,"md5_digest":"8ddb13824d3636d841739479e02a12e6","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":23641,"upload_time":"2024-03-25T19:35:01","upload_time_iso_8601":"2024-03-25T19:35:01.119334Z","url":"https://files.pythonhosted.org/packages/08/58/e4b718e30a6bbe27d32b7128398cb3884f83f89b4121e36cbb7f979466ca/agentops-0.1.0b3.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0b4":[{"comment_text":"","digests":{"blake2b_256":"67f860440d18b674b06c5a9f4f334bf1f1656dca9f6763d5dd3a2be9e5d2c256","md5":"b11f47108926fb46964bbf28675c3e35","sha256":"93a1f241c3fd7880c3d29ab64baa0661d9ba84e2071092aecb3e4fc574037900"},"downloads":-1,"filename":"agentops-0.1.0b4-py3-none-any.whl","has_sig":false,"md5_digest":"b11f47108926fb46964bbf28675c3e35","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":23512,"upload_time":"2024-03-26T01:14:54","upload_time_iso_8601":"2024-03-26T01:14:54.986869Z","url":"https://files.pythonhosted.org/packages/67/f8/60440d18b674b06c5a9f4f334bf1f1656dca9f6763d5dd3a2be9e5d2c256/agentops-0.1.0b4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"10feabb836b04b7eae44383f5616ed1c4c6e9aee9beecc3df4617f69f7e3adc5","md5":"fa4512f74baf9909544ebab021862740","sha256":"4716b4e2a627d7a3846ddee3d334c8f5e8a1a2d231ec5286379c0f22920a2a9d"},"downloads":-1,"filename":"agentops-0.1.0b4.tar.gz","has_sig":false,"md5_digest":"fa4512f74baf9909544ebab021862740","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":23668,"upload_time":"2024-03-26T01:14:56","upload_time_iso_8601":"2024-03-26T01:14:56.921017Z","url":"https://files.pythonhosted.org/packages/10/fe/abb836b04b7eae44383f5616ed1c4c6e9aee9beecc3df4617f69f7e3adc5/agentops-0.1.0b4.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0b5":[{"comment_text":"","digests":{"blake2b_256":"3ac591c14d08000def551f70ccc1da9ab8b37f57561d24cf7fdf6cd3547610ee","md5":"52a2212b79870ee48f0dbdad852dbb90","sha256":"ed050e51137baa4f46769c77595e1cbe212bb86243f27a29b50218782a0d8242"},"downloads":-1,"filename":"agentops-0.1.0b5-py3-none-any.whl","has_sig":false,"md5_digest":"52a2212b79870ee48f0dbdad852dbb90","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":24597,"upload_time":"2024-04-02T00:56:17","upload_time_iso_8601":"2024-04-02T00:56:17.570921Z","url":"https://files.pythonhosted.org/packages/3a/c5/91c14d08000def551f70ccc1da9ab8b37f57561d24cf7fdf6cd3547610ee/agentops-0.1.0b5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"84d6f0bbe5883b86e749f2f02896d94054ebd84b4d66524e4b7004263ae21a6f","md5":"89c6aa7864f45c17f42a38bb6fae904b","sha256":"6ebe6a94f0898fd47521755b6c8083c5f6c0c8bb30d43441200b9ef67998ed01"},"downloads":-1,"filename":"agentops-0.1.0b5.tar.gz","has_sig":false,"md5_digest":"89c6aa7864f45c17f42a38bb6fae904b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":24624,"upload_time":"2024-04-02T00:56:18","upload_time_iso_8601":"2024-04-02T00:56:18.703411Z","url":"https://files.pythonhosted.org/packages/84/d6/f0bbe5883b86e749f2f02896d94054ebd84b4d66524e4b7004263ae21a6f/agentops-0.1.0b5.tar.gz","yanked":false,"yanked_reason":null}],"0.1.0b7":[{"comment_text":"","digests":{"blake2b_256":"3cc4ebdb56f0ff88ad20ddba765093aa6c1fc655a8f2bbafbcb2057f998d814f","md5":"d117591df22735d1dedbdc034c93bff6","sha256":"0d4fdb036836dddcce770cffcb2d564b0011a3307224d9a4675fc9bf80ffa5d2"},"downloads":-1,"filename":"agentops-0.1.0b7-py3-none-any.whl","has_sig":false,"md5_digest":"d117591df22735d1dedbdc034c93bff6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":24592,"upload_time":"2024-04-02T03:20:11","upload_time_iso_8601":"2024-04-02T03:20:11.132539Z","url":"https://files.pythonhosted.org/packages/3c/c4/ebdb56f0ff88ad20ddba765093aa6c1fc655a8f2bbafbcb2057f998d814f/agentops-0.1.0b7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"cbf0c32014a8ee12df4596ec4d90428e73e0cc5277d1b9bd2b53f815a7f0ea1f","md5":"20364eb7d493e6f9b46666f36be8fb2f","sha256":"938b29cd894ff38c7b1dee02f6422458702ccf8f3b69b69bc0e4220e42a33629"},"downloads":-1,"filename":"agentops-0.1.0b7.tar.gz","has_sig":false,"md5_digest":"20364eb7d493e6f9b46666f36be8fb2f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":24611,"upload_time":"2024-04-02T03:20:12","upload_time_iso_8601":"2024-04-02T03:20:12.490524Z","url":"https://files.pythonhosted.org/packages/cb/f0/c32014a8ee12df4596ec4d90428e73e0cc5277d1b9bd2b53f815a7f0ea1f/agentops-0.1.0b7.tar.gz","yanked":false,"yanked_reason":null}],"0.1.1":[{"comment_text":"","digests":{"blake2b_256":"ba13ff18b4ff72805bcbe7437aa445cde854a44b4b358564ed2b044678e270b9","md5":"d4f77de8dd58468c6c307e735c1cfaa9","sha256":"8afc0b7871d17f8cbe9996cab5ca10a8a3ed33a3406e1ddc257fadc214daa79a"},"downloads":-1,"filename":"agentops-0.1.1-py3-none-any.whl","has_sig":false,"md5_digest":"d4f77de8dd58468c6c307e735c1cfaa9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":25189,"upload_time":"2024-04-05T22:41:01","upload_time_iso_8601":"2024-04-05T22:41:01.867983Z","url":"https://files.pythonhosted.org/packages/ba/13/ff18b4ff72805bcbe7437aa445cde854a44b4b358564ed2b044678e270b9/agentops-0.1.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"1dec1d2af6e33dd097feaf1e41a4d34c66d4e4e59ce35c5efac85c18614b9d4b","md5":"f072d8700d4e22fc25eae8bb29a54d1f","sha256":"001582703d5e6ffe67a51f9d67a303b5344e4ef8ca315f24aa43e0dd3d19f53b"},"downloads":-1,"filename":"agentops-0.1.1.tar.gz","has_sig":false,"md5_digest":"f072d8700d4e22fc25eae8bb29a54d1f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":24831,"upload_time":"2024-04-05T22:41:03","upload_time_iso_8601":"2024-04-05T22:41:03.677234Z","url":"https://files.pythonhosted.org/packages/1d/ec/1d2af6e33dd097feaf1e41a4d34c66d4e4e59ce35c5efac85c18614b9d4b/agentops-0.1.1.tar.gz","yanked":false,"yanked_reason":null}],"0.1.10":[{"comment_text":"","digests":{"blake2b_256":"cdf9a295ed62701dd4e56d5b57e45e0425db2bcea992c687534c9a2dd1e001f1","md5":"8d82b9cb794b4b4a1e91ddece5447bcf","sha256":"8b80800d4fa5a7a6c85c79f2bf39a50fb446ab8b209519bd51f44dee3b38517e"},"downloads":-1,"filename":"agentops-0.1.10-py3-none-any.whl","has_sig":false,"md5_digest":"8d82b9cb794b4b4a1e91ddece5447bcf","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":29769,"upload_time":"2024-05-10T20:13:39","upload_time_iso_8601":"2024-05-10T20:13:39.477237Z","url":"https://files.pythonhosted.org/packages/cd/f9/a295ed62701dd4e56d5b57e45e0425db2bcea992c687534c9a2dd1e001f1/agentops-0.1.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"f3788e027be4aa50f677a46bba1e0132f021e90d299c6eae093181a91679e378","md5":"4dd3d1fd8c08efb1a08ae212ed9211d7","sha256":"73fbd36cd5f3052d22e64dbea1fa9d70fb02658a901a600101801daa73f359f9"},"downloads":-1,"filename":"agentops-0.1.10.tar.gz","has_sig":false,"md5_digest":"4dd3d1fd8c08efb1a08ae212ed9211d7","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":30268,"upload_time":"2024-05-10T20:14:25","upload_time_iso_8601":"2024-05-10T20:14:25.258530Z","url":"https://files.pythonhosted.org/packages/f3/78/8e027be4aa50f677a46bba1e0132f021e90d299c6eae093181a91679e378/agentops-0.1.10.tar.gz","yanked":false,"yanked_reason":null}],"0.1.11":[{"comment_text":"","digests":{"blake2b_256":"1ebfaaa31babe3bf687312592f99fe900e3808058658577bd1367b7df0332a08","md5":"73c0b028248665a7927688fb8baa7680","sha256":"e9411981a5d0b1190b93e3e1124db3ac6f17015c65a84b92a793f34d79b694c9"},"downloads":-1,"filename":"agentops-0.1.11-py3-none-any.whl","has_sig":false,"md5_digest":"73c0b028248665a7927688fb8baa7680","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":30952,"upload_time":"2024-05-17T00:32:49","upload_time_iso_8601":"2024-05-17T00:32:49.202597Z","url":"https://files.pythonhosted.org/packages/1e/bf/aaa31babe3bf687312592f99fe900e3808058658577bd1367b7df0332a08/agentops-0.1.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"6ee43f71a7d1d63595058cd6945e7b9e2de1b06ace04176a6723b7bfb37bf880","md5":"36092e907e4f15a6bafd6788383df112","sha256":"4a365ee56303b5b80d9de21fc13ccb7a3fe44544a6c165327bbfd9213bfe0191"},"downloads":-1,"filename":"agentops-0.1.11.tar.gz","has_sig":false,"md5_digest":"36092e907e4f15a6bafd6788383df112","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":31256,"upload_time":"2024-05-17T00:32:50","upload_time_iso_8601":"2024-05-17T00:32:50.919974Z","url":"https://files.pythonhosted.org/packages/6e/e4/3f71a7d1d63595058cd6945e7b9e2de1b06ace04176a6723b7bfb37bf880/agentops-0.1.11.tar.gz","yanked":false,"yanked_reason":null}],"0.1.12":[{"comment_text":"","digests":{"blake2b_256":"67f5227dffbebeffd3b404db0dd71805f00814e458c0d081faf7a4e70c7e984f","md5":"2591924de6f2e5580e4733b0e8336e2c","sha256":"b4b47c990638b74810cc1c38624ada162094b46e3fdd63883642a16bc5258386"},"downloads":-1,"filename":"agentops-0.1.12-py3-none-any.whl","has_sig":false,"md5_digest":"2591924de6f2e5580e4733b0e8336e2c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":35605,"upload_time":"2024-05-24T20:11:52","upload_time_iso_8601":"2024-05-24T20:11:52.863109Z","url":"https://files.pythonhosted.org/packages/67/f5/227dffbebeffd3b404db0dd71805f00814e458c0d081faf7a4e70c7e984f/agentops-0.1.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"9f9ae6dc42ad8d40ad47c6116629b2cbda443d314327ab4d33e1044cb75ba88b","md5":"4c2e76e7b6d4799ef4b464dee29e7255","sha256":"c4f762482fb240fc3503907f52498f2d8d9e4f80236ee4a12bf039317a85fcd7"},"downloads":-1,"filename":"agentops-0.1.12.tar.gz","has_sig":false,"md5_digest":"4c2e76e7b6d4799ef4b464dee29e7255","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":35103,"upload_time":"2024-05-24T20:11:54","upload_time_iso_8601":"2024-05-24T20:11:54.846567Z","url":"https://files.pythonhosted.org/packages/9f/9a/e6dc42ad8d40ad47c6116629b2cbda443d314327ab4d33e1044cb75ba88b/agentops-0.1.12.tar.gz","yanked":false,"yanked_reason":null}],"0.1.2":[{"comment_text":"","digests":{"blake2b_256":"e709193dfe68c2d23de2c60dd0af2af336cbf81d3a3f0c175705783b4c1da580","md5":"588d9877b9767546606d3d6d76d247fc","sha256":"ec79e56889eadd2bab04dfe2f6a899a1b90dc347a66cc80488297368386105b4"},"downloads":-1,"filename":"agentops-0.1.2-py3-none-any.whl","has_sig":false,"md5_digest":"588d9877b9767546606d3d6d76d247fc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":25359,"upload_time":"2024-04-09T23:00:51","upload_time_iso_8601":"2024-04-09T23:00:51.897995Z","url":"https://files.pythonhosted.org/packages/e7/09/193dfe68c2d23de2c60dd0af2af336cbf81d3a3f0c175705783b4c1da580/agentops-0.1.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"8acc872aba374093481bb40ed6b7531b1500b00138baf6bfb9ca7c20fb889d58","md5":"80f8f7c56b1e1a6ff4c48877fe12dd12","sha256":"d213e1037d2d319743889c2bdbc10dc068b0591e2c6c156f69019302490336d5"},"downloads":-1,"filename":"agentops-0.1.2.tar.gz","has_sig":false,"md5_digest":"80f8f7c56b1e1a6ff4c48877fe12dd12","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":24968,"upload_time":"2024-04-09T23:00:53","upload_time_iso_8601":"2024-04-09T23:00:53.227389Z","url":"https://files.pythonhosted.org/packages/8a/cc/872aba374093481bb40ed6b7531b1500b00138baf6bfb9ca7c20fb889d58/agentops-0.1.2.tar.gz","yanked":false,"yanked_reason":null}],"0.1.3":[{"comment_text":"","digests":{"blake2b_256":"9701aad65170506dcf29606e9e619d2c0caaee565e5e8b14a791c3e0e86c6356","md5":"4dc967275c884e2a5a1de8df448ae1c6","sha256":"f1ca0f2c5156d826381e9ebd634555215c67e1cb344683abddb382e594f483e4"},"downloads":-1,"filename":"agentops-0.1.3-py3-none-any.whl","has_sig":false,"md5_digest":"4dc967275c884e2a5a1de8df448ae1c6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":25393,"upload_time":"2024-04-09T23:24:20","upload_time_iso_8601":"2024-04-09T23:24:20.821465Z","url":"https://files.pythonhosted.org/packages/97/01/aad65170506dcf29606e9e619d2c0caaee565e5e8b14a791c3e0e86c6356/agentops-0.1.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"5e22afde273bcf52cfc6581fba804b44eeebea6ff2ae774f0e5917fa1dd3ee09","md5":"624c9b63dbe56c8b1dd535e1b20ada81","sha256":"dd65e80ec70accfac0692171199b6ecfa37a7d109a3c25f2191c0934b5004114"},"downloads":-1,"filename":"agentops-0.1.3.tar.gz","has_sig":false,"md5_digest":"624c9b63dbe56c8b1dd535e1b20ada81","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":24994,"upload_time":"2024-04-09T23:24:22","upload_time_iso_8601":"2024-04-09T23:24:22.610198Z","url":"https://files.pythonhosted.org/packages/5e/22/afde273bcf52cfc6581fba804b44eeebea6ff2ae774f0e5917fa1dd3ee09/agentops-0.1.3.tar.gz","yanked":false,"yanked_reason":null}],"0.1.4":[{"comment_text":"","digests":{"blake2b_256":"50313e20afb169e707941cc3342cecb88060aa8746e95d72a202fd90ac4096b6","md5":"3f64b736522ea40c35db6d2a609fc54f","sha256":"476a5e795a6cc87858a0885be61b1e05eed21e4c6ab47f20348c48717c2ac454"},"downloads":-1,"filename":"agentops-0.1.4-py3-none-any.whl","has_sig":false,"md5_digest":"3f64b736522ea40c35db6d2a609fc54f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":25558,"upload_time":"2024-04-11T19:26:01","upload_time_iso_8601":"2024-04-11T19:26:01.162829Z","url":"https://files.pythonhosted.org/packages/50/31/3e20afb169e707941cc3342cecb88060aa8746e95d72a202fd90ac4096b6/agentops-0.1.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"e0688b1a21f72b85c9bdd56da4223c991bdfb5d0c2accd9ddd326616bf952795","md5":"6f4601047f3e2080b4f7363ff84f15f3","sha256":"d55e64953f84654d44557b496a3b3744a20449b854af84fa83a15be75b362b3d"},"downloads":-1,"filename":"agentops-0.1.4.tar.gz","has_sig":false,"md5_digest":"6f4601047f3e2080b4f7363ff84f15f3","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":25390,"upload_time":"2024-04-11T19:26:02","upload_time_iso_8601":"2024-04-11T19:26:02.991657Z","url":"https://files.pythonhosted.org/packages/e0/68/8b1a21f72b85c9bdd56da4223c991bdfb5d0c2accd9ddd326616bf952795/agentops-0.1.4.tar.gz","yanked":false,"yanked_reason":null}],"0.1.5":[{"comment_text":"","digests":{"blake2b_256":"641c742793fa77c803e5667830ccd34b8d313d11f361a105fe92ce68d871cc5f","md5":"964421a604c67c07b5c72b70ceee6ce8","sha256":"bc65dd4cd85d1ffcba195f2490b5a4380d0b565dd0f4a71ecc64ed96a7fe1eee"},"downloads":-1,"filename":"agentops-0.1.5-py3-none-any.whl","has_sig":false,"md5_digest":"964421a604c67c07b5c72b70ceee6ce8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":25793,"upload_time":"2024-04-20T01:56:23","upload_time_iso_8601":"2024-04-20T01:56:23.089343Z","url":"https://files.pythonhosted.org/packages/64/1c/742793fa77c803e5667830ccd34b8d313d11f361a105fe92ce68d871cc5f/agentops-0.1.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"62beabcb235daf34d4740961c4ad295b8dfb8a053ac6a1e341394e36f722ea89","md5":"3ff7fa3135bc5c4254aaa99e3cc00dc8","sha256":"17f0a573362d9c4770846874a4091662304d6889e21ca6a7dd747be48b9c8597"},"downloads":-1,"filename":"agentops-0.1.5.tar.gz","has_sig":false,"md5_digest":"3ff7fa3135bc5c4254aaa99e3cc00dc8","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":25664,"upload_time":"2024-04-20T01:56:24","upload_time_iso_8601":"2024-04-20T01:56:24.303013Z","url":"https://files.pythonhosted.org/packages/62/be/abcb235daf34d4740961c4ad295b8dfb8a053ac6a1e341394e36f722ea89/agentops-0.1.5.tar.gz","yanked":false,"yanked_reason":null}],"0.1.6":[{"comment_text":"","digests":{"blake2b_256":"430b9f3fcfc2f9778dbbfc1fd68b223e9a91938505ef987e17b93a631bb6b2e4","md5":"28ce2e6aa7a4598fa1e764d9762fd030","sha256":"9dff841ef71f5fad2d897012a00f50011a706970e0e5eaae9d7b0540a637b128"},"downloads":-1,"filename":"agentops-0.1.6-py3-none-any.whl","has_sig":false,"md5_digest":"28ce2e6aa7a4598fa1e764d9762fd030","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":26154,"upload_time":"2024-04-20T03:48:58","upload_time_iso_8601":"2024-04-20T03:48:58.494391Z","url":"https://files.pythonhosted.org/packages/43/0b/9f3fcfc2f9778dbbfc1fd68b223e9a91938505ef987e17b93a631bb6b2e4/agentops-0.1.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"a6c2b437246ce28bad9c2bbad9a9371f7008f76a979fb19699588212f653daf9","md5":"fc81fd641ad630a17191d4a9cf77193b","sha256":"48ddb49fc01eb83ce151d3f08ae670b3d603c454aa35b4ea145f2dc15e081b36"},"downloads":-1,"filename":"agentops-0.1.6.tar.gz","has_sig":false,"md5_digest":"fc81fd641ad630a17191d4a9cf77193b","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":25792,"upload_time":"2024-04-20T03:48:59","upload_time_iso_8601":"2024-04-20T03:48:59.957150Z","url":"https://files.pythonhosted.org/packages/a6/c2/b437246ce28bad9c2bbad9a9371f7008f76a979fb19699588212f653daf9/agentops-0.1.6.tar.gz","yanked":false,"yanked_reason":null}],"0.1.7":[{"comment_text":"","digests":{"blake2b_256":"1ca529570477f62973c6b835e09dc5bbda7498c1a26ba7a428cdb08a71ae86ca","md5":"a1962d1bb72c6fd00e67e83fe56a3692","sha256":"ce7a9e89dcf17507ee6db85017bef8f87fc4e8a23745f3f73e1fbda5489fb6f9"},"downloads":-1,"filename":"agentops-0.1.7-py3-none-any.whl","has_sig":false,"md5_digest":"a1962d1bb72c6fd00e67e83fe56a3692","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":27891,"upload_time":"2024-05-03T19:21:38","upload_time_iso_8601":"2024-05-03T19:21:38.018602Z","url":"https://files.pythonhosted.org/packages/1c/a5/29570477f62973c6b835e09dc5bbda7498c1a26ba7a428cdb08a71ae86ca/agentops-0.1.7-py3-none-any.whl","yanked":true,"yanked_reason":"Introduced + breaking bug"},{"comment_text":"","digests":{"blake2b_256":"b2447ce75e71fcc9605a609b41adc52d517eba4356d15f7ca77d46f683ca07f1","md5":"9a9bb22af4b30c454d46b9a01e8701a0","sha256":"70d22e9a71ea13af6e6ad9c1cffe63c98f9dbccf91bda199825609379b2babaf"},"downloads":-1,"filename":"agentops-0.1.7.tar.gz","has_sig":false,"md5_digest":"9a9bb22af4b30c454d46b9a01e8701a0","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":28122,"upload_time":"2024-05-03T19:21:39","upload_time_iso_8601":"2024-05-03T19:21:39.415523Z","url":"https://files.pythonhosted.org/packages/b2/44/7ce75e71fcc9605a609b41adc52d517eba4356d15f7ca77d46f683ca07f1/agentops-0.1.7.tar.gz","yanked":true,"yanked_reason":"Introduced + breaking bug"}],"0.1.8":[{"comment_text":"","digests":{"blake2b_256":"38c63d0d19eeae4c3c9e3ff5957b10c3c16a4a9fd2be6673fbfc965f8bb4fd08","md5":"e12d3d92f51f5b2fed11a01742e5b5b5","sha256":"d49d113028a891d50900bb4fae253218cc49519f7fe39f9ea15f8f2b29d6d7ef"},"downloads":-1,"filename":"agentops-0.1.8-py3-none-any.whl","has_sig":false,"md5_digest":"e12d3d92f51f5b2fed11a01742e5b5b5","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":27977,"upload_time":"2024-05-04T03:01:53","upload_time_iso_8601":"2024-05-04T03:01:53.905081Z","url":"https://files.pythonhosted.org/packages/38/c6/3d0d19eeae4c3c9e3ff5957b10c3c16a4a9fd2be6673fbfc965f8bb4fd08/agentops-0.1.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"9269e51fa1714f169f692e4fad0a42ebeb77c7a27c48f62b751c869ad6441c69","md5":"07dbdb45f9ec086b1bc314d6a8264423","sha256":"5762137a84e2309e1b6ca9a0fd72c8b72c90f6f73ba49549980722221960cac8"},"downloads":-1,"filename":"agentops-0.1.8.tar.gz","has_sig":false,"md5_digest":"07dbdb45f9ec086b1bc314d6a8264423","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":28189,"upload_time":"2024-05-04T03:01:55","upload_time_iso_8601":"2024-05-04T03:01:55.328668Z","url":"https://files.pythonhosted.org/packages/92/69/e51fa1714f169f692e4fad0a42ebeb77c7a27c48f62b751c869ad6441c69/agentops-0.1.8.tar.gz","yanked":false,"yanked_reason":null}],"0.1.9":[{"comment_text":"","digests":{"blake2b_256":"eb5a920e71729bd1f06b002ee146b38b0d1862357a1f484628e6b20a7d3dcca1","md5":"6ae4929d91c4bb8025edc86b5322630c","sha256":"af7983ba4929b04a34714dd97d7e82c11384ebbe9d7d8bc7b673e1263c4c79a1"},"downloads":-1,"filename":"agentops-0.1.9-py3-none-any.whl","has_sig":false,"md5_digest":"6ae4929d91c4bb8025edc86b5322630c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":28458,"upload_time":"2024-05-07T07:07:30","upload_time_iso_8601":"2024-05-07T07:07:30.798380Z","url":"https://files.pythonhosted.org/packages/eb/5a/920e71729bd1f06b002ee146b38b0d1862357a1f484628e6b20a7d3dcca1/agentops-0.1.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"df2b8fc76d629d8a83b0796612a27b966426550114c930eee5d730654fcd9fe9","md5":"43090632f87cd398ed77b57daa8c28d6","sha256":"7f428bfda2db57a994029b1c9f72b63ca7660616635c9c671b2b729d112a833e"},"downloads":-1,"filename":"agentops-0.1.9.tar.gz","has_sig":false,"md5_digest":"43090632f87cd398ed77b57daa8c28d6","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":28596,"upload_time":"2024-05-07T07:07:35","upload_time_iso_8601":"2024-05-07T07:07:35.242350Z","url":"https://files.pythonhosted.org/packages/df/2b/8fc76d629d8a83b0796612a27b966426550114c930eee5d730654fcd9fe9/agentops-0.1.9.tar.gz","yanked":false,"yanked_reason":null}],"0.2.0":[{"comment_text":"","digests":{"blake2b_256":"483560ec38a81a7e9588d32730ed4f581621169216f968771d5f611388f68a9b","md5":"bdda5480977cccd55628e117e8c8da04","sha256":"bee84bf046c9b4346c5f0f50e2087a992e8d2eae80b3fe9f01c456b49c299bcc"},"downloads":-1,"filename":"agentops-0.2.0-py3-none-any.whl","has_sig":false,"md5_digest":"bdda5480977cccd55628e117e8c8da04","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":35921,"upload_time":"2024-05-28T22:04:14","upload_time_iso_8601":"2024-05-28T22:04:14.813154Z","url":"https://files.pythonhosted.org/packages/48/35/60ec38a81a7e9588d32730ed4f581621169216f968771d5f611388f68a9b/agentops-0.2.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"8d7591c79141d31da4e56d6c6a00737b50dcc2f1ce8a711c1293d2a1d70478fc","md5":"71e3c3b9fe0286c9b58d81ba1c12a42d","sha256":"ca340136abff6a3727729c3eda87f0768e5ba2b672ce03320cb52ad138b05598"},"downloads":-1,"filename":"agentops-0.2.0.tar.gz","has_sig":false,"md5_digest":"71e3c3b9fe0286c9b58d81ba1c12a42d","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":35498,"upload_time":"2024-05-28T22:04:16","upload_time_iso_8601":"2024-05-28T22:04:16.598374Z","url":"https://files.pythonhosted.org/packages/8d/75/91c79141d31da4e56d6c6a00737b50dcc2f1ce8a711c1293d2a1d70478fc/agentops-0.2.0.tar.gz","yanked":false,"yanked_reason":null}],"0.2.1":[{"comment_text":"","digests":{"blake2b_256":"fa3b84032b7dca3d7315b329db6681bbfe0872c2a46d62ca992a05f2d6a078e1","md5":"ce3fc46711fa8225a3d6a9566f95f875","sha256":"7dde95db92c8306c0a17e193bfb5ee20e71e16630ccc629db685e148b3aca3f6"},"downloads":-1,"filename":"agentops-0.2.1-py3-none-any.whl","has_sig":false,"md5_digest":"ce3fc46711fa8225a3d6a9566f95f875","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":36375,"upload_time":"2024-06-03T18:40:02","upload_time_iso_8601":"2024-06-03T18:40:02.820700Z","url":"https://files.pythonhosted.org/packages/fa/3b/84032b7dca3d7315b329db6681bbfe0872c2a46d62ca992a05f2d6a078e1/agentops-0.2.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"d6286ad330da5736588a54575fde95502006da58c3e9f4f15933f5876c1e1482","md5":"faa972c26a3e59fb6ca04f253165da22","sha256":"9f18a36a79c04e9c06f6e96aefe75f0fb1d08e562873315d6cb945488306e515"},"downloads":-1,"filename":"agentops-0.2.1.tar.gz","has_sig":false,"md5_digest":"faa972c26a3e59fb6ca04f253165da22","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":35784,"upload_time":"2024-06-03T18:40:05","upload_time_iso_8601":"2024-06-03T18:40:05.431174Z","url":"https://files.pythonhosted.org/packages/d6/28/6ad330da5736588a54575fde95502006da58c3e9f4f15933f5876c1e1482/agentops-0.2.1.tar.gz","yanked":false,"yanked_reason":null}],"0.2.2":[{"comment_text":"","digests":{"blake2b_256":"fbe73a57dd30e354b7bcc5a86908fc92aa16378035c69eb225ce254387940b5d","md5":"c24e4656bb6de14ffb9d810fe7872829","sha256":"57aab8a5d76a0dd7b1f0b14e90e778c42444eeaf5c48f2f387719735d7d840ee"},"downloads":-1,"filename":"agentops-0.2.2-py3-none-any.whl","has_sig":false,"md5_digest":"c24e4656bb6de14ffb9d810fe7872829","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":36588,"upload_time":"2024-06-05T19:30:29","upload_time_iso_8601":"2024-06-05T19:30:29.208415Z","url":"https://files.pythonhosted.org/packages/fb/e7/3a57dd30e354b7bcc5a86908fc92aa16378035c69eb225ce254387940b5d/agentops-0.2.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"89c51cbd038b9d2898b7f1b05943c338aa4aa9654d7e7763d8fa8d73a25fbfb6","md5":"401bfce001638cc26d7975f6534b5bab","sha256":"d4135c96ad7ec39c81015b3e33dfa977d2d846a685aba0d1922d2d6e3dca7fff"},"downloads":-1,"filename":"agentops-0.2.2.tar.gz","has_sig":false,"md5_digest":"401bfce001638cc26d7975f6534b5bab","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":36012,"upload_time":"2024-06-05T19:30:31","upload_time_iso_8601":"2024-06-05T19:30:31.173781Z","url":"https://files.pythonhosted.org/packages/89/c5/1cbd038b9d2898b7f1b05943c338aa4aa9654d7e7763d8fa8d73a25fbfb6/agentops-0.2.2.tar.gz","yanked":false,"yanked_reason":null}],"0.2.3":[{"comment_text":"","digests":{"blake2b_256":"b66fb36e2bb7158f45b6c496ce3cec50ef861e130cfa3ec8c62e709d63fa9e94","md5":"b3f6a8d97cc0129a9e4730b7810509c6","sha256":"a1829a21301223c26464cbc9da5bfba2f3750e21238912ee1d2f3097c358859a"},"downloads":-1,"filename":"agentops-0.2.3-py3-none-any.whl","has_sig":false,"md5_digest":"b3f6a8d97cc0129a9e4730b7810509c6","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":36986,"upload_time":"2024-06-13T19:56:33","upload_time_iso_8601":"2024-06-13T19:56:33.675807Z","url":"https://files.pythonhosted.org/packages/b6/6f/b36e2bb7158f45b6c496ce3cec50ef861e130cfa3ec8c62e709d63fa9e94/agentops-0.2.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"f4d34aed81a4ec4251131b94fb8ed4edf0823922bfda66ba0e4c43d9452111d2","md5":"466abe04d466a950d4bcebbe9c3ccc27","sha256":"b502b83bb4954386a28c4304028ba8cd2b45303f7e1f84720477b521267a3b4e"},"downloads":-1,"filename":"agentops-0.2.3.tar.gz","has_sig":false,"md5_digest":"466abe04d466a950d4bcebbe9c3ccc27","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":37024,"upload_time":"2024-06-13T19:56:35","upload_time_iso_8601":"2024-06-13T19:56:35.481794Z","url":"https://files.pythonhosted.org/packages/f4/d3/4aed81a4ec4251131b94fb8ed4edf0823922bfda66ba0e4c43d9452111d2/agentops-0.2.3.tar.gz","yanked":false,"yanked_reason":null}],"0.2.4":[{"comment_text":"","digests":{"blake2b_256":"a4d4e91fb66bc2eb7effb53f7d9481da04e60809d10240306452a8307aca7985","md5":"f1ba1befb6bd854d5fd6f670937dcb55","sha256":"96162c28cc0391011c04e654273e5a96ec4dcf015e27a7ac12a1ea4077d38950"},"downloads":-1,"filename":"agentops-0.2.4-py3-none-any.whl","has_sig":false,"md5_digest":"f1ba1befb6bd854d5fd6f670937dcb55","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":37518,"upload_time":"2024-06-24T19:31:58","upload_time_iso_8601":"2024-06-24T19:31:58.838680Z","url":"https://files.pythonhosted.org/packages/a4/d4/e91fb66bc2eb7effb53f7d9481da04e60809d10240306452a8307aca7985/agentops-0.2.4-py3-none-any.whl","yanked":true,"yanked_reason":"Potential + breaking change"},{"comment_text":"","digests":{"blake2b_256":"8e4b920629e08c956cdc74a31ab466d005eb13d86c2d58fa2d2bd261cf36c37b","md5":"527c82f21f01f13b879a1fca90ddb209","sha256":"d263de21eb40e15eb17adc31821fc0dee4ff4ca4501a9feb7ed376d473063208"},"downloads":-1,"filename":"agentops-0.2.4.tar.gz","has_sig":false,"md5_digest":"527c82f21f01f13b879a1fca90ddb209","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":37656,"upload_time":"2024-06-24T19:32:01","upload_time_iso_8601":"2024-06-24T19:32:01.155014Z","url":"https://files.pythonhosted.org/packages/8e/4b/920629e08c956cdc74a31ab466d005eb13d86c2d58fa2d2bd261cf36c37b/agentops-0.2.4.tar.gz","yanked":true,"yanked_reason":"Potential + breaking change"}],"0.2.5":[{"comment_text":"","digests":{"blake2b_256":"47c73ab9d7d971b664a9bdff6e6464afb6c1de8eb0f845d8de93eb036d5dcc60","md5":"bed576cc1591da4783777920fb223761","sha256":"ff87b82d1efaf50b10624e00c6e9334f4c16ffe08ec7f9889b4417c231c31471"},"downloads":-1,"filename":"agentops-0.2.5-py3-none-any.whl","has_sig":false,"md5_digest":"bed576cc1591da4783777920fb223761","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":37529,"upload_time":"2024-06-26T22:57:15","upload_time_iso_8601":"2024-06-26T22:57:15.646328Z","url":"https://files.pythonhosted.org/packages/47/c7/3ab9d7d971b664a9bdff6e6464afb6c1de8eb0f845d8de93eb036d5dcc60/agentops-0.2.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"31c48f2af30ae75dbdb4697506f80f76ce786f79014deb8c6679fa62962fdd6f","md5":"42def99798edfaf201fa6f62846e77c5","sha256":"6bad7aca37af6174307769550a53ec00824049a57e97b8868a9a213b2272adb4"},"downloads":-1,"filename":"agentops-0.2.5.tar.gz","has_sig":false,"md5_digest":"42def99798edfaf201fa6f62846e77c5","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":37703,"upload_time":"2024-06-26T22:57:17","upload_time_iso_8601":"2024-06-26T22:57:17.337904Z","url":"https://files.pythonhosted.org/packages/31/c4/8f2af30ae75dbdb4697506f80f76ce786f79014deb8c6679fa62962fdd6f/agentops-0.2.5.tar.gz","yanked":false,"yanked_reason":null}],"0.2.6":[{"comment_text":"","digests":{"blake2b_256":"5af2f90538b00d887c04a5570e8a3af4aef27a600a67c058a0ee6befafd60748","md5":"8ef3ed13ed582346b71648ca9df30f7c","sha256":"59e88000a9f108931fd68056f22def7a7f4b3015906de5791e777c23ba7dee52"},"downloads":-1,"filename":"agentops-0.2.6-py3-none-any.whl","has_sig":false,"md5_digest":"8ef3ed13ed582346b71648ca9df30f7c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":37534,"upload_time":"2024-06-28T21:41:56","upload_time_iso_8601":"2024-06-28T21:41:56.933334Z","url":"https://files.pythonhosted.org/packages/5a/f2/f90538b00d887c04a5570e8a3af4aef27a600a67c058a0ee6befafd60748/agentops-0.2.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"bcf412c388dccc301ad54a501843ba5b5dd359575dcef9ac24c18a619a32214d","md5":"89a6b04f12801682b53ee0133593ce74","sha256":"7906a08c9154355484deb173b82631f9acddec3775b2d5e8ca946abdee27183b"},"downloads":-1,"filename":"agentops-0.2.6.tar.gz","has_sig":false,"md5_digest":"89a6b04f12801682b53ee0133593ce74","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":37874,"upload_time":"2024-06-28T21:41:59","upload_time_iso_8601":"2024-06-28T21:41:59.143953Z","url":"https://files.pythonhosted.org/packages/bc/f4/12c388dccc301ad54a501843ba5b5dd359575dcef9ac24c18a619a32214d/agentops-0.2.6.tar.gz","yanked":false,"yanked_reason":null}],"0.3.0":[{"comment_text":"","digests":{"blake2b_256":"b8e996f12ac457f46c370c6f70f344e975d534f2c92853703ee29802f0127024","md5":"d9c6995a843b49ac7eb6f500fa1f3c2a","sha256":"22aeb3355e66b32a2b2a9f676048b81979b2488feddb088f9266034b3ed50539"},"downloads":-1,"filename":"agentops-0.3.0-py3-none-any.whl","has_sig":false,"md5_digest":"d9c6995a843b49ac7eb6f500fa1f3c2a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":39430,"upload_time":"2024-07-17T18:38:24","upload_time_iso_8601":"2024-07-17T18:38:24.763919Z","url":"https://files.pythonhosted.org/packages/b8/e9/96f12ac457f46c370c6f70f344e975d534f2c92853703ee29802f0127024/agentops-0.3.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"7e2d6fda9613562c0394d7ef3dd8f0cb9fc4ebaa8d413862fce33940c73564d6","md5":"8fa67ca01ca726e3bfcd66898313f33f","sha256":"6c0c08a57410fa5e826a7bafa1deeba9f7b3524709427d9e1abbd0964caaf76b"},"downloads":-1,"filename":"agentops-0.3.0.tar.gz","has_sig":false,"md5_digest":"8fa67ca01ca726e3bfcd66898313f33f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":41734,"upload_time":"2024-07-17T18:38:26","upload_time_iso_8601":"2024-07-17T18:38:26.447237Z","url":"https://files.pythonhosted.org/packages/7e/2d/6fda9613562c0394d7ef3dd8f0cb9fc4ebaa8d413862fce33940c73564d6/agentops-0.3.0.tar.gz","yanked":false,"yanked_reason":null}],"0.3.10":[{"comment_text":"","digests":{"blake2b_256":"eb5e3ac36b33d3e95747d64effd509f66a9b3b76b47216b16f492e27d8d90b0c","md5":"6fade0b81fc65b2c79a869b5f240590b","sha256":"b304d366691281e08c1f02307aabdd551ae4f68b0de82bbbb4cf6f651af2dd16"},"downloads":-1,"filename":"agentops-0.3.10-py3-none-any.whl","has_sig":false,"md5_digest":"6fade0b81fc65b2c79a869b5f240590b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":41201,"upload_time":"2024-08-19T20:51:49","upload_time_iso_8601":"2024-08-19T20:51:49.487947Z","url":"https://files.pythonhosted.org/packages/eb/5e/3ac36b33d3e95747d64effd509f66a9b3b76b47216b16f492e27d8d90b0c/agentops-0.3.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"8367ca0cb01df6b529f0127d23ec661e92c95ff68faf544439d86ec2331f3a52","md5":"639da9c2a3381cb3f62812bfe48a5e57","sha256":"40f895019f29bc5a6c023110cbec32870e5edb3e3926f8100974db8d3e299e2a"},"downloads":-1,"filename":"agentops-0.3.10.tar.gz","has_sig":false,"md5_digest":"639da9c2a3381cb3f62812bfe48a5e57","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":45332,"upload_time":"2024-08-19T20:51:50","upload_time_iso_8601":"2024-08-19T20:51:50.714217Z","url":"https://files.pythonhosted.org/packages/83/67/ca0cb01df6b529f0127d23ec661e92c95ff68faf544439d86ec2331f3a52/agentops-0.3.10.tar.gz","yanked":false,"yanked_reason":null}],"0.3.11":[{"comment_text":"","digests":{"blake2b_256":"0b078e6a74f084463def9d79d2c84d79475adc0229bbfb2e57401b0616ba6d6a","md5":"e760d867d9431d1bc13798024237ab99","sha256":"75fe10b8fc86c7f5c2633139ac1c06959611f22434fc1aaa8688c3c223fde8b5"},"downloads":-1,"filename":"agentops-0.3.11-py3-none-any.whl","has_sig":false,"md5_digest":"e760d867d9431d1bc13798024237ab99","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":50252,"upload_time":"2024-09-17T21:57:23","upload_time_iso_8601":"2024-09-17T21:57:23.085964Z","url":"https://files.pythonhosted.org/packages/0b/07/8e6a74f084463def9d79d2c84d79475adc0229bbfb2e57401b0616ba6d6a/agentops-0.3.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"3746057c552ea7ded5c954bdcbaf8a7dca07b6109633e040bf33de5f97a1289b","md5":"3b661fb76d343ec3bdef5b70fc9e5cc3","sha256":"38a2ffeeac1d722cb72c32d70e1c840424902b57934c647ef10de15478fe8f27"},"downloads":-1,"filename":"agentops-0.3.11.tar.gz","has_sig":false,"md5_digest":"3b661fb76d343ec3bdef5b70fc9e5cc3","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48018,"upload_time":"2024-09-17T21:57:24","upload_time_iso_8601":"2024-09-17T21:57:24.699442Z","url":"https://files.pythonhosted.org/packages/37/46/057c552ea7ded5c954bdcbaf8a7dca07b6109633e040bf33de5f97a1289b/agentops-0.3.11.tar.gz","yanked":false,"yanked_reason":null}],"0.3.12":[{"comment_text":"","digests":{"blake2b_256":"ac0a9004d7a8c2865ed804ddd6968095ef100ac554bc51ada7a2f3c0b4e9142b","md5":"be18cdad4333c6013d9584b84b4c7875","sha256":"4767def30de5dd97397728efcb50398a4f6d6823c1b534846f0a9b0cb85a6d45"},"downloads":-1,"filename":"agentops-0.3.12-py3-none-any.whl","has_sig":false,"md5_digest":"be18cdad4333c6013d9584b84b4c7875","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":50794,"upload_time":"2024-09-23T19:30:49","upload_time_iso_8601":"2024-09-23T19:30:49.050650Z","url":"https://files.pythonhosted.org/packages/ac/0a/9004d7a8c2865ed804ddd6968095ef100ac554bc51ada7a2f3c0b4e9142b/agentops-0.3.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"2c6d4f640d9fadd22f8cd7cb9857eed1f56d422f11b130ba226b947454eb0f0b","md5":"91aa981d4199ac73b4d7407547667e2f","sha256":"11ce3048656b5d146d02a4890dd50c8d2801ca5ad5caccab17d573cd8eea6e83"},"downloads":-1,"filename":"agentops-0.3.12.tar.gz","has_sig":false,"md5_digest":"91aa981d4199ac73b4d7407547667e2f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48525,"upload_time":"2024-09-23T19:30:50","upload_time_iso_8601":"2024-09-23T19:30:50.568151Z","url":"https://files.pythonhosted.org/packages/2c/6d/4f640d9fadd22f8cd7cb9857eed1f56d422f11b130ba226b947454eb0f0b/agentops-0.3.12.tar.gz","yanked":false,"yanked_reason":null}],"0.3.13":[{"comment_text":"","digests":{"blake2b_256":"68efa3b8adc0de2e7daa1e6e2734af9a0e37c90e3346b8a804e3fdc322c82b6c","md5":"948e9278dfc02e1a6ba2ec563296779a","sha256":"81bfdfedd990fbc3064ee42a67422ddbee07b6cd96c5fca7e124eb8c1e0cebdc"},"downloads":-1,"filename":"agentops-0.3.13-py3-none-any.whl","has_sig":false,"md5_digest":"948e9278dfc02e1a6ba2ec563296779a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":50813,"upload_time":"2024-10-02T18:32:59","upload_time_iso_8601":"2024-10-02T18:32:59.208892Z","url":"https://files.pythonhosted.org/packages/68/ef/a3b8adc0de2e7daa1e6e2734af9a0e37c90e3346b8a804e3fdc322c82b6c/agentops-0.3.13-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"3511fb06b4cee96285a5f745809d0f4efddef70d2a82112a633ed53834d6fc64","md5":"27a923eaceb4ae35abe2cf1aed1b8241","sha256":"319b7325fb79004ce996191aa21f0982489be22cc1acc2f3f6d02cdff1db2429"},"downloads":-1,"filename":"agentops-0.3.13.tar.gz","has_sig":false,"md5_digest":"27a923eaceb4ae35abe2cf1aed1b8241","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48559,"upload_time":"2024-10-02T18:33:00","upload_time_iso_8601":"2024-10-02T18:33:00.614409Z","url":"https://files.pythonhosted.org/packages/35/11/fb06b4cee96285a5f745809d0f4efddef70d2a82112a633ed53834d6fc64/agentops-0.3.13.tar.gz","yanked":false,"yanked_reason":null}],"0.3.14":[{"comment_text":"","digests":{"blake2b_256":"1c2775ab5bf99341a6a02775e3858f54a18cbcda0f35b5c6c0f114a829d62b8e","md5":"ad2d676d293c4baa1f9afecc61654e50","sha256":"f4a2fcf1a7caf1d5383bfb66d8a9d567f3cb88fc7495cfd81ade167b0c06a4ea"},"downloads":-1,"filename":"agentops-0.3.14-py3-none-any.whl","has_sig":false,"md5_digest":"ad2d676d293c4baa1f9afecc61654e50","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":50825,"upload_time":"2024-10-14T23:53:48","upload_time_iso_8601":"2024-10-14T23:53:48.464714Z","url":"https://files.pythonhosted.org/packages/1c/27/75ab5bf99341a6a02775e3858f54a18cbcda0f35b5c6c0f114a829d62b8e/agentops-0.3.14-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"46cb183fdaf40ae97ac1806ba91f6f23d55dc0a1a5cdf0881a5c834c8ca7175a","md5":"b90053253770c8e1c385b18e7172d58f","sha256":"fcb515e5743d73efee851b687692bed74797dc88e29a8327b2bbfb21d73a7447"},"downloads":-1,"filename":"agentops-0.3.14.tar.gz","has_sig":false,"md5_digest":"b90053253770c8e1c385b18e7172d58f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48548,"upload_time":"2024-10-14T23:53:50","upload_time_iso_8601":"2024-10-14T23:53:50.306080Z","url":"https://files.pythonhosted.org/packages/46/cb/183fdaf40ae97ac1806ba91f6f23d55dc0a1a5cdf0881a5c834c8ca7175a/agentops-0.3.14.tar.gz","yanked":false,"yanked_reason":null}],"0.3.15":[{"comment_text":"","digests":{"blake2b_256":"eadebed95f173bd304abe219b2b0a6f4e1f8e38b6733b19f2444a30fe2e731e1","md5":"7a46ccd127ffcd52eff26edaf5721bd9","sha256":"d5617108bbd9871a4250415f4e536ba33c2a6a2d2bec9342046303fb9e839f9d"},"downloads":-1,"filename":"agentops-0.3.15-py3-none-any.whl","has_sig":false,"md5_digest":"7a46ccd127ffcd52eff26edaf5721bd9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":55349,"upload_time":"2024-11-09T01:18:40","upload_time_iso_8601":"2024-11-09T01:18:40.622134Z","url":"https://files.pythonhosted.org/packages/ea/de/bed95f173bd304abe219b2b0a6f4e1f8e38b6733b19f2444a30fe2e731e1/agentops-0.3.15-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"33a40ef511dc3f23bba2d345b464223b1e7acc3c2a29230a93abb8fbcb6faebf","md5":"7af7abcf01e8d3ef64ac287e9300528f","sha256":"4358f85929d55929002cae589323d36b68fc4d12d0ea5010a80bfc4c7addc0ec"},"downloads":-1,"filename":"agentops-0.3.15.tar.gz","has_sig":false,"md5_digest":"7af7abcf01e8d3ef64ac287e9300528f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":51296,"upload_time":"2024-11-09T01:18:42","upload_time_iso_8601":"2024-11-09T01:18:42.358185Z","url":"https://files.pythonhosted.org/packages/33/a4/0ef511dc3f23bba2d345b464223b1e7acc3c2a29230a93abb8fbcb6faebf/agentops-0.3.15.tar.gz","yanked":false,"yanked_reason":null}],"0.3.15rc1":[{"comment_text":"","digests":{"blake2b_256":"0978ac2f89ccb7b3a31742f5b70434953faff168da6cab67c0836f432919c762","md5":"7f805adf76594ac4bc169b1a111817f4","sha256":"86069387a265bc6c5fa00ffbb3f8a131254a51ee3a9b8b35af4aca823dee76f1"},"downloads":-1,"filename":"agentops-0.3.15rc1-py3-none-any.whl","has_sig":false,"md5_digest":"7f805adf76594ac4bc169b1a111817f4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":50798,"upload_time":"2024-10-31T04:36:11","upload_time_iso_8601":"2024-10-31T04:36:11.059082Z","url":"https://files.pythonhosted.org/packages/09/78/ac2f89ccb7b3a31742f5b70434953faff168da6cab67c0836f432919c762/agentops-0.3.15rc1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"4317d6950ad32c33317509ea05a64d01ab661515165ffbd4e120148826b69ffb","md5":"5f131294c10c9b60b33ec93edc106f4f","sha256":"897ab94ae4fca8f1711216f9317dbf6f14e5d018c866086ef0b8831dc125e4ad"},"downloads":-1,"filename":"agentops-0.3.15rc1.tar.gz","has_sig":false,"md5_digest":"5f131294c10c9b60b33ec93edc106f4f","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48739,"upload_time":"2024-10-31T04:36:12","upload_time_iso_8601":"2024-10-31T04:36:12.630857Z","url":"https://files.pythonhosted.org/packages/43/17/d6950ad32c33317509ea05a64d01ab661515165ffbd4e120148826b69ffb/agentops-0.3.15rc1.tar.gz","yanked":false,"yanked_reason":null}],"0.3.16":[{"comment_text":"","digests":{"blake2b_256":"b876e1c933480ec9ad093a841321e5c9f7f16a0af59f339ba2c840851b1af01d","md5":"d57593bb32704fae1163656f03355a71","sha256":"7763e65efe053fa81cea2a2e16f015c7603365280972e0c0709eec32c3c8569e"},"downloads":-1,"filename":"agentops-0.3.16-py3-none-any.whl","has_sig":false,"md5_digest":"d57593bb32704fae1163656f03355a71","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":55351,"upload_time":"2024-11-09T18:44:21","upload_time_iso_8601":"2024-11-09T18:44:21.626158Z","url":"https://files.pythonhosted.org/packages/b8/76/e1c933480ec9ad093a841321e5c9f7f16a0af59f339ba2c840851b1af01d/agentops-0.3.16-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"aa748e77e654b37a5e0c977eca4f7e92740c1e24be39c827815e7bd8da429003","md5":"23078e1dc78ef459a667feeb904345c1","sha256":"564163eb048939d64e848c7e6caf25d6c0aee31200623ef97efe492f090f8939"},"downloads":-1,"filename":"agentops-0.3.16.tar.gz","has_sig":false,"md5_digest":"23078e1dc78ef459a667feeb904345c1","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":51308,"upload_time":"2024-11-09T18:44:23","upload_time_iso_8601":"2024-11-09T18:44:23.037514Z","url":"https://files.pythonhosted.org/packages/aa/74/8e77e654b37a5e0c977eca4f7e92740c1e24be39c827815e7bd8da429003/agentops-0.3.16.tar.gz","yanked":false,"yanked_reason":null}],"0.3.17":[{"comment_text":"","digests":{"blake2b_256":"6c3038a659671eec20fcae759bd69655ec45b08c4e875627b33e3b05bd46f299","md5":"93bbe3bd4ee492e7e73780c07897b017","sha256":"0d24dd082270a76c98ad0391101d5b5c3d01e389c5032389ecd551285e4b0662"},"downloads":-1,"filename":"agentops-0.3.17-py3-none-any.whl","has_sig":false,"md5_digest":"93bbe3bd4ee492e7e73780c07897b017","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":55503,"upload_time":"2024-11-10T02:39:28","upload_time_iso_8601":"2024-11-10T02:39:28.884052Z","url":"https://files.pythonhosted.org/packages/6c/30/38a659671eec20fcae759bd69655ec45b08c4e875627b33e3b05bd46f299/agentops-0.3.17-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"2131d9a3747df04b7915ee1cffaa4a5636f8ed0e1385e5236b0da085ccce936a","md5":"49e8cf186203cadaa39301c4ce5fda42","sha256":"a893cc7c37eda720ab59e8facaa2774cc23d125648aa00539ae485ff592e8b77"},"downloads":-1,"filename":"agentops-0.3.17.tar.gz","has_sig":false,"md5_digest":"49e8cf186203cadaa39301c4ce5fda42","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":51469,"upload_time":"2024-11-10T02:39:30","upload_time_iso_8601":"2024-11-10T02:39:30.636907Z","url":"https://files.pythonhosted.org/packages/21/31/d9a3747df04b7915ee1cffaa4a5636f8ed0e1385e5236b0da085ccce936a/agentops-0.3.17.tar.gz","yanked":false,"yanked_reason":null}],"0.3.18":[{"comment_text":"","digests":{"blake2b_256":"978dbd4cad95dad722dc2d3e4179feab1058ef846828c0e15e51e8bfaea373ee","md5":"d9afc3636cb969c286738ce02ed12196","sha256":"8b48d8a1662f276653430fd541c77fa4f9a15a43e881b518ff88ea56925afcf7"},"downloads":-1,"filename":"agentops-0.3.18-py3-none-any.whl","has_sig":false,"md5_digest":"d9afc3636cb969c286738ce02ed12196","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":58032,"upload_time":"2024-11-19T19:06:19","upload_time_iso_8601":"2024-11-19T19:06:19.068511Z","url":"https://files.pythonhosted.org/packages/97/8d/bd4cad95dad722dc2d3e4179feab1058ef846828c0e15e51e8bfaea373ee/agentops-0.3.18-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"c55246bb2f29b9e5f2e1d8b124296b7794934a9048de635d9e7d6a95e791ad7b","md5":"02a4fc081499360aac58485a94a6ca33","sha256":"4d509754df7be52579597cc9f53939c5218131a0379463e0ff6f6f40cde9fcc4"},"downloads":-1,"filename":"agentops-0.3.18.tar.gz","has_sig":false,"md5_digest":"02a4fc081499360aac58485a94a6ca33","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":55394,"upload_time":"2024-11-19T19:06:21","upload_time_iso_8601":"2024-11-19T19:06:21.306448Z","url":"https://files.pythonhosted.org/packages/c5/52/46bb2f29b9e5f2e1d8b124296b7794934a9048de635d9e7d6a95e791ad7b/agentops-0.3.18.tar.gz","yanked":false,"yanked_reason":null}],"0.3.19":[{"comment_text":"","digests":{"blake2b_256":"fc1e48616d2db40717d560a561e13521009655d447388f944f12f2b3811e6d7d","md5":"a9e23f1d31821585017e97633b058233","sha256":"1888a47dd3d9b92c5f246cdeeab333def5acbd26833d3148c63e8793457405b3"},"downloads":-1,"filename":"agentops-0.3.19-py3-none-any.whl","has_sig":false,"md5_digest":"a9e23f1d31821585017e97633b058233","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":38648,"upload_time":"2024-12-04T00:54:00","upload_time_iso_8601":"2024-12-04T00:54:00.173948Z","url":"https://files.pythonhosted.org/packages/fc/1e/48616d2db40717d560a561e13521009655d447388f944f12f2b3811e6d7d/agentops-0.3.19-py3-none-any.whl","yanked":true,"yanked_reason":"Broken + dependency, please install 0.3.18"},{"comment_text":"","digests":{"blake2b_256":"b319bb0e9895cb6da29f764f8d7b95b10ac8fde400bc17028f9bd486e9574dbe","md5":"f6424c41464d438007e9628748a0bea6","sha256":"ca0d4ba35ae699169ae20f74f72ca6a5780a8768ba2a2c32589fc5292ed81674"},"downloads":-1,"filename":"agentops-0.3.19.tar.gz","has_sig":false,"md5_digest":"f6424c41464d438007e9628748a0bea6","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48360,"upload_time":"2024-12-04T00:54:01","upload_time_iso_8601":"2024-12-04T00:54:01.418776Z","url":"https://files.pythonhosted.org/packages/b3/19/bb0e9895cb6da29f764f8d7b95b10ac8fde400bc17028f9bd486e9574dbe/agentops-0.3.19.tar.gz","yanked":true,"yanked_reason":"Broken + dependency, please install 0.3.18"}],"0.3.2":[{"comment_text":"","digests":{"blake2b_256":"9d2c23b745a61d48df788b8020e5ea37e94f9da59b322a17accafe18d8cb4006","md5":"62d576d9518a627fe4232709c0721eff","sha256":"b35988e04378624204572bb3d7a454094f879ea573f05b57d4e75ab0bfbb82af"},"downloads":-1,"filename":"agentops-0.3.2-py3-none-any.whl","has_sig":false,"md5_digest":"62d576d9518a627fe4232709c0721eff","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":39527,"upload_time":"2024-07-21T03:09:56","upload_time_iso_8601":"2024-07-21T03:09:56.844372Z","url":"https://files.pythonhosted.org/packages/9d/2c/23b745a61d48df788b8020e5ea37e94f9da59b322a17accafe18d8cb4006/agentops-0.3.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"d2a1cc21406646c065e83435fe30fa205b99b2204d8074eca31926a5f8ef4381","md5":"30b247bcae25b181485a89213518241c","sha256":"55559ac4a43634831dfa8937c2597c28e332809dc7c6bb3bc3c8b233442e224c"},"downloads":-1,"filename":"agentops-0.3.2.tar.gz","has_sig":false,"md5_digest":"30b247bcae25b181485a89213518241c","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":41894,"upload_time":"2024-07-21T03:09:58","upload_time_iso_8601":"2024-07-21T03:09:58.409826Z","url":"https://files.pythonhosted.org/packages/d2/a1/cc21406646c065e83435fe30fa205b99b2204d8074eca31926a5f8ef4381/agentops-0.3.2.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20":[{"comment_text":"","digests":{"blake2b_256":"a854ae9147a490dd9bd03ab7bfc5af47f40ff675840a9aa143896b385a8f8d3a","md5":"a13af8737ddff8a0c7c0f05cee70085f","sha256":"b5396e11b0bfef46b85604e8e36ab17668057711edd56f1edb0a067b8676fdcc"},"downloads":-1,"filename":"agentops-0.3.20-py3-none-any.whl","has_sig":false,"md5_digest":"a13af8737ddff8a0c7c0f05cee70085f","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":38674,"upload_time":"2024-12-07T00:06:31","upload_time_iso_8601":"2024-12-07T00:06:31.901162Z","url":"https://files.pythonhosted.org/packages/a8/54/ae9147a490dd9bd03ab7bfc5af47f40ff675840a9aa143896b385a8f8d3a/agentops-0.3.20-py3-none-any.whl","yanked":true,"yanked_reason":"Wrong + release"},{"comment_text":"","digests":{"blake2b_256":"c1eb19d04c801854ba75e235eb87c51a6a9c5b1a89e8579cb745c83f8bf84e08","md5":"11754497191d8340eda7a831720d9b74","sha256":"c71406294804a82795310a4afc492064a8884b1ba47e12607230975bc1291ce3"},"downloads":-1,"filename":"agentops-0.3.20.tar.gz","has_sig":false,"md5_digest":"11754497191d8340eda7a831720d9b74","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48332,"upload_time":"2024-12-07T00:06:33","upload_time_iso_8601":"2024-12-07T00:06:33.568362Z","url":"https://files.pythonhosted.org/packages/c1/eb/19d04c801854ba75e235eb87c51a6a9c5b1a89e8579cb745c83f8bf84e08/agentops-0.3.20.tar.gz","yanked":true,"yanked_reason":"Wrong + release"}],"0.3.20rc1":[{"comment_text":"","digests":{"blake2b_256":"073de7eba58e2a60c0136eee2760b20f99607001d372de26505feee891e0976b","md5":"73c6ac515ee9d555e27a7ba7e26e3a46","sha256":"079ea8138938e27a3e1319a235a6f4cf98c0d6846731d854aa83b8422d570bda"},"downloads":-1,"filename":"agentops-0.3.20rc1-py3-none-any.whl","has_sig":false,"md5_digest":"73c6ac515ee9d555e27a7ba7e26e3a46","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":38718,"upload_time":"2024-12-07T00:10:18","upload_time_iso_8601":"2024-12-07T00:10:18.796963Z","url":"https://files.pythonhosted.org/packages/07/3d/e7eba58e2a60c0136eee2760b20f99607001d372de26505feee891e0976b/agentops-0.3.20rc1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"02ff111d618c21aad946caedb666030f1f374a0d558228b9061ea2b46acb6bcd","md5":"17062e985b931dc85b4855922d7842ce","sha256":"ef48447e07a3eded246b2f7e10bba74422a34563ffdc667ac16b2d3383475a3f"},"downloads":-1,"filename":"agentops-0.3.20rc1.tar.gz","has_sig":false,"md5_digest":"17062e985b931dc85b4855922d7842ce","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48329,"upload_time":"2024-12-07T00:10:20","upload_time_iso_8601":"2024-12-07T00:10:20.510407Z","url":"https://files.pythonhosted.org/packages/02/ff/111d618c21aad946caedb666030f1f374a0d558228b9061ea2b46acb6bcd/agentops-0.3.20rc1.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc10":[{"comment_text":"","digests":{"blake2b_256":"a7274706d8d9c8f4abecc1dda2b9b02cd02ffe895220bd39f58322a46ccc7254","md5":"2c66a93c691c6b8cac2f2dc8fab9efae","sha256":"3c10d77f2fe88b61d97ad007820c1ba968c62f692986ea2b2cbfd8b22ec9e5bc"},"downloads":-1,"filename":"agentops-0.3.20rc10-py3-none-any.whl","has_sig":false,"md5_digest":"2c66a93c691c6b8cac2f2dc8fab9efae","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":57423,"upload_time":"2024-12-10T03:41:04","upload_time_iso_8601":"2024-12-10T03:41:04.579814Z","url":"https://files.pythonhosted.org/packages/a7/27/4706d8d9c8f4abecc1dda2b9b02cd02ffe895220bd39f58322a46ccc7254/agentops-0.3.20rc10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"efe9e304f465945f57e4c6d35cd35fff53dc2a2e36b9b32793fa57017467b0c2","md5":"9882d32866b94d925ba36ac376c30bea","sha256":"f0c72c20e7fe41054c22c6257420314863549dd91428a892ac9b47b81cdfcc8c"},"downloads":-1,"filename":"agentops-0.3.20rc10.tar.gz","has_sig":false,"md5_digest":"9882d32866b94d925ba36ac376c30bea","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":57564,"upload_time":"2024-12-10T03:41:06","upload_time_iso_8601":"2024-12-10T03:41:06.899043Z","url":"https://files.pythonhosted.org/packages/ef/e9/e304f465945f57e4c6d35cd35fff53dc2a2e36b9b32793fa57017467b0c2/agentops-0.3.20rc10.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc11":[{"comment_text":"","digests":{"blake2b_256":"8dbf598ec2532b713a228f4041c9b2c10358cd43e6aecf6128d0988a0b5f103e","md5":"d9ab67a850aefcb5bf9467b48f74675d","sha256":"3e5d4c19de6c58ae684693f47a2f03db35eaf4cd6d8aafc1e804a134462c2b55"},"downloads":-1,"filename":"agentops-0.3.20rc11-py3-none-any.whl","has_sig":false,"md5_digest":"d9ab67a850aefcb5bf9467b48f74675d","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":60280,"upload_time":"2024-12-10T22:45:05","upload_time_iso_8601":"2024-12-10T22:45:05.280119Z","url":"https://files.pythonhosted.org/packages/8d/bf/598ec2532b713a228f4041c9b2c10358cd43e6aecf6128d0988a0b5f103e/agentops-0.3.20rc11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"210642e51fff6a4537fb811a15bc22d00343145285c6246dc069433d61436e1b","md5":"ca5279f4cb6ad82e06ef542a2d08d06e","sha256":"9211489c6a01bc9cda4061826f8b80d0989cfcd7fbabe1dd2ed5a5cb76b3d6f0"},"downloads":-1,"filename":"agentops-0.3.20rc11.tar.gz","has_sig":false,"md5_digest":"ca5279f4cb6ad82e06ef542a2d08d06e","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":59718,"upload_time":"2024-12-10T22:45:09","upload_time_iso_8601":"2024-12-10T22:45:09.616947Z","url":"https://files.pythonhosted.org/packages/21/06/42e51fff6a4537fb811a15bc22d00343145285c6246dc069433d61436e1b/agentops-0.3.20rc11.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc12":[{"comment_text":"","digests":{"blake2b_256":"dc281db6f49f10ac849683de1d7f5b5ef492be2a996325302167b8388f375d51","md5":"8b2611d2510f0d4fac7ab824d7658ff7","sha256":"9237652d28db89315c49c0705829b291c17280e07d41272f909e2609acec650b"},"downloads":-1,"filename":"agentops-0.3.20rc12-py3-none-any.whl","has_sig":false,"md5_digest":"8b2611d2510f0d4fac7ab824d7658ff7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":60282,"upload_time":"2024-12-10T23:10:54","upload_time_iso_8601":"2024-12-10T23:10:54.516317Z","url":"https://files.pythonhosted.org/packages/dc/28/1db6f49f10ac849683de1d7f5b5ef492be2a996325302167b8388f375d51/agentops-0.3.20rc12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"10c073cb9a55592f55bb44c9206f50f41d7b7a8a8d6fd67d42f40c8f9f184b0e","md5":"02b3a68f3491564af2e29f0f216eea1e","sha256":"d4d3a73ac34b2a00edb6e6b5b220cbb031bb76ff58d85e2096b536be24aee4fe"},"downloads":-1,"filename":"agentops-0.3.20rc12.tar.gz","has_sig":false,"md5_digest":"02b3a68f3491564af2e29f0f216eea1e","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":59731,"upload_time":"2024-12-10T23:10:56","upload_time_iso_8601":"2024-12-10T23:10:56.822803Z","url":"https://files.pythonhosted.org/packages/10/c0/73cb9a55592f55bb44c9206f50f41d7b7a8a8d6fd67d42f40c8f9f184b0e/agentops-0.3.20rc12.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc13":[{"comment_text":"","digests":{"blake2b_256":"4ed48a97563074235f266281167c70ab90833c195e2b704087e414509ae3ec32","md5":"c86fe22044483f94bc044a3bf7b054b7","sha256":"2fbb3b55701d9aea64f622e7e29aa417772e897e2414f74ed3954d99009d224f"},"downloads":-1,"filename":"agentops-0.3.20rc13-py3-none-any.whl","has_sig":false,"md5_digest":"c86fe22044483f94bc044a3bf7b054b7","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":64724,"upload_time":"2024-12-10T23:27:50","upload_time_iso_8601":"2024-12-10T23:27:50.895316Z","url":"https://files.pythonhosted.org/packages/4e/d4/8a97563074235f266281167c70ab90833c195e2b704087e414509ae3ec32/agentops-0.3.20rc13-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"767e59c6f34e9a067d9152021de7e3146e5c0f69f36434dcb3026ff03f382489","md5":"152a70647d5ff28fe851e4cc406d8fb4","sha256":"b7a6d1d7f603bbb2605cc747762ae866bdee53941c4c76087c9f0f0a5efad03b"},"downloads":-1,"filename":"agentops-0.3.20rc13.tar.gz","has_sig":false,"md5_digest":"152a70647d5ff28fe851e4cc406d8fb4","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":63242,"upload_time":"2024-12-10T23:27:53","upload_time_iso_8601":"2024-12-10T23:27:53.657606Z","url":"https://files.pythonhosted.org/packages/76/7e/59c6f34e9a067d9152021de7e3146e5c0f69f36434dcb3026ff03f382489/agentops-0.3.20rc13.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc2":[{"comment_text":"","digests":{"blake2b_256":"cebbbca58531e21f4c1c92cbe6ba15d0f308ff8f3b27083cd0ce6358c7d1d117","md5":"5a9fcd99e0b6e3b24e721b22c3ee5907","sha256":"ada95d42e82abef16c1e83443dc42d02bb470ee48b1fa8f2d58a20703511a7be"},"downloads":-1,"filename":"agentops-0.3.20rc2-py3-none-any.whl","has_sig":false,"md5_digest":"5a9fcd99e0b6e3b24e721b22c3ee5907","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":38716,"upload_time":"2024-12-07T00:20:01","upload_time_iso_8601":"2024-12-07T00:20:01.561074Z","url":"https://files.pythonhosted.org/packages/ce/bb/bca58531e21f4c1c92cbe6ba15d0f308ff8f3b27083cd0ce6358c7d1d117/agentops-0.3.20rc2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"124aec14492566949b7383ae321cb40c1edc18940712b277c08d32392566f7a8","md5":"ff8db0075584474e35784b080fb9b6b1","sha256":"60462b82390e78fd21312c5db45f0f48dfcc9c9ab354e6bf232db557ccf57c13"},"downloads":-1,"filename":"agentops-0.3.20rc2.tar.gz","has_sig":false,"md5_digest":"ff8db0075584474e35784b080fb9b6b1","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48341,"upload_time":"2024-12-07T00:20:02","upload_time_iso_8601":"2024-12-07T00:20:02.519240Z","url":"https://files.pythonhosted.org/packages/12/4a/ec14492566949b7383ae321cb40c1edc18940712b277c08d32392566f7a8/agentops-0.3.20rc2.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc4":[{"comment_text":"","digests":{"blake2b_256":"a1551125b2b3823fcb3f3afa3c6b9621541799ac329622ee21038babbfbedf39","md5":"a82f1b73347d3a2fe33f31cec01ca376","sha256":"72253950b46a11b5b1163b13bbb9d5b769e6cdb7b102acf46efac8cf02f7eaac"},"downloads":-1,"filename":"agentops-0.3.20rc4-py3-none-any.whl","has_sig":false,"md5_digest":"a82f1b73347d3a2fe33f31cec01ca376","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":38719,"upload_time":"2024-12-07T00:53:45","upload_time_iso_8601":"2024-12-07T00:53:45.212239Z","url":"https://files.pythonhosted.org/packages/a1/55/1125b2b3823fcb3f3afa3c6b9621541799ac329622ee21038babbfbedf39/agentops-0.3.20rc4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"a180420ef26926052b12d1c2010360b4037f6765321055ce7e09c6bfaeac3480","md5":"1a314ff81d87a774e5e1cf338151a353","sha256":"4218fcfa42644dd86ee50ac7806d08783e4629db30b127bc8011c9c3523eeb5c"},"downloads":-1,"filename":"agentops-0.3.20rc4.tar.gz","has_sig":false,"md5_digest":"1a314ff81d87a774e5e1cf338151a353","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":48332,"upload_time":"2024-12-07T00:53:47","upload_time_iso_8601":"2024-12-07T00:53:47.581677Z","url":"https://files.pythonhosted.org/packages/a1/80/420ef26926052b12d1c2010360b4037f6765321055ce7e09c6bfaeac3480/agentops-0.3.20rc4.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc5":[{"comment_text":"","digests":{"blake2b_256":"7747e61c5387124f53a3095261427888ab88e192828e3bb8be92660bf4e008d0","md5":"fd7343ddf99f077d1a159b87d84ed79c","sha256":"97df38116ec7fe337fc04b800e423aa8b5e69681565c02dc4af3e9c60764827e"},"downloads":-1,"filename":"agentops-0.3.20rc5-py3-none-any.whl","has_sig":false,"md5_digest":"fd7343ddf99f077d1a159b87d84ed79c","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":44545,"upload_time":"2024-12-07T01:38:17","upload_time_iso_8601":"2024-12-07T01:38:17.177125Z","url":"https://files.pythonhosted.org/packages/77/47/e61c5387124f53a3095261427888ab88e192828e3bb8be92660bf4e008d0/agentops-0.3.20rc5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"145fa0bf5ee5b56dacf63b9712ac62169c585c6222efe043cc77f3148f709965","md5":"20a32d514b5d51851dbcbdfb2c189491","sha256":"48111083dab1fc30f0545e0812c4aab00fc9e9d48de42de95d254699396992a8"},"downloads":-1,"filename":"agentops-0.3.20rc5.tar.gz","has_sig":false,"md5_digest":"20a32d514b5d51851dbcbdfb2c189491","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":53243,"upload_time":"2024-12-07T01:38:18","upload_time_iso_8601":"2024-12-07T01:38:18.772880Z","url":"https://files.pythonhosted.org/packages/14/5f/a0bf5ee5b56dacf63b9712ac62169c585c6222efe043cc77f3148f709965/agentops-0.3.20rc5.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc6":[{"comment_text":"","digests":{"blake2b_256":"85f3a5ae3d8d47aa5160a5c805551d75077cad61bff9626abe44079d29d1c299","md5":"30f87c628c530e82e27b8bc2d2a46d8a","sha256":"d03f16832b3a5670d9c3273b95c9d9def772c203b2cd4ac52ae0e7f6d3b1b9e4"},"downloads":-1,"filename":"agentops-0.3.20rc6-py3-none-any.whl","has_sig":false,"md5_digest":"30f87c628c530e82e27b8bc2d2a46d8a","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":61844,"upload_time":"2024-12-07T01:49:11","upload_time_iso_8601":"2024-12-07T01:49:11.801219Z","url":"https://files.pythonhosted.org/packages/85/f3/a5ae3d8d47aa5160a5c805551d75077cad61bff9626abe44079d29d1c299/agentops-0.3.20rc6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"060e24f42ed1de3d892355f3ba90f0b7f659855fafd18851e59aa7174fa30615","md5":"384c60ee11b827b8bad31cef20a35a17","sha256":"45aa4797269214d41858537d95050964f330651da5c7412b2895e714a81f30f5"},"downloads":-1,"filename":"agentops-0.3.20rc6.tar.gz","has_sig":false,"md5_digest":"384c60ee11b827b8bad31cef20a35a17","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":61004,"upload_time":"2024-12-07T01:49:13","upload_time_iso_8601":"2024-12-07T01:49:13.917920Z","url":"https://files.pythonhosted.org/packages/06/0e/24f42ed1de3d892355f3ba90f0b7f659855fafd18851e59aa7174fa30615/agentops-0.3.20rc6.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc7":[{"comment_text":"","digests":{"blake2b_256":"d502edf7ba8aff1a994176da4c95688c9ba0428ac3bd9a0db2392fe5009162a9","md5":"9b43c5e2df12abac01ffc5262e991825","sha256":"95972115c5c753ceee477834de902afaf0664107048e44eee2c65e74e05656a2"},"downloads":-1,"filename":"agentops-0.3.20rc7-py3-none-any.whl","has_sig":false,"md5_digest":"9b43c5e2df12abac01ffc5262e991825","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":40117,"upload_time":"2024-12-07T02:12:48","upload_time_iso_8601":"2024-12-07T02:12:48.512036Z","url":"https://files.pythonhosted.org/packages/d5/02/edf7ba8aff1a994176da4c95688c9ba0428ac3bd9a0db2392fe5009162a9/agentops-0.3.20rc7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"5d7029d8d02fcf6db627c6b20ceab974c455e23a25fc0e991c0a8d0eaebda523","md5":"9de760856bed3f7adbd1d0ab7ba0a63a","sha256":"7c793b7b199a61ca61366ddb8fd94986fac262ef6514918c3baaa08184b86669"},"downloads":-1,"filename":"agentops-0.3.20rc7.tar.gz","has_sig":false,"md5_digest":"9de760856bed3f7adbd1d0ab7ba0a63a","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":49661,"upload_time":"2024-12-07T02:12:50","upload_time_iso_8601":"2024-12-07T02:12:50.120388Z","url":"https://files.pythonhosted.org/packages/5d/70/29d8d02fcf6db627c6b20ceab974c455e23a25fc0e991c0a8d0eaebda523/agentops-0.3.20rc7.tar.gz","yanked":false,"yanked_reason":null}],"0.3.20rc8":[{"comment_text":"","digests":{"blake2b_256":"6d0f66418c0b20f40fe11de50f29481abdb266ff641ac6166eab9eac3d7364d2","md5":"52a2cea48e48d1818169c07507a6c7a9","sha256":"8cf2e9fe6400a4fb4367a039cacc5d76339a8fd2749a44243389547e928e545c"},"downloads":-1,"filename":"agentops-0.3.20rc8-py3-none-any.whl","has_sig":false,"md5_digest":"52a2cea48e48d1818169c07507a6c7a9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":57414,"upload_time":"2024-12-07T02:17:51","upload_time_iso_8601":"2024-12-07T02:17:51.404804Z","url":"https://files.pythonhosted.org/packages/6d/0f/66418c0b20f40fe11de50f29481abdb266ff641ac6166eab9eac3d7364d2/agentops-0.3.20rc8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"4d18250b066f23ccbb22f2bba8df101361abd5724ddcef59a4d63d4539c7cd82","md5":"f7887176e88d4434e38e237850363b80","sha256":"a06e7939dd4d59c9880ded1b129fd4548b34be5530a46cf043326740bdfeca56"},"downloads":-1,"filename":"agentops-0.3.20rc8.tar.gz","has_sig":false,"md5_digest":"f7887176e88d4434e38e237850363b80","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":57521,"upload_time":"2024-12-07T02:17:53","upload_time_iso_8601":"2024-12-07T02:17:53.055737Z","url":"https://files.pythonhosted.org/packages/4d/18/250b066f23ccbb22f2bba8df101361abd5724ddcef59a4d63d4539c7cd82/agentops-0.3.20rc8.tar.gz","yanked":false,"yanked_reason":null}],"0.3.21":[{"comment_text":"","digests":{"blake2b_256":"c4cb3b6cc5a08d11d9e56501f980222da0fa41814b7d6948a7f6354f31739af6","md5":"c7592f9e7993dbe307fbffd7e4da1e51","sha256":"4f98beecdce4c7cbee80ec26658a9657ba307a1fb2910b589f85325d3259b75b"},"downloads":-1,"filename":"agentops-0.3.21-py3-none-any.whl","has_sig":false,"md5_digest":"c7592f9e7993dbe307fbffd7e4da1e51","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":64701,"upload_time":"2024-12-11T12:24:00","upload_time_iso_8601":"2024-12-11T12:24:00.934724Z","url":"https://files.pythonhosted.org/packages/c4/cb/3b6cc5a08d11d9e56501f980222da0fa41814b7d6948a7f6354f31739af6/agentops-0.3.21-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"83f6bfd27fa4b948c353eaff579dafdf4eb54833f5c526e00c6f2faee4b467a8","md5":"83d7666511cccf3b0d4354cebd99b110","sha256":"d8e8d1f6d154554dba64ec5b139905bf76c68f21575af9fa2ca1697277fe36f2"},"downloads":-1,"filename":"agentops-0.3.21.tar.gz","has_sig":false,"md5_digest":"83d7666511cccf3b0d4354cebd99b110","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":63185,"upload_time":"2024-12-11T12:24:02","upload_time_iso_8601":"2024-12-11T12:24:02.068404Z","url":"https://files.pythonhosted.org/packages/83/f6/bfd27fa4b948c353eaff579dafdf4eb54833f5c526e00c6f2faee4b467a8/agentops-0.3.21.tar.gz","yanked":false,"yanked_reason":null}],"0.3.22":[{"comment_text":"","digests":{"blake2b_256":"11e721b42168ecfd0a9fff9dea51201646b6e62c4f52c8cd9c2a6400125d7234","md5":"26061ab467e358b63251f9547275bbbd","sha256":"992f4f31d80e8b0b2098abf58ae2707c60538e4b66e5aec8cf49fb269d5a2adc"},"downloads":-1,"filename":"agentops-0.3.22-py3-none-any.whl","has_sig":false,"md5_digest":"26061ab467e358b63251f9547275bbbd","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":39539,"upload_time":"2025-01-11T03:21:39","upload_time_iso_8601":"2025-01-11T03:21:39.093169Z","url":"https://files.pythonhosted.org/packages/11/e7/21b42168ecfd0a9fff9dea51201646b6e62c4f52c8cd9c2a6400125d7234/agentops-0.3.22-py3-none-any.whl","yanked":true,"yanked_reason":"Broken + dependency"},{"comment_text":"","digests":{"blake2b_256":"e067e61aa4c2e329da10b5e95d325091e599d8a00a28843a54bdcefa7a2eef8d","md5":"bcf45b6c4c56884ed2409f835571af62","sha256":"705d772b6994f8bab0cd163b24602009353f7906c72d9db008af11683f6e9341"},"downloads":-1,"filename":"agentops-0.3.22.tar.gz","has_sig":false,"md5_digest":"bcf45b6c4c56884ed2409f835571af62","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":52845,"upload_time":"2025-01-11T03:21:41","upload_time_iso_8601":"2025-01-11T03:21:41.762282Z","url":"https://files.pythonhosted.org/packages/e0/67/e61aa4c2e329da10b5e95d325091e599d8a00a28843a54bdcefa7a2eef8d/agentops-0.3.22.tar.gz","yanked":true,"yanked_reason":"Broken + dependency"}],"0.3.23":[{"comment_text":null,"digests":{"blake2b_256":"e67de1434765cf0a3d62372b74f47919aa17c0b01909823f7d3ee705edf821a9","md5":"1f0f02509b8ba713db72e57a072f01a6","sha256":"ecfff77d8f9006361ef2a2e8593271e97eb54b7b504abfb8abd6504006baca56"},"downloads":-1,"filename":"agentops-0.3.23-py3-none-any.whl","has_sig":false,"md5_digest":"1f0f02509b8ba713db72e57a072f01a6","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":70098,"upload_time":"2025-01-12T02:11:56","upload_time_iso_8601":"2025-01-12T02:11:56.319763Z","url":"https://files.pythonhosted.org/packages/e6/7d/e1434765cf0a3d62372b74f47919aa17c0b01909823f7d3ee705edf821a9/agentops-0.3.23-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"5c7fa4fd91f8fd819e1ecfdc608d1c7ade83de0f9dddd868e2c2c139a2fdae25","md5":"b7922399f81fb26517eb69fc7fef97c9","sha256":"4e4de49caeaf567b8746082f84a8cdd65afe2c698720f6f40251bbc4fdffe4c9"},"downloads":-1,"filename":"agentops-0.3.23.tar.gz","has_sig":false,"md5_digest":"b7922399f81fb26517eb69fc7fef97c9","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":64225,"upload_time":"2025-01-12T02:11:59","upload_time_iso_8601":"2025-01-12T02:11:59.360077Z","url":"https://files.pythonhosted.org/packages/5c/7f/a4fd91f8fd819e1ecfdc608d1c7ade83de0f9dddd868e2c2c139a2fdae25/agentops-0.3.23.tar.gz","yanked":false,"yanked_reason":null}],"0.3.24":[{"comment_text":null,"digests":{"blake2b_256":"254ea7d131802bac2ece5302ebf78dcef1ba1ba2f8b3a51fbe44c7f52bae6a53","md5":"39c39d8a7f1285add0fec21830a89a4a","sha256":"c5dfc8098b0dd49ddd819aa55280d07f8bfbf2f8fa088fc51ff5849b65062b10"},"downloads":-1,"filename":"agentops-0.3.24-py3-none-any.whl","has_sig":false,"md5_digest":"39c39d8a7f1285add0fec21830a89a4a","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":71957,"upload_time":"2025-01-18T19:08:02","upload_time_iso_8601":"2025-01-18T19:08:02.053316Z","url":"https://files.pythonhosted.org/packages/25/4e/a7d131802bac2ece5302ebf78dcef1ba1ba2f8b3a51fbe44c7f52bae6a53/agentops-0.3.24-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"71fee96e22c4bf762f34cd5ba435880470dad4576ab357ee61742fe053752322","md5":"3e1b7e0a31197936e099a7509128f794","sha256":"c97a3af959b728bcfbfb1ac2494cef82d8804defc9dac858648b39a9ecdcd2e4"},"downloads":-1,"filename":"agentops-0.3.24.tar.gz","has_sig":false,"md5_digest":"3e1b7e0a31197936e099a7509128f794","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":233974,"upload_time":"2025-01-18T19:08:04","upload_time_iso_8601":"2025-01-18T19:08:04.121618Z","url":"https://files.pythonhosted.org/packages/71/fe/e96e22c4bf762f34cd5ba435880470dad4576ab357ee61742fe053752322/agentops-0.3.24.tar.gz","yanked":false,"yanked_reason":null}],"0.3.25":[{"comment_text":null,"digests":{"blake2b_256":"e6e39cff4ed65c5deac34f427ed60cd7af3604ec7ed8a999c351f6411e190d3b","md5":"328dedc417be02fc28f8a4c7ed7b52e9","sha256":"4faebf73a62aa0bcac8578428277ca5b9af5e828f49f2cb03a9695b8426e6b9d"},"downloads":-1,"filename":"agentops-0.3.25-py3-none-any.whl","has_sig":false,"md5_digest":"328dedc417be02fc28f8a4c7ed7b52e9","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":71971,"upload_time":"2025-01-22T10:43:16","upload_time_iso_8601":"2025-01-22T10:43:16.070593Z","url":"https://files.pythonhosted.org/packages/e6/e3/9cff4ed65c5deac34f427ed60cd7af3604ec7ed8a999c351f6411e190d3b/agentops-0.3.25-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"2fdfeb00eaabebb51feae0724a5928f25df4d71d1c8392204f4f849351fd748c","md5":"a40bc7037baf6dbba92d63331f561a28","sha256":"868d855b6531d1fa2d1047db2cb03ddb1121062fd51c44b564dc626f15cc1e40"},"downloads":-1,"filename":"agentops-0.3.25.tar.gz","has_sig":false,"md5_digest":"a40bc7037baf6dbba92d63331f561a28","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":234024,"upload_time":"2025-01-22T10:43:17","upload_time_iso_8601":"2025-01-22T10:43:17.986230Z","url":"https://files.pythonhosted.org/packages/2f/df/eb00eaabebb51feae0724a5928f25df4d71d1c8392204f4f849351fd748c/agentops-0.3.25.tar.gz","yanked":false,"yanked_reason":null}],"0.3.26":[{"comment_text":null,"digests":{"blake2b_256":"f521671c458951850bd3a445aa09eafd2793aae1104fa68351a5c3976cdf762b","md5":"c3f8fa92ff5a94a37516e774c7f58b9a","sha256":"20948f52e3ffb4ba1d52301c3a82e59490182c4dad22774ad831dce0181eb5c2"},"downloads":-1,"filename":"agentops-0.3.26-py3-none-any.whl","has_sig":false,"md5_digest":"c3f8fa92ff5a94a37516e774c7f58b9a","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":72090,"upload_time":"2025-01-24T23:44:06","upload_time_iso_8601":"2025-01-24T23:44:06.828461Z","url":"https://files.pythonhosted.org/packages/f5/21/671c458951850bd3a445aa09eafd2793aae1104fa68351a5c3976cdf762b/agentops-0.3.26-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"76a1b03c6348a77798e750bde4eec03b4af620d71b9e4b64ff7dcf0860025a2d","md5":"ba4d0f2411ec72828677b38a395465cc","sha256":"bc824bf8727332f59bf803cf84440d13e9e398406222ab29f45909ac1e39f815"},"downloads":-1,"filename":"agentops-0.3.26.tar.gz","has_sig":false,"md5_digest":"ba4d0f2411ec72828677b38a395465cc","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":234235,"upload_time":"2025-01-24T23:44:08","upload_time_iso_8601":"2025-01-24T23:44:08.541961Z","url":"https://files.pythonhosted.org/packages/76/a1/b03c6348a77798e750bde4eec03b4af620d71b9e4b64ff7dcf0860025a2d/agentops-0.3.26.tar.gz","yanked":false,"yanked_reason":null}],"0.3.4":[{"comment_text":"","digests":{"blake2b_256":"52f32bd714234ec345153c0fcbc9e4896c306c347f3fb66a3aa6d6fc109a7243","md5":"c7a975a86900f7dbe6861a21fdd3c2d8","sha256":"126f7aed4ba43c1399b5488d67a03d10cb4c531e619c650776f826ca00c1aa24"},"downloads":-1,"filename":"agentops-0.3.4-py3-none-any.whl","has_sig":false,"md5_digest":"c7a975a86900f7dbe6861a21fdd3c2d8","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":39915,"upload_time":"2024-07-24T23:15:03","upload_time_iso_8601":"2024-07-24T23:15:03.892439Z","url":"https://files.pythonhosted.org/packages/52/f3/2bd714234ec345153c0fcbc9e4896c306c347f3fb66a3aa6d6fc109a7243/agentops-0.3.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"d28b88a2c9c2df655de806adbb5deebb12c64d19d6aa3cfa759da642953525e0","md5":"f48a2ab7fcaf9cf11a25805ac5300e26","sha256":"a92c9cb7c511197f0ecb8cb5aca15d35022c15a3d2fd2aaaa34cd7e5dc59393f"},"downloads":-1,"filename":"agentops-0.3.4.tar.gz","has_sig":false,"md5_digest":"f48a2ab7fcaf9cf11a25805ac5300e26","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":42063,"upload_time":"2024-07-24T23:15:05","upload_time_iso_8601":"2024-07-24T23:15:05.586475Z","url":"https://files.pythonhosted.org/packages/d2/8b/88a2c9c2df655de806adbb5deebb12c64d19d6aa3cfa759da642953525e0/agentops-0.3.4.tar.gz","yanked":false,"yanked_reason":null}],"0.3.5":[{"comment_text":"","digests":{"blake2b_256":"f253f9672c6aa3c79b6a5b64321e93d2316f126add867ceb2e3e95ea8b4bf1b0","md5":"bd45dc8100fd3974dff11014d12424ff","sha256":"687cb938ecf9d1bf7650afc910e2b2e1b8b6d9e969215aeb49e57f1555a2a756"},"downloads":-1,"filename":"agentops-0.3.5-py3-none-any.whl","has_sig":false,"md5_digest":"bd45dc8100fd3974dff11014d12424ff","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":39177,"upload_time":"2024-08-01T19:32:19","upload_time_iso_8601":"2024-08-01T19:32:19.765946Z","url":"https://files.pythonhosted.org/packages/f2/53/f9672c6aa3c79b6a5b64321e93d2316f126add867ceb2e3e95ea8b4bf1b0/agentops-0.3.5-py3-none-any.whl","yanked":true,"yanked_reason":"Introduces + FileNotFoundError impacting OpenAI and LiteLLM integrations"},{"comment_text":"","digests":{"blake2b_256":"235508ce5915f1ceb86ea6f7a6e8c8dc025b34981408a1b638316b5140fad525","md5":"53ef2f5230de09260f4ead09633dde62","sha256":"ae98540355ce9b892a630e61a7224a9175657cad1b7e799269238748ca7bc0ea"},"downloads":-1,"filename":"agentops-0.3.5.tar.gz","has_sig":false,"md5_digest":"53ef2f5230de09260f4ead09633dde62","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":42699,"upload_time":"2024-08-01T19:32:21","upload_time_iso_8601":"2024-08-01T19:32:21.259555Z","url":"https://files.pythonhosted.org/packages/23/55/08ce5915f1ceb86ea6f7a6e8c8dc025b34981408a1b638316b5140fad525/agentops-0.3.5.tar.gz","yanked":true,"yanked_reason":"Introduces + FileNotFoundError impacting OpenAI and LiteLLM integrations"}],"0.3.6":[{"comment_text":"","digests":{"blake2b_256":"be89412afc864df3715d377cff9fe15deadaccdc0902b0a242f742f286e6d84b","md5":"149922f5cd986a8641b6e88c991af0cc","sha256":"413f812eb015fb31175a507784afe08123adfa9e227870e315899b059f42b443"},"downloads":-1,"filename":"agentops-0.3.6-py3-none-any.whl","has_sig":false,"md5_digest":"149922f5cd986a8641b6e88c991af0cc","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":39431,"upload_time":"2024-08-02T06:48:19","upload_time_iso_8601":"2024-08-02T06:48:19.594149Z","url":"https://files.pythonhosted.org/packages/be/89/412afc864df3715d377cff9fe15deadaccdc0902b0a242f742f286e6d84b/agentops-0.3.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"c3bf85f1439c3951ef69c81dbd7ef6df8a11df957e8d1180d835d71c11fa5131","md5":"b68d3124e365867f891bec4fb211a398","sha256":"0941f2486f3a561712ba6f77d560b49e2df55be141f243da0f9dc97ed43e6968"},"downloads":-1,"filename":"agentops-0.3.6.tar.gz","has_sig":false,"md5_digest":"b68d3124e365867f891bec4fb211a398","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":42933,"upload_time":"2024-08-02T06:48:21","upload_time_iso_8601":"2024-08-02T06:48:21.508300Z","url":"https://files.pythonhosted.org/packages/c3/bf/85f1439c3951ef69c81dbd7ef6df8a11df957e8d1180d835d71c11fa5131/agentops-0.3.6.tar.gz","yanked":false,"yanked_reason":null}],"0.3.7":[{"comment_text":"","digests":{"blake2b_256":"a34d05ba61e4fbd976dabe736d74fb2bb14d064ca758f05f084c0dadb6ac5cb1","md5":"551df1e89278270e0f5522d41f5c28ae","sha256":"7eeec5bef41e9ba397b3d880bcec8cd0818209ab31665c85e8b97615011a23d9"},"downloads":-1,"filename":"agentops-0.3.7-py3-none-any.whl","has_sig":false,"md5_digest":"551df1e89278270e0f5522d41f5c28ae","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":39816,"upload_time":"2024-08-08T23:21:45","upload_time_iso_8601":"2024-08-08T23:21:45.035395Z","url":"https://files.pythonhosted.org/packages/a3/4d/05ba61e4fbd976dabe736d74fb2bb14d064ca758f05f084c0dadb6ac5cb1/agentops-0.3.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"9f31034c3e062287f4fe9f57f2448e9508617a26bbb8a16b11c77cda9b28e1c0","md5":"1c48a797903a25988bae9b72559307ec","sha256":"048ee3caa5edf01b98c994e4e3ff90c09d83f820a43a70f07db96032c3386750"},"downloads":-1,"filename":"agentops-0.3.7.tar.gz","has_sig":false,"md5_digest":"1c48a797903a25988bae9b72559307ec","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":43495,"upload_time":"2024-08-08T23:21:46","upload_time_iso_8601":"2024-08-08T23:21:46.798531Z","url":"https://files.pythonhosted.org/packages/9f/31/034c3e062287f4fe9f57f2448e9508617a26bbb8a16b11c77cda9b28e1c0/agentops-0.3.7.tar.gz","yanked":false,"yanked_reason":null}],"0.3.9":[{"comment_text":"","digests":{"blake2b_256":"660ce931f892e0cedd40d861c3deff4134e1af1d226d6dc9762b32514d6dbc9f","md5":"82792de7bccabed058a24d3bd47443db","sha256":"582c9ddb30a9bb951b4d3ee2fd0428ba77d4a4367950b9cc6043f45b10bf12d8"},"downloads":-1,"filename":"agentops-0.3.9-py3-none-any.whl","has_sig":false,"md5_digest":"82792de7bccabed058a24d3bd47443db","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":40235,"upload_time":"2024-08-15T21:21:33","upload_time_iso_8601":"2024-08-15T21:21:33.468748Z","url":"https://files.pythonhosted.org/packages/66/0c/e931f892e0cedd40d861c3deff4134e1af1d226d6dc9762b32514d6dbc9f/agentops-0.3.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"blake2b_256":"e17b68cef3aaf44d423046b7779e9325e4feef5257e6d784a55c9dadf84bd61a","md5":"470f3b2663b71eb2f1597903bf8922e7","sha256":"7c999edbc64196924acdb06da09ec664a09d9fec8e73ba4e0f89e5f3dafc79e5"},"downloads":-1,"filename":"agentops-0.3.9.tar.gz","has_sig":false,"md5_digest":"470f3b2663b71eb2f1597903bf8922e7","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":43796,"upload_time":"2024-08-15T21:21:34","upload_time_iso_8601":"2024-08-15T21:21:34.591272Z","url":"https://files.pythonhosted.org/packages/e1/7b/68cef3aaf44d423046b7779e9325e4feef5257e6d784a55c9dadf84bd61a/agentops-0.3.9.tar.gz","yanked":false,"yanked_reason":null}],"0.4.0":[{"comment_text":null,"digests":{"blake2b_256":"060e66184fab1fc3bdd955ac20ea7bdef78f5b9aecc4080ea3e054c2a2436991","md5":"250de44e3599992c75625cef67682ecd","sha256":"b4821b8ec69c05a4d13b34eaad4762bb06a4f14e1241d57c16fdd28de5c8c929"},"downloads":-1,"filename":"agentops-0.4.0-py3-none-any.whl","has_sig":false,"md5_digest":"250de44e3599992c75625cef67682ecd","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":171419,"upload_time":"2025-03-13T11:24:15","upload_time_iso_8601":"2025-03-13T11:24:15.042606Z","url":"https://files.pythonhosted.org/packages/06/0e/66184fab1fc3bdd955ac20ea7bdef78f5b9aecc4080ea3e054c2a2436991/agentops-0.4.0-py3-none-any.whl","yanked":true,"yanked_reason":"broken + dependencies"},{"comment_text":null,"digests":{"blake2b_256":"ff7f8a57d060489c780db3e15c4d9ff8c670e5db583549c74dd2d32ae6ec10c0","md5":"ea0932849a7311750c6ac0e567c90182","sha256":"45f5367cecd8a0b648055b6ec76e8a6a2801425e80dede8f86b39e9c6cfe1d98"},"downloads":-1,"filename":"agentops-0.4.0.tar.gz","has_sig":false,"md5_digest":"ea0932849a7311750c6ac0e567c90182","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":248757,"upload_time":"2025-03-13T11:24:16","upload_time_iso_8601":"2025-03-13T11:24:16.866033Z","url":"https://files.pythonhosted.org/packages/ff/7f/8a57d060489c780db3e15c4d9ff8c670e5db583549c74dd2d32ae6ec10c0/agentops-0.4.0.tar.gz","yanked":true,"yanked_reason":"broken + dependencies"}],"0.4.1":[{"comment_text":null,"digests":{"blake2b_256":"736e7ab03c56260ec59bfaeeb08efb76f55ec6153861ad2a9cf20b38b222e4e7","md5":"3fcebe0141ca19b2fbcb53e918003ce9","sha256":"69c944e22628bc0f52c534007d2453da2a1988a7fd1f993720c4a15b0f70465a"},"downloads":-1,"filename":"agentops-0.4.1-py3-none-any.whl","has_sig":false,"md5_digest":"3fcebe0141ca19b2fbcb53e918003ce9","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":171402,"upload_time":"2025-03-13T16:29:26","upload_time_iso_8601":"2025-03-13T16:29:26.477091Z","url":"https://files.pythonhosted.org/packages/73/6e/7ab03c56260ec59bfaeeb08efb76f55ec6153861ad2a9cf20b38b222e4e7/agentops-0.4.1-py3-none-any.whl","yanked":true,"yanked_reason":"Broken + dependencies"},{"comment_text":null,"digests":{"blake2b_256":"ca303217cd3480ad099ffa92848ccbc8672e5232c22918c95a4b99e49c0ef31e","md5":"ec421fa88b575b827fc0d3fd02f45515","sha256":"fec044f0346dca6aba17e458e669ac1f52f1b618a4a15b43342615096c5e7d56"},"downloads":-1,"filename":"agentops-0.4.1.tar.gz","has_sig":false,"md5_digest":"ec421fa88b575b827fc0d3fd02f45515","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":248747,"upload_time":"2025-03-13T16:29:27","upload_time_iso_8601":"2025-03-13T16:29:27.905694Z","url":"https://files.pythonhosted.org/packages/ca/30/3217cd3480ad099ffa92848ccbc8672e5232c22918c95a4b99e49c0ef31e/agentops-0.4.1.tar.gz","yanked":true,"yanked_reason":"Broken + dependencies"}],"0.4.10":[{"comment_text":null,"digests":{"blake2b_256":"301e0fe4fb617a5a69a8692b571d726f03e713a37d94d6a43c595a08fc33cff3","md5":"5ac7ec12e80bae6946dc10e46ef768f7","sha256":"917ad7ad51af0ca00cace2a3ae1d1d36e0d65dc813e030fcd377ff98535002bd"},"downloads":-1,"filename":"agentops-0.4.10-py3-none-any.whl","has_sig":false,"md5_digest":"5ac7ec12e80bae6946dc10e46ef768f7","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":198777,"upload_time":"2025-05-08T20:37:29","upload_time_iso_8601":"2025-05-08T20:37:29.322288Z","url":"https://files.pythonhosted.org/packages/30/1e/0fe4fb617a5a69a8692b571d726f03e713a37d94d6a43c595a08fc33cff3/agentops-0.4.10-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"a0ef0a56be3981bd464ad5a22fa3a859421f4b5560cbbb082f3ef9aca9cdb1a7","md5":"1954d07bfa38ba5c5ce0e516b7dbfdc9","sha256":"b66a48b4ec50c9cb34abc6ff1df873f0dcddbbb528d8a8c0527cb97b24c91b36"},"downloads":-1,"filename":"agentops-0.4.10.tar.gz","has_sig":false,"md5_digest":"1954d07bfa38ba5c5ce0e516b7dbfdc9","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":284727,"upload_time":"2025-05-08T20:37:30","upload_time_iso_8601":"2025-05-08T20:37:30.744217Z","url":"https://files.pythonhosted.org/packages/a0/ef/0a56be3981bd464ad5a22fa3a859421f4b5560cbbb082f3ef9aca9cdb1a7/agentops-0.4.10.tar.gz","yanked":false,"yanked_reason":null}],"0.4.11":[{"comment_text":null,"digests":{"blake2b_256":"35cde66dea05d2d8070f886e8f4ce86905cf1cce2f89622e041f26e39f717c9e","md5":"20424d54ba76517d586d4bcc92dda3bf","sha256":"b08c84fd69f36fcd5d6f2b14d16ff88b977a9a417d92448c9709f3c7990d6438"},"downloads":-1,"filename":"agentops-0.4.11-py3-none-any.whl","has_sig":false,"md5_digest":"20424d54ba76517d586d4bcc92dda3bf","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":198789,"upload_time":"2025-05-12T20:38:29","upload_time_iso_8601":"2025-05-12T20:38:29.202046Z","url":"https://files.pythonhosted.org/packages/35/cd/e66dea05d2d8070f886e8f4ce86905cf1cce2f89622e041f26e39f717c9e/agentops-0.4.11-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"349df76fc1760cb21788967db3dd22ff2e6521c42b8ecee152e6ac4278e7cade","md5":"b7affd8b15834e4f9cb63066d7d160d1","sha256":"6eb80ee4a0653f9bdc9fc7641bf60cb7546cd34ff1c04dfbc4fca77dbb07edda"},"downloads":-1,"filename":"agentops-0.4.11.tar.gz","has_sig":false,"md5_digest":"b7affd8b15834e4f9cb63066d7d160d1","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":284735,"upload_time":"2025-05-12T20:38:30","upload_time_iso_8601":"2025-05-12T20:38:30.393540Z","url":"https://files.pythonhosted.org/packages/34/9d/f76fc1760cb21788967db3dd22ff2e6521c42b8ecee152e6ac4278e7cade/agentops-0.4.11.tar.gz","yanked":false,"yanked_reason":null}],"0.4.12":[{"comment_text":null,"digests":{"blake2b_256":"eb86772ed94e4e55433e8014933dab08aa6dfbcd8072f7fd74ffcad335ba0e73","md5":"831a3d54bccce09cc6c2a352776d02e6","sha256":"7c2685ae9c9de1a1071f6a29d395444191744d5ee58e33c020a69e2388dc2f7c"},"downloads":-1,"filename":"agentops-0.4.12-py3-none-any.whl","has_sig":false,"md5_digest":"831a3d54bccce09cc6c2a352776d02e6","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":198319,"upload_time":"2025-05-15T19:59:27","upload_time_iso_8601":"2025-05-15T19:59:27.609093Z","url":"https://files.pythonhosted.org/packages/eb/86/772ed94e4e55433e8014933dab08aa6dfbcd8072f7fd74ffcad335ba0e73/agentops-0.4.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"0cf664cea8e916a305d2dc2f3f3840a1d4cae40e1927892e1fcc11f83ec7ebee","md5":"7e97e0612a6e8544b37a2fa2e1633166","sha256":"530f15d428a4c78db918fa766366c8f11105c4d1d3b1a56de027747d805a573f"},"downloads":-1,"filename":"agentops-0.4.12.tar.gz","has_sig":false,"md5_digest":"7e97e0612a6e8544b37a2fa2e1633166","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":284309,"upload_time":"2025-05-15T19:59:28","upload_time_iso_8601":"2025-05-15T19:59:28.955745Z","url":"https://files.pythonhosted.org/packages/0c/f6/64cea8e916a305d2dc2f3f3840a1d4cae40e1927892e1fcc11f83ec7ebee/agentops-0.4.12.tar.gz","yanked":false,"yanked_reason":null}],"0.4.2":[{"comment_text":null,"digests":{"blake2b_256":"b13fcb38831e86502e3a30460a27e72a254df39cc2f223d1952e063e2d0b1f70","md5":"c958500ff1e2b600064e980d526f3ad8","sha256":"4c376e3a95d1c65a864e8a5ab6f4bdb62f76abf2271b3c9a1cda2a0ad33b2b1a"},"downloads":-1,"filename":"agentops-0.4.2-py3-none-any.whl","has_sig":false,"md5_digest":"c958500ff1e2b600064e980d526f3ad8","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":171420,"upload_time":"2025-03-13T16:56:31","upload_time_iso_8601":"2025-03-13T16:56:31.589623Z","url":"https://files.pythonhosted.org/packages/b1/3f/cb38831e86502e3a30460a27e72a254df39cc2f223d1952e063e2d0b1f70/agentops-0.4.2-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"4bd0f2c1951661617febfd14c3e98a58fbd805e48f453356e912dc8efc950490","md5":"7a125604d2bb3494714462442f0ac47c","sha256":"42cbc30a0eecee5db468d01dcbe398d57f080cbf8bb09aecc2ce40c5a21509a5"},"downloads":-1,"filename":"agentops-0.4.2.tar.gz","has_sig":false,"md5_digest":"7a125604d2bb3494714462442f0ac47c","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":248754,"upload_time":"2025-03-13T16:56:33","upload_time_iso_8601":"2025-03-13T16:56:33.062966Z","url":"https://files.pythonhosted.org/packages/4b/d0/f2c1951661617febfd14c3e98a58fbd805e48f453356e912dc8efc950490/agentops-0.4.2.tar.gz","yanked":false,"yanked_reason":null}],"0.4.3":[{"comment_text":null,"digests":{"blake2b_256":"398892f5a663cf616607e92a0499f5b636fe4e5ae8a6b7febc436077cd02ecd5","md5":"e739880fc1b0cf1e15a816277ca1e8d9","sha256":"c69cf884fc20cd3b44dd07bc9bca9ecec72e44fd2b12c50523670e3743fbbe6c"},"downloads":-1,"filename":"agentops-0.4.3-py3-none-any.whl","has_sig":false,"md5_digest":"e739880fc1b0cf1e15a816277ca1e8d9","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":111111,"upload_time":"2025-03-14T17:35:53","upload_time_iso_8601":"2025-03-14T17:35:53.978325Z","url":"https://files.pythonhosted.org/packages/39/88/92f5a663cf616607e92a0499f5b636fe4e5ae8a6b7febc436077cd02ecd5/agentops-0.4.3-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"c296f6f5268ffd68079185c6b21190a6ab5b35997678ce89af211d3c3683cc16","md5":"8df7f60a4346721caf9a4a74b0ba2e32","sha256":"48379801976e5e6c830ee40b247d7e7834fb79fb18d2cec926a8c06bdf767090"},"downloads":-1,"filename":"agentops-0.4.3.tar.gz","has_sig":false,"md5_digest":"8df7f60a4346721caf9a4a74b0ba2e32","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":209668,"upload_time":"2025-03-14T17:35:55","upload_time_iso_8601":"2025-03-14T17:35:55.387572Z","url":"https://files.pythonhosted.org/packages/c2/96/f6f5268ffd68079185c6b21190a6ab5b35997678ce89af211d3c3683cc16/agentops-0.4.3.tar.gz","yanked":false,"yanked_reason":null}],"0.4.4":[{"comment_text":null,"digests":{"blake2b_256":"e230799eb1a6b63e6f072611e4d6c5f7d70d969b1c2d14735100a5295eb794fd","md5":"76de08f25b0f1765ec9b3ce200f2273c","sha256":"a33f32e0d09e942b501a4066460b77bc1f6be960bdbd8dfed1cfc5950702f87c"},"downloads":-1,"filename":"agentops-0.4.4-py3-none-any.whl","has_sig":false,"md5_digest":"76de08f25b0f1765ec9b3ce200f2273c","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":115456,"upload_time":"2025-03-17T21:08:16","upload_time_iso_8601":"2025-03-17T21:08:16.149499Z","url":"https://files.pythonhosted.org/packages/e2/30/799eb1a6b63e6f072611e4d6c5f7d70d969b1c2d14735100a5295eb794fd/agentops-0.4.4-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"65e969c80c4c8fbf27826644c2bbcaf657bf9882a7974b115bff5021c683560d","md5":"2c34c20f9b785c60ea1cc6011b50684b","sha256":"509daf197bb27f8e5b1ac87e516487883178335c70328fd74897b1a5fadbf0bd"},"downloads":-1,"filename":"agentops-0.4.4.tar.gz","has_sig":false,"md5_digest":"2c34c20f9b785c60ea1cc6011b50684b","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":209971,"upload_time":"2025-03-17T21:08:17","upload_time_iso_8601":"2025-03-17T21:08:17.396763Z","url":"https://files.pythonhosted.org/packages/65/e9/69c80c4c8fbf27826644c2bbcaf657bf9882a7974b115bff5021c683560d/agentops-0.4.4.tar.gz","yanked":false,"yanked_reason":null}],"0.4.5":[{"comment_text":null,"digests":{"blake2b_256":"5cf1848e02d7233e3bfe74119e28a4fb7cf9dd3363eb215cf8bb8ca835317cc7","md5":"e70f8b49cbbbf5b6a56bbfc51938581c","sha256":"ec45a775dd5f494fe137620ce3e43aa06a6858495bed31c4b9019b343a34d092"},"downloads":-1,"filename":"agentops-0.4.5-py3-none-any.whl","has_sig":false,"md5_digest":"e70f8b49cbbbf5b6a56bbfc51938581c","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":148034,"upload_time":"2025-03-25T00:05:57","upload_time_iso_8601":"2025-03-25T00:05:57.075368Z","url":"https://files.pythonhosted.org/packages/5c/f1/848e02d7233e3bfe74119e28a4fb7cf9dd3363eb215cf8bb8ca835317cc7/agentops-0.4.5-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"cc2c243f2e01dae6cc2583bca8009c735bb08267c9f51f0e916154b91329e08f","md5":"16781e2f18e40444f869c38b3b27c70c","sha256":"d82d908072c8ffea1b90d63d651ccb73dec8597ef830e60b4311efb4f5593e8e"},"downloads":-1,"filename":"agentops-0.4.5.tar.gz","has_sig":false,"md5_digest":"16781e2f18e40444f869c38b3b27c70c","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":232839,"upload_time":"2025-03-25T00:05:58","upload_time_iso_8601":"2025-03-25T00:05:58.270348Z","url":"https://files.pythonhosted.org/packages/cc/2c/243f2e01dae6cc2583bca8009c735bb08267c9f51f0e916154b91329e08f/agentops-0.4.5.tar.gz","yanked":false,"yanked_reason":null}],"0.4.6":[{"comment_text":null,"digests":{"blake2b_256":"316124fa78f759c68e1484ed04ed6d0d60ad4b6b58d02570a65dc670975fd954","md5":"36d7d7e64cde9ed73d4ced26e9ee4fb0","sha256":"283929b8f7a1bc79693a6c982e012ccceac4645c6a35709603e7ff83332ec00d"},"downloads":-1,"filename":"agentops-0.4.6-py3-none-any.whl","has_sig":false,"md5_digest":"36d7d7e64cde9ed73d4ced26e9ee4fb0","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":160863,"upload_time":"2025-04-07T22:18:58","upload_time_iso_8601":"2025-04-07T22:18:58.881418Z","url":"https://files.pythonhosted.org/packages/31/61/24fa78f759c68e1484ed04ed6d0d60ad4b6b58d02570a65dc670975fd954/agentops-0.4.6-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"d0073869f9b99dbc45ac55bc0dbfd8cf6b22de850a716004135ec96a29c3d81e","md5":"1390e3bc3185a4e97492958c1c4e549c","sha256":"78179a0d2c02217445fb7315bb963496bb338c96bcc126bebfb45a5733fea23e"},"downloads":-1,"filename":"agentops-0.4.6.tar.gz","has_sig":false,"md5_digest":"1390e3bc3185a4e97492958c1c4e549c","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":254164,"upload_time":"2025-04-07T22:19:00","upload_time_iso_8601":"2025-04-07T22:19:00.589814Z","url":"https://files.pythonhosted.org/packages/d0/07/3869f9b99dbc45ac55bc0dbfd8cf6b22de850a716004135ec96a29c3d81e/agentops-0.4.6.tar.gz","yanked":false,"yanked_reason":null}],"0.4.7":[{"comment_text":null,"digests":{"blake2b_256":"a4be6d708281bd3a282879859231fb7d2ab1d0fec6ee421ec6b02d08a3726670","md5":"3bb2171ad2809a49c43935f1d249aa02","sha256":"b1c4acda70ef45a3c7deac01a695b922a14bb762826ba68fb2b8c3859f4e87da"},"downloads":-1,"filename":"agentops-0.4.7-py3-none-any.whl","has_sig":false,"md5_digest":"3bb2171ad2809a49c43935f1d249aa02","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":182708,"upload_time":"2025-04-24T00:39:39","upload_time_iso_8601":"2025-04-24T00:39:39.403616Z","url":"https://files.pythonhosted.org/packages/a4/be/6d708281bd3a282879859231fb7d2ab1d0fec6ee421ec6b02d08a3726670/agentops-0.4.7-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"20a5d142e98481d82912280e29b5b73dc5a5deea4d34c132045333b5201c1209","md5":"62c78776d059798f2e6a74bf1b03932f","sha256":"ad6dca62ff88d4c09eda34e3393c138880a5126682b53cf0c881a7dbb61dcc0d"},"downloads":-1,"filename":"agentops-0.4.7.tar.gz","has_sig":false,"md5_digest":"62c78776d059798f2e6a74bf1b03932f","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":272982,"upload_time":"2025-04-24T00:39:40","upload_time_iso_8601":"2025-04-24T00:39:40.931148Z","url":"https://files.pythonhosted.org/packages/20/a5/d142e98481d82912280e29b5b73dc5a5deea4d34c132045333b5201c1209/agentops-0.4.7.tar.gz","yanked":false,"yanked_reason":null}],"0.4.8":[{"comment_text":null,"digests":{"blake2b_256":"96d32cee2a94f2917be9c7575238dfff3088a51a6376168a2c7287da0e8b654c","md5":"a02a327b4620a909e831fbd6889bf25e","sha256":"86f439d47c0fdfcb3525859528300b19bb96c105875d0b5b3d205260aedc3f24"},"downloads":-1,"filename":"agentops-0.4.8-py3-none-any.whl","has_sig":false,"md5_digest":"a02a327b4620a909e831fbd6889bf25e","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":182678,"upload_time":"2025-04-27T09:10:39","upload_time_iso_8601":"2025-04-27T09:10:39.925403Z","url":"https://files.pythonhosted.org/packages/96/d3/2cee2a94f2917be9c7575238dfff3088a51a6376168a2c7287da0e8b654c/agentops-0.4.8-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"ba64732ebe57c77123058cbc03eec0795267fac65aa6032b8906b1dfe80ff837","md5":"f947ace32256ff3ee6b2a6c716ef3543","sha256":"c299ca067298f568ae2885e4d21951b0bdb7067692d930b57ff1f19bd447ae5a"},"downloads":-1,"filename":"agentops-0.4.8.tar.gz","has_sig":false,"md5_digest":"f947ace32256ff3ee6b2a6c716ef3543","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":272951,"upload_time":"2025-04-27T09:10:41","upload_time_iso_8601":"2025-04-27T09:10:41.806172Z","url":"https://files.pythonhosted.org/packages/ba/64/732ebe57c77123058cbc03eec0795267fac65aa6032b8906b1dfe80ff837/agentops-0.4.8.tar.gz","yanked":false,"yanked_reason":null}],"0.4.9":[{"comment_text":null,"digests":{"blake2b_256":"5814e40def8897f404273f69d6841793b3dbdcbb8f2948fb6bd9c50087239b37","md5":"f49c139fbf17affaa3e8165743971a50","sha256":"622b9ecdc1b5e91c5ac3aa92d2f756d083c4e0ba830d8e94c3785f7290587a97"},"downloads":-1,"filename":"agentops-0.4.9-py3-none-any.whl","has_sig":false,"md5_digest":"f49c139fbf17affaa3e8165743971a50","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":198463,"upload_time":"2025-05-02T23:51:48","upload_time_iso_8601":"2025-05-02T23:51:48.502905Z","url":"https://files.pythonhosted.org/packages/58/14/e40def8897f404273f69d6841793b3dbdcbb8f2948fb6bd9c50087239b37/agentops-0.4.9-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"32efa2af9802799b3d26c570b8dd18669e3577fb58fa093a3c9cfafbf179376c","md5":"5eb22fdc989748711f0252c3679388e9","sha256":"c69a0c912a75367850036c20368d4722462b5769eb86bdebabb0695f8be4c8bd"},"downloads":-1,"filename":"agentops-0.4.9.tar.gz","has_sig":false,"md5_digest":"5eb22fdc989748711f0252c3679388e9","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":284471,"upload_time":"2025-05-02T23:51:49","upload_time_iso_8601":"2025-05-02T23:51:49.781274Z","url":"https://files.pythonhosted.org/packages/32/ef/a2af9802799b3d26c570b8dd18669e3577fb58fa093a3c9cfafbf179376c/agentops-0.4.9.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":null,"digests":{"blake2b_256":"eb86772ed94e4e55433e8014933dab08aa6dfbcd8072f7fd74ffcad335ba0e73","md5":"831a3d54bccce09cc6c2a352776d02e6","sha256":"7c2685ae9c9de1a1071f6a29d395444191744d5ee58e33c020a69e2388dc2f7c"},"downloads":-1,"filename":"agentops-0.4.12-py3-none-any.whl","has_sig":false,"md5_digest":"831a3d54bccce09cc6c2a352776d02e6","packagetype":"bdist_wheel","python_version":"py3","requires_python":"<3.14,>=3.9","size":198319,"upload_time":"2025-05-15T19:59:27","upload_time_iso_8601":"2025-05-15T19:59:27.609093Z","url":"https://files.pythonhosted.org/packages/eb/86/772ed94e4e55433e8014933dab08aa6dfbcd8072f7fd74ffcad335ba0e73/agentops-0.4.12-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"digests":{"blake2b_256":"0cf664cea8e916a305d2dc2f3f3840a1d4cae40e1927892e1fcc11f83ec7ebee","md5":"7e97e0612a6e8544b37a2fa2e1633166","sha256":"530f15d428a4c78db918fa766366c8f11105c4d1d3b1a56de027747d805a573f"},"downloads":-1,"filename":"agentops-0.4.12.tar.gz","has_sig":false,"md5_digest":"7e97e0612a6e8544b37a2fa2e1633166","packagetype":"sdist","python_version":"source","requires_python":"<3.14,>=3.9","size":284309,"upload_time":"2025-05-15T19:59:28","upload_time_iso_8601":"2025-05-15T19:59:28.955745Z","url":"https://files.pythonhosted.org/packages/0c/f6/64cea8e916a305d2dc2f3f3840a1d4cae40e1927892e1fcc11f83ec7ebee/agentops-0.4.12.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]} + + ' + headers: + Accept-Ranges: + - bytes + Connection: + - keep-alive + Content-Length: + - '141284' + Date: + - Fri, 16 May 2025 22:11:18 GMT + Permissions-Policy: + - publickey-credentials-create=(self),publickey-credentials-get=(self),accelerometer=(),ambient-light-sensor=(),autoplay=(),battery=(),camera=(),display-capture=(),document-domain=(),encrypted-media=(),execution-while-not-rendered=(),execution-while-out-of-viewport=(),fullscreen=(),gamepad=(),geolocation=(),gyroscope=(),hid=(),identity-credentials-get=(),idle-detection=(),local-fonts=(),magnetometer=(),microphone=(),midi=(),otp-credentials=(),payment=(),picture-in-picture=(),screen-wake-lock=(),serial=(),speaker-selection=(),storage-access=(),usb=(),web-share=(),xr-spatial-tracking=() + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Vary: + - Accept-Encoding + X-Cache: + - MISS, HIT, HIT + X-Cache-Hits: + - 0, 14, 0 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - deny + X-Permitted-Cross-Domain-Policies: + - none + X-Served-By: + - cache-iad-kjyo7100048-IAD, cache-iad-kjyo7100044-IAD, cache-sjc10057-SJC + X-Timer: + - S1747433478.903585,VS0,VE171 + X-XSS-Protection: + - 1; mode=block + access-control-allow-headers: + - Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since + access-control-allow-methods: + - GET + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-PyPI-Last-Serial + access-control-max-age: + - '86400' + cache-control: + - max-age=900, public + content-security-policy: + - base-uri 'self'; connect-src 'self' https://api.github.com/repos/ https://api.github.com/search/issues + https://gitlab.com/api/ https://analytics.python.org fastly-insights.com *.fastly-insights.com + *.ethicalads.io https://api.pwnedpasswords.com https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/sre/mathmaps/ + https://2p66nmmycsj3.statuspage.io; default-src 'none'; font-src 'self' fonts.gstatic.com; + form-action 'self' https://checkout.stripe.com; frame-ancestors 'none'; frame-src + 'none'; img-src 'self' https://pypi-camo.freetls.fastly.net/ *.fastly-insights.com + *.ethicalads.io ethicalads.blob.core.windows.net; script-src 'self' https://analytics.python.org + *.fastly-insights.com *.ethicalads.io 'sha256-U3hKDidudIaxBDEzwGJApJgPEf2mWk6cfMWghrAa6i0=' + https://cdn.jsdelivr.net/npm/mathjax@3.2.2/ 'sha256-1CldwzdEg2k1wTmf7s5RWVd7NMXI/7nxxjJM2C4DqII=' + 'sha256-0POaN8stWYQxhzjKS+/eOfbbJ/u4YHO5ZagJvLpMypo='; style-src 'self' fonts.googleapis.com + *.ethicalads.io 'sha256-2YHqZokjiizkHi1Zt+6ar0XJ0OeEy/egBnlm+MDMtrM=' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' + 'sha256-JLEjeN9e5dGsz5475WyRaoA4eQOdNPxDIeUhclnJDCE=' 'sha256-mQyxHEuwZJqpxCw3SLmc4YOySNKXunyu2Oiz1r3/wAE=' + 'sha256-OCf+kv5Asiwp++8PIevKBYSgnNLNUZvxAp4a7wMLuKA=' 'sha256-h5LOiLhk6wiJrGsG5ItM0KimwzWQH/yAcmoJDJL//bY='; + worker-src *.fastly-insights.com + content-type: + - application/json + etag: + - '"f+xzB2HkOqSq5o8PEbR7zQ"' + referrer-policy: + - origin-when-cross-origin + x-pypi-last-serial: + - '29075100' + status: + code: 200 + message: OK - request: body: '{"messages": [{"role": "system", "content": "You are base_agent. You are a helpful assistant that just says hi\nYour personal goal is: Just say hi\nTo @@ -22,10 +132,12 @@ interactions: - '838' content-type: - application/json + cookie: + - _cfuvid=pgWR9g.y6i.3_EHHkfdBfvv5isYFU_joRq3kXvX2IE4-1740180069173-0.0.1.1-604800000 host: - api.openai.com user-agent: - - OpenAI/Python 1.61.0 + - OpenAI/Python 1.68.2 x-stainless-arch: - arm64 x-stainless-async: @@ -35,32 +147,33 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.61.0 + - 1.68.2 x-stainless-raw-response: - 'true' + x-stainless-read-timeout: + - '600.0' x-stainless-retry-count: - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.12.8 + - 3.12.9 method: POST uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"id\": \"chatcmpl-B4VsaBZ4ec4b0ab4pkqWgyxTFVVfc\",\n \"object\": - \"chat.completion\",\n \"created\": 1740415556,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: hi\",\n \"refusal\": null\n },\n \"logprobs\": null,\n - \ \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": - 161,\n \"completion_tokens\": 12,\n \"total_tokens\": 173,\n \"prompt_tokens_details\": - {\n \"cached_tokens\": 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": - {\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": - \"default\",\n \"system_fingerprint\": \"fp_7fcd609668\"\n}\n" + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFLBatwwEL37Kwad18W7a9bBt/ZQKBSaQCnZtsHMSmNbrSwpkrxJCfvv + RfJm7bQp9GLwvHlP783MUwbApGA1MN5j4INV+bvbx73f74vD52t12yna3X/9pPqPNzf3xy/XbBUZ + 5vCDeHhmveFmsIqCNHqCuSMMFFXXVVmV221ZXSVgMIJUpHU25KXJB6llvik2ZV5U+frqzO6N5ORZ + Dd8yAICn9I0+taBHVkOxeq4M5D12xOpLEwBzRsUKQ++lD6gDW80gNzqQTtY/gDYPwFFDJ48ECF20 + Daj9AzmA7/q91KjgbfqvoZdLHUft6DFm0aNSCwC1NgHjLFKCuzNyunhWprPOHPwfVNZKLX3fOEJv + dPTng7EsoacM4C7NZnwRl1lnBhuaYH5Sem69W096bF7JAt2cwWACqkW92q5e0WsEBZTKL6bLOPKe + xEydV4GjkGYBZIvUf7t5TXtKLnX3P/IzwDnZQKKxjoTkLxPPbY7ixf6r7TLlZJh5ckfJqQmSXNyE + oBZHNd0R8798oKFppe7IWSenY2ptIw7IcVeItmDZKfsNAAD//wMAOpzy51oDAAA= headers: CF-RAY: - - 9170edc5da6f230e-SJC + - 940e35c4d9de174e-SJC Connection: - keep-alive Content-Encoding: @@ -68,14 +181,14 @@ interactions: Content-Type: - application/json Date: - - Mon, 24 Feb 2025 16:45:57 GMT + - Fri, 16 May 2025 22:11:18 GMT Server: - cloudflare Set-Cookie: - - __cf_bm=lvRw4Nyef7N35to64fj2_kHDfbZp0KSFbwgF5chYMRI-1740415557-1.0.1.1-o5BaN1FpBwv5Wq6zIlv0rCB28lk5hVI9wZQWU3pig1jgyAKDkYzTwZ0MlSR6v6TPIX9RfepjrO3.Gk3FEmcVRw; - path=/; expires=Mon, 24-Feb-25 17:15:57 GMT; domain=.api.openai.com; HttpOnly; + - __cf_bm=7gYhEK1ZebbV2RqWIdRN.0Kv_XoKdpvnwX3SkGHCXnU-1747433478-1.0.1.1-2aU819p9q3cYgN_xx91359ew9UFwtVswCekjsQw7Qgz4X9r3RzR9e0CRqkfXgCACAMxJI7BJCmWvJ0bRuKaFrXbWRGphDbDW5xMKyMxQxbY; + path=/; expires=Fri, 16-May-25 22:41:18 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None - - _cfuvid=ySaVoTQvAcQyH5QoJQJDj75e5j8HwGFPOlFMAWEvXJk-1740415557302-0.0.1.1-604800000; + - _cfuvid=SuZPImI5tNZ3RsqGDhWpp3lM9bZ.ClZzaHNPgVIvvHA-1747433478823-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None Transfer-Encoding: - chunked @@ -90,11 +203,13 @@ interactions: openai-organization: - crewai-iuxna1 openai-processing-ms: - - '721' + - '405' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '411' x-ratelimit-limit-requests: - '30000' x-ratelimit-limit-tokens: @@ -102,15 +217,16 @@ interactions: x-ratelimit-remaining-requests: - '29999' x-ratelimit-remaining-tokens: - - '149999808' + - '149999824' x-ratelimit-reset-requests: - 2ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_fc3b3bcd4382cddaa3c04ce7003e4857 - http_version: HTTP/1.1 - status_code: 200 + - req_8274f4da736f4f31854b3c8ad67d02fb + status: + code: 200 + message: OK - request: body: '{"messages": [{"role": "system", "content": "You are Task Execution Evaluator. Evaluator agent for crew evaluation with precise capabilities to evaluate the @@ -147,12 +263,12 @@ interactions: content-type: - application/json cookie: - - __cf_bm=lvRw4Nyef7N35to64fj2_kHDfbZp0KSFbwgF5chYMRI-1740415557-1.0.1.1-o5BaN1FpBwv5Wq6zIlv0rCB28lk5hVI9wZQWU3pig1jgyAKDkYzTwZ0MlSR6v6TPIX9RfepjrO3.Gk3FEmcVRw; - _cfuvid=ySaVoTQvAcQyH5QoJQJDj75e5j8HwGFPOlFMAWEvXJk-1740415557302-0.0.1.1-604800000 + - _cfuvid=SuZPImI5tNZ3RsqGDhWpp3lM9bZ.ClZzaHNPgVIvvHA-1747433478823-0.0.1.1-604800000; + __cf_bm=7gYhEK1ZebbV2RqWIdRN.0Kv_XoKdpvnwX3SkGHCXnU-1747433478-1.0.1.1-2aU819p9q3cYgN_xx91359ew9UFwtVswCekjsQw7Qgz4X9r3RzR9e0CRqkfXgCACAMxJI7BJCmWvJ0bRuKaFrXbWRGphDbDW5xMKyMxQxbY host: - api.openai.com user-agent: - - OpenAI/Python 1.61.0 + - OpenAI/Python 1.68.2 x-stainless-arch: - arm64 x-stainless-async: @@ -162,33 +278,34 @@ interactions: x-stainless-os: - MacOS x-stainless-package-version: - - 1.61.0 + - 1.68.2 x-stainless-raw-response: - 'true' + x-stainless-read-timeout: + - '600.0' x-stainless-retry-count: - '0' x-stainless-runtime: - CPython x-stainless-runtime-version: - - 3.12.8 + - 3.12.9 method: POST uri: https://api.openai.com/v1/chat/completions response: - content: "{\n \"id\": \"chatcmpl-B4Vsbd9AsRaJ2exDtWnHAwC8rIjfi\",\n \"object\": - \"chat.completion\",\n \"created\": 1740415557,\n \"model\": \"gpt-4o-mini-2024-07-18\",\n - \ \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": - \"assistant\",\n \"content\": \"I now can give a great answer \\nFinal - Answer: { \\n \\\"quality\\\": 10 \\n} \",\n \"refusal\": null\n - \ },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n - \ ],\n \"usage\": {\n \"prompt_tokens\": 338,\n \"completion_tokens\": - 22,\n \"total_tokens\": 360,\n \"prompt_tokens_details\": {\n \"cached_tokens\": - 0,\n \"audio_tokens\": 0\n },\n \"completion_tokens_details\": {\n - \ \"reasoning_tokens\": 0,\n \"audio_tokens\": 0,\n \"accepted_prediction_tokens\": - 0,\n \"rejected_prediction_tokens\": 0\n }\n },\n \"service_tier\": - \"default\",\n \"system_fingerprint\": \"fp_7fcd609668\"\n}\n" + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFJda9swFH33r7joOS5p7Cat39qNjY0xKNtgYS5Gka4drfKVJsn9IOS/ + F9lp7OwD9mKwzj1H5xzdXQLAlGQFMLHlQbRWpzffn9bB3mbvb9T688dv9f31+u3X2y9vmk8XS8Fm + kWE2P1GEV9aZMK3VGJShARYOecCoer7KV3mW5aurHmiNRB1pjQ1pbtJWkUoX80Wezlfp+eWBvTVK + oGcF/EgAAHb9N/okiU+sgPns9aRF73mDrDgOATBndDxh3HvlA6fAZiMoDAWk3voHIPMIghM06gGB + QxNtAyf/iA6gpHeKuIbr/r+AXUkAJfvVca3CcxnDzc/mJe2n8g7rzvMYkTqtJwAnMoHHivpgdwdk + f4yiTWOd2fjfqKxWpPy2csi9oWjbB2NZj+4TgLu+su6kBWadaW2ogrnH/rosuxz02PhSI7pYHMBg + AtcT1vJQ9KleJTFwpf2kdCa42KIcqeML8U4qMwGSSeo/3fxNe0iuqPkf+REQAm1AWVmHUonTxOOY + w7jI/xo7ttwbZh7dgxJYBYUuvoTEmnd6WC/mn33AtqoVNeisU8OO1ba6yHGTb+TyKmPJPnkBAAD/ + /wMAiyaGKXEDAAA= headers: CF-RAY: - - 9170edd15bb5230e-SJC + - 940e35cada1f174e-SJC Connection: - keep-alive Content-Encoding: @@ -196,7 +313,7 @@ interactions: Content-Type: - application/json Date: - - Mon, 24 Feb 2025 16:45:58 GMT + - Fri, 16 May 2025 22:11:19 GMT Server: - cloudflare Transfer-Encoding: @@ -212,11 +329,13 @@ interactions: openai-organization: - crewai-iuxna1 openai-processing-ms: - - '860' + - '696' openai-version: - '2020-10-01' strict-transport-security: - max-age=31536000; includeSubDomains; preload + x-envoy-upstream-service-time: + - '708' x-ratelimit-limit-requests: - '30000' x-ratelimit-limit-tokens: @@ -224,13 +343,14 @@ interactions: x-ratelimit-remaining-requests: - '29999' x-ratelimit-remaining-tokens: - - '149999578' + - '149999594' x-ratelimit-reset-requests: - 2ms x-ratelimit-reset-tokens: - 0s x-request-id: - - req_fad452c2d10b5fc95809130912b08837 - http_version: HTTP/1.1 - status_code: 200 + - req_1227f2635e62eb396693c8857c57b878 + status: + code: 200 + message: OK version: 1 diff --git a/tests/utilities/test_converter.py b/tests/utilities/test_converter.py index 70d1ce718..7ebc52bed 100644 --- a/tests/utilities/test_converter.py +++ b/tests/utilities/test_converter.py @@ -1,5 +1,4 @@ import json -import os from typing import Dict, List, Optional from unittest.mock import MagicMock, Mock, patch @@ -19,6 +18,8 @@ from crewai.utilities.converter import ( validate_model, ) from crewai.utilities.pydantic_schema_parser import PydanticSchemaParser +# Tests for enums +from enum import Enum @pytest.fixture(scope="module") @@ -357,16 +358,9 @@ def test_convert_with_instructions(): assert output.age == 30 -# Skip tests that call external APIs when running in CI/CD -skip_external_api = pytest.mark.skipif( - os.getenv("CI") is not None, reason="Skipping tests that call external API in CI/CD" -) - - -@skip_external_api -@pytest.mark.vcr(filter_headers=["authorization"], record_mode="once") +@pytest.mark.vcr(filter_headers=["authorization"]) def test_converter_with_llama3_2_model(): - llm = LLM(model="ollama/llama3.2:3b", base_url="http://localhost:11434") + llm = LLM(model="openrouter/meta-llama/llama-3.2-3b-instruct") sample_text = "Name: Alice Llama, Age: 30" instructions = get_conversion_instructions(SimpleModel, llm) converter = Converter( @@ -381,8 +375,7 @@ def test_converter_with_llama3_2_model(): assert output.age == 30 -@skip_external_api -@pytest.mark.vcr(filter_headers=["authorization"], record_mode="once") +@pytest.mark.vcr(filter_headers=["authorization"]) def test_converter_with_llama3_1_model(): llm = LLM(model="ollama/llama3.1", base_url="http://localhost:11434") sample_text = "Name: Alice Llama, Age: 30" @@ -399,13 +392,6 @@ def test_converter_with_llama3_1_model(): assert output.age == 30 -# Skip tests that call external APIs when running in CI/CD -skip_external_api = pytest.mark.skipif( - os.getenv("CI") is not None, reason="Skipping tests that call external API in CI/CD" -) - - -@skip_external_api @pytest.mark.vcr(filter_headers=["authorization"]) def test_converter_with_nested_model(): llm = LLM(model="gpt-4o-mini") @@ -446,7 +432,7 @@ def test_converter_error_handling(): ) with pytest.raises(ConverterError) as exc_info: - output = converter.to_pydantic() + converter.to_pydantic() assert "Failed to convert text into a Pydantic model" in str(exc_info.value) @@ -530,10 +516,6 @@ def test_converter_with_list_field(): assert output.items == [1, 2, 3] -# Tests for enums -from enum import Enum - - def test_converter_with_enum(): class Color(Enum): RED = "red" @@ -580,7 +562,7 @@ def test_converter_with_ambiguous_input(): ) with pytest.raises(ConverterError) as exc_info: - output = converter.to_pydantic() + converter.to_pydantic() assert "failed to convert text into a pydantic model" in str(exc_info.value).lower() diff --git a/tests/utilities/test_events.py b/tests/utilities/test_events.py index 150a383cb..2f6f11b61 100644 --- a/tests/utilities/test_events.py +++ b/tests/utilities/test_events.py @@ -1,4 +1,3 @@ -import os from datetime import datetime from unittest.mock import Mock, patch @@ -22,6 +21,7 @@ from crewai.utilities.events.crew_events import ( CrewKickoffFailedEvent, CrewKickoffStartedEvent, CrewTestCompletedEvent, + CrewTestResultEvent, CrewTestStartedEvent, ) from crewai.utilities.events.crewai_event_bus import crewai_event_bus @@ -38,7 +38,6 @@ from crewai.utilities.events.llm_events import ( LLMCallCompletedEvent, LLMCallFailedEvent, LLMCallStartedEvent, - LLMCallType, LLMStreamChunkEvent, ) from crewai.utilities.events.task_events import ( @@ -132,6 +131,10 @@ def test_crew_emits_test_kickoff_type_event(): def handle_crew_test_end(source, event): received_events.append(event) + @crewai_event_bus.on(CrewTestResultEvent) + def handle_crew_test_result(source, event): + received_events.append(event) + eval_llm = LLM(model="gpt-4o-mini") with ( patch.object( @@ -149,13 +152,16 @@ def test_crew_emits_test_kickoff_type_event(): assert args[2] is None assert args[3] == eval_llm - assert len(received_events) == 2 + assert len(received_events) == 3 assert received_events[0].crew_name == "TestCrew" assert isinstance(received_events[0].timestamp, datetime) assert received_events[0].type == "crew_test_started" assert received_events[1].crew_name == "TestCrew" assert isinstance(received_events[1].timestamp, datetime) - assert received_events[1].type == "crew_test_completed" + assert received_events[1].type == "crew_test_result" + assert received_events[2].crew_name == "TestCrew" + assert isinstance(received_events[2].timestamp, datetime) + assert received_events[2].type == "crew_test_completed" @pytest.mark.vcr(filter_headers=["authorization"]) @@ -309,7 +315,7 @@ def test_agent_emits_execution_error_event(): ) as invoke_mock: invoke_mock.side_effect = Exception(error_message) - with pytest.raises(Exception) as e: + with pytest.raises(Exception): base_agent.execute_task( task=base_task, ) diff --git a/uv.lock b/uv.lock index f25215ec6..987fc993d 100644 --- a/uv.lock +++ b/uv.lock @@ -738,7 +738,7 @@ wheels = [ [[package]] name = "crewai" -version = "0.118.0" +version = "0.120.1" source = { editable = "." } dependencies = [ { name = "appdirs" }, @@ -828,7 +828,7 @@ requires-dist = [ { name = "blinker", specifier = ">=1.9.0" }, { name = "chromadb", specifier = ">=0.5.23" }, { name = "click", specifier = ">=8.1.7" }, - { name = "crewai-tools", marker = "extra == 'tools'", specifier = "~=0.42.2" }, + { name = "crewai-tools", marker = "extra == 'tools'", specifier = "~=0.45.0" }, { name = "docling", marker = "extra == 'docling'", specifier = ">=2.12.0" }, { name = "fastembed", marker = "extra == 'fastembed'", specifier = ">=0.4.1" }, { name = "instructor", specifier = ">=1.3.3" }, @@ -879,7 +879,7 @@ dev = [ [[package]] name = "crewai-tools" -version = "0.42.2" +version = "0.45.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "chromadb" }, @@ -894,9 +894,9 @@ dependencies = [ { name = "pytube" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/17/34/9e63e2db53d8f5c30353f271a3240687a48e55204bbd176a057c0b7658c8/crewai_tools-0.42.2.tar.gz", hash = "sha256:69365ffb168cccfea970e09b308905aa5007cfec60024d731ffac1362a0153c0", size = 754967 } +sdist = { url = "https://files.pythonhosted.org/packages/e9/3a/7070dcacef56702c5d83ad1a87021b1666ff1850ff80b3aa7540892406e7/crewai_tools-0.45.0.tar.gz", hash = "sha256:1b2e4eff3f928ce5fac308d6e648719a0e4718a1228ae98980aa0d74fc16bfc7", size = 909723 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/43/0f70b95350084e5cb1e1d74e9acb9e18a89ba675b1d579c787c2662baba7/crewai_tools-0.42.2-py3-none-any.whl", hash = "sha256:13727fb68f0efefd21edeb281be3d66ff2f5a3b5029d4e6adef388b11fd5846a", size = 583933 }, + { url = "https://files.pythonhosted.org/packages/6e/72/db45626973027c992df75cbc7ef391f18393d631be3bceb6388c1b9f01e1/crewai_tools-0.45.0-py3-none-any.whl", hash = "sha256:9dd34e4792c075ee7a72134aedaab268e78d0e350114fd7fe2426e691c5f52a3", size = 602659 }, ] [[package]]