diff --git a/CHANGELOG.md b/CHANGELOG.md index c11b050..44f15b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,284 +2,308 @@ All notable changes to this project will be documented in this file. -## \[0.2.0\] - 2024-10-22 +## [0.3.0] - 2025-03-11 ### πŸš€ Features -- _(helpers)_ Add dedent method to remove common leading whitespace -- _(agent)_ Enhance integration resolution mechanism πŸ“¦ -- _(commands)_ Add SynapseArtisan command and agent πŸš€ -- _(api)_ Introduce new endpoint for user management ✨ -- _(sql-tool)_ Introduce SQLToolAgent with documentation and tests πŸŽ‰ -- _(traits)_ Introduce configurable agents and conditionable utilities πŸ› οΈ -- _(integrations)_ Add Ollama integration and tests πŸ› οΈ -- _(ollama)_ Implement embedding creation functionality -- _(validation)_ Improve response format handling and validation prompts πŸ› οΈ -- _(integrations)_ Add Ollama integration 🌟 -- +- Rename agent memory and messages tables to synapse_agent_memories and synapse_messages + +### 🚜 Refactor + +- *(tools)* [**breaking**] Reorganize tool structure and enhance ReturnType handling πŸ› οΈ +- *(tools)* [**breaking**] Restructure FirecrawlTool and update FirecrawlRequest +- *(agent/task)* Simplify task iteration management and response handling +- *(search-tools)* Enhance result formatting with structured JSON output + +### πŸ“š Documentation + +- *(changelog)* Add comprehensive changelog for version 0.1.0 and 0.2.0 +- *(README)* Update project description and references πŸ“ + +### βš™οΈ Miscellaneous Tasks + +- *(workflows)* Remove unused `update-changelog.yml` workflow file πŸ—‘οΈ +- *(tests)* Remove obsolete RatAgentChain fixture files πŸ—‘οΈ + +## [0.1.1] - 2024-10-16 + +### πŸš€ Features + +- *(helpers)* Add dedent method to remove common leading whitespace +- *(agent)* Enhance integration resolution mechanism πŸ“¦ +- *(commands)* Add SynapseArtisan command and agent πŸš€ +- *(api)* Introduce new endpoint for user management πŸ†•βœ¨ +- *(sql-tool)* Introduce SQLToolAgent with documentation and tests πŸŽ‰ +- *(traits)* Introduce configurable agents and conditionable utilities πŸ› οΈ +- *(integrations)* Add Ollama integration and tests πŸ› οΈ +- *(ollama)* Implement embedding creation functionality +- *(validation)* Improve response format handling and validation prompts πŸ› οΈ ### πŸ› Bug Fixes -- _(validation)_ Enhance JSON response handling in output schema πŸ› οΈ -- _(integrations)_ Replace OllamaAIConnector with ClaudeAIConnector and improve ChatRequest handling ✨ +- *(validation)* Enhance JSON response handling in output schema πŸ› οΈ +- *(integrations)* Replace OllamaAIConnector with ClaudeAIConnector and improve ChatRequest handling ✨ ### 🚜 Refactor -- _(docs)_ Update references from Laravel Synapse to Synapse πŸš€ -- _(agent)_ πŸ› οΈ streamline tool management logic by rearranging methods -- _(SynapseArtisan)_ Enhance command execution flow and update documentation πŸ› οΈ -- _(agents)_ Remove direct OpenAI integrations -- _(agent)_ Separate `use` statements for better readability and maintainability +- *(docs)* Update references from Laravel Synapse to Synapse πŸš€ +- *(docs)* Update references from Laravel Synapse to Synapse πŸš€ +- *(agent)* πŸ› οΈ streamline tool management logic by rearranging methods +- *(SynapseArtisan)* Enhance command execution flow and update documentation πŸ› οΈ +- *(agents)* Remove direct OpenAI integrations +- *(agent)* Separate `use` statements for better readability and maintainability ### πŸ“š Documentation -- _(README)_ Update usage instructions and add prebuilt agents info πŸš€ +- *(README)* Update usage instructions and add prebuilt agents info πŸš€ - Correct package inspiration reference in documentation +- *(integrations)* Add Ollama integration 🌟 +- *(integrations)* Add Ollama integration 🌟 ### 🎨 Styling -- _(tests)_ Adjust indentation in ClaudeIntegrationTest.php πŸ“ +- *(tests)* Adjust indentation in ClaudeIntegrationTest.php πŸ“ ### πŸ§ͺ Testing -- _(SQLToolAgent)_ Add new JSON fixtures and update test verification logic -- _(SQLToolAgentTest)_ Simplify content assertion using multiple contains -- _(integrations)_ Update tests with improved output assertions and fixture usage ♻️ -- _(tests)_ Update test expectations and improve readability πŸ§ͺ -- _(memory)_ Update conversation test summaries for clearer content verification πŸ§ͺ +- *(SQLToolAgent)* Add new JSON fixtures and update test verification logic +- *(SQLToolAgentTest)* Simplify content assertion using multiple contains +- *(integrations)* Update tests with improved output assertions and fixture usage ♻️ +- *(tests)* Update test expectations and improve readability πŸ§ͺ +- *(memory)* Update conversation test summaries for clearer content verification πŸ§ͺ ### βš™οΈ Miscellaneous Tasks -- _(tests)_ Remove outdated fixtures for clearbit, crunchbase, and firecrawl -- _(ci)_ Update checkout action to v4 -- _(workflows)_ Update branch name and add OpenAI API key to tests.yml +- *(tests)* Remove outdated fixtures for clearbit, crunchbase, and firecrawl +- *(ci)* Update checkout action to v4 +- *(workflows)* Update branch name and add OpenAI API key to tests.yml -## \[0.1.0\] - 2024-10-12 +## [0.1.0] - 2024-10-12 ### πŸš€ Features -- _(nix)_ Introduce snow-blower configuration with PHP and Composer setups -- _(workbench)_ Initialize Laravel project structure with essential configurations -- _(tests)_ Add initial test infrastructure and setup -- _(synapse)_ Introduce tools for handling AI-generated tasks and enhanced project management -- _(agents)_ Enhance tool handling with new Service and ValueObject refactor -- _(parsers)_ Implement output parsing for JSON and string -- _(services)_ Add Clearbit company search tool and related tests -- _(toolList)_ Add tool list view and enhance tool handling -- _(agent)_ Support multi-message prompts and improve parsing -- _(flake)_ Add publicKeys and enable agenix for .env secrets -- _(memory)_ Add asString method to serialize agent messages -- _(provider)_ Add migration publishing to SynapseServiceProvider -- _(crunchbase)_ Add Crunchbase service and tool for organization data handling -- _(FirecrawlTool)_ Introduce FirecrawlTool for webpage content scraping -- _(agent)_ Add SearchAndScrapeAgent with error handling and new view template -- _(agent)_ Add SearchAndScrapeAgent with error handling and new view template -- _(chat-rephrase)_ Add Chat Rephrase Agent with prompt and test -- _(openai)_ Add support for extra agent arguments in handle methods -- _(FirecrawlTool)_ Enhance URL scraping with extraction prompts and add tests -- _(tool)_ Enhance SerperTool, add test coverage -- _(tools)_ Add SerpAPI Google search capability -- _(SerpAPIGoogleNewsTool)_ Add tool for Google News searches, update agent and tests -- _(logging)_ Add event logging to Agent class -- _(memory)_ Add set and clear methods for agent memory management -- _(memory)_ Add set and clear methods to CollectionMemory class -- _(memory)_ Expand payload structure and add new tests -- _(output-rules)_ Improve validation error handling and messaging -- _(VectorStores)_ Add new contract and base implementation for vector store -- _(exceptions)_ Add MissingApiKeyException class for handling missing API key errors -- _(integration)_ Add support for Claude AI integration and improve tool handling -- _(openai)_ Add validation request for output formatting in OpenAI integration -- _(integrations)_ Update model configuration and add embeddings support -- _(embeddings)_ Add embedding creation support -- _(output-rules)_ Enhance validation prompt handling and add error view -- _(tools)_ Enhance tool handling with better parameter description and validation -- _(tools)_ Add AI integration capability with Saloon Connector -- _(tests)_ Enhance ChatRephraseAgent tests with mock client, add message handling, and fixture data -- _(image input)_ Update message type, improve test structure for ImageAgent -- _(agent)_ Add custom exception for unknown finish reasons -- _(linting)_ Add `refactor-file` command to flake.nix and composer.json -- _(docs)_ Revamp documentation structure and add VitePress for better dev experience -- _(agent)_ Add KnowledgeGraphExtractionAgent with prompt and test -- _(agent)_ Add ContextualRetrievalPreprocessingAgent with fixtures and tests -- _(Synapse)_ Add installation command and refine publishing logic -- _(agent)_ Add ContextualRetrievalPreprocessingAgent with fixtures and tests -- _(logging)_ Add comprehensive logging to middleware pipelines and agent tasks -- _(agent)_ Add maximum iteration limit to prevent infinite loops -- _(agent)_ Introduce HasOutputSchema interface for output schema validation -- _(agents)_ Introduce boot agent pipeline and update memory management -- _(memory)_ Enhance database memory functionality and add tests -- _(agent)_ Introduce event handling and new Agent event classes -- _(agent)_ Enhance agent functionality and documentation 🌟 -- _(validation)_ Implement output schema validation for agents πŸš€ -- _(memory)_ Add DatabaseMemory implementation and improve documentation πŸ’ΎπŸ“š -- _(agents)_ Add prebuilt MultiQueryRetrieverAgent and documentation πŸ› οΈ -- _(agent)_ Enhance memory management and update schemas πŸŽ‰ -- _(contextual-retrieval-preprocessing-agent)_ Add new Contextual Retrieval Preprocessing Agent with tests and documentation πŸš€ -- _(logging)_ Enhance agent activity logging and add unit tests πŸ“ -- _(tests)_ Add SQL tools and integration tests πŸŽ‰ +- *(nix)* Introduce snow-blower configuration with PHP and Composer setups +- *(workbench)* Initialize Laravel project structure with essential configurations +- *(tests)* Add initial test infrastructure and setup +- *(synapse)* Introduce tools for handling AI-generated tasks and enhanced project management +- *(agents)* Enhance tool handling with new Service and ValueObject refactor +- *(parsers)* Implement output parsing for JSON and string +- *(services)* Add Clearbit company search tool and related tests +- *(toolList)* Add tool list view and enhance tool handling +- *(agent)* Support multi-message prompts and improve parsing +- *(flake)* Add publicKeys and enable agenix for .env secrets +- *(memory)* Add asString method to serialize agent messages +- *(provider)* Add migration publishing to SynapseServiceProvider +- *(crunchbase)* Add Crunchbase service and tool for organization data handling +- *(FirecrawlTool)* Introduce FirecrawlTool for webpage content scraping +- *(agent)* Add SearchAndScrapeAgent with error handling and new view template +- *(agent)* Add SearchAndScrapeAgent with error handling and new view template +- *(chat-rephrase)* Add Chat Rephrase Agent with prompt and test +- *(openai)* Add support for extra agent arguments in handle methods +- *(FirecrawlTool)* Enhance URL scraping with extraction prompts and add tests +- *(tool)* Enhance SerperTool, add test coverage +- *(tools)* Add SerpAPI Google search capability +- *(SerpAPIGoogleNewsTool)* Add tool for Google News searches, update agent and tests +- *(logging)* Add event logging to Agent class +- *(memory)* Add set and clear methods for agent memory management +- *(memory)* Add set and clear methods to CollectionMemory class +- *(memory)* Expand payload structure and add new tests +- *(output-rules)* Improve validation error handling and messaging +- *(VectorStores)* Add new contract and base implementation for vector store +- *(exceptions)* Add MissingApiKeyException class for handling missing API key errors +- *(integration)* Add support for Claude AI integration and improve tool handling +- *(openai)* Add validation request for output formatting in OpenAI integration +- *(integrations)* Update model configuration and add embeddings support +- *(embeddings)* Add embedding creation support +- *(output-rules)* Enhance validation prompt handling and add error view +- *(tools)* Enhance tool handling with better parameter description and validation +- *(tools)* Add AI integration capability with Saloon Connector +- *(tests)* Enhance ChatRephraseAgent tests with mock client, add message handling, and fixture data +- *(image input)* Update message type, improve test structure for ImageAgent +- *(agent)* Add custom exception for unknown finish reasons +- *(linting)* Add `refactor-file` command to flake.nix and composer.json +- *(docs)* Revamp documentation structure and add VitePress for better dev experience +- *(agent)* Add KnowledgeGraphExtractionAgent with prompt and test +- *(agent)* Add ContextualRetrievalPreprocessingAgent with fixtures and tests +- *(Synapse)* Add installation command and refine publishing logic +- *(agent)* Add ContextualRetrievalPreprocessingAgent with fixtures and tests +- *(logging)* Add comprehensive logging to middleware pipelines and agent tasks +- *(agent)* Add maximum iteration limit to prevent infinite loops +- *(agent)* Introduce HasOutputSchema interface for output schema validation +- *(agents)* Introduce boot agent pipeline and update memory management +- *(memory)* Enhance database memory functionality and add tests +- *(agent)* Introduce event handling and new Agent event classes +- *(agent)* Enhance agent functionality and documentation 🌟 +- *(validation)* Implement output schema validation for agents πŸš€ +- *(memory)* Add DatabaseMemory implementation and improve documentation πŸ’ΎπŸ“š +- *(agents)* Add prebuilt MultiQueryRetrieverAgent and documentation πŸ› οΈ +- *(agent)* Enhance memory management and update schemas πŸŽ‰ +- *(contextual-retrieval-preprocessing-agent)* Add new Contextual Retrieval Preprocessing Agent with tests and documentation πŸš€ +- *(logging)* Enhance agent activity logging and add unit tests πŸ“ +- *(tests)* Add SQL tools and integration tests πŸŽ‰ ### πŸ› Bug Fixes -- _(memory)_ Correct array keys to prevent improper payload handling -- _(models)_ Update relationship in Message to use AgentMemory instead of Assistant -- _(memory)_ Ensure proper formatting of message payloads with newlines -- _(BaseTool)_ Correct class name retrieval in log method -- _(FirecrawlService)_ Improve extraction prompt for content relevance -- _(logging)_ Remove redundant results logging in tools and set default context in BaseTool -- _(FirecrawlService)_ Improve clarity of extraction prompt -- _(FirecrawlService)_ Improve clarity of extraction prompt -- _(FirecrawlService)_ Correct grammar in extraction prompt for clarity -- _(tests)_ Remove unused Serper service configuration in TestCase -- _(views)_ Correct order of includes and message sorting -- _(OpenAI)_ Remove debugging code and correct response data handling in EmbeddingsRequest -- _(agent)_ Add memory and integration resolver exception handling πŸš€ -- _(memory)_ Correct input key and debug statements in CollectionMemoryTest -- _(agent)_ Correct middleware method for tool initialization -- _(agent)_ Correct middleware method for tool initialization -- _(tests)_ Remove outdated memory fixture files πŸ—‘οΈ -- _(tests)_ Update assertions for messages and standalone_question +- *(memory)* Correct array keys to prevent improper payload handling +- *(models)* Update relationship in Message to use AgentMemory instead of Assistant +- *(memory)* Ensure proper formatting of message payloads with newlines +- *(BaseTool)* Correct class name retrieval in log method +- *(FirecrawlService)* Improve extraction prompt for content relevance +- *(logging)* Remove redundant results logging in tools and set default context in BaseTool +- *(FirecrawlService)* Improve clarity of extraction prompt +- *(FirecrawlService)* Improve clarity of extraction prompt +- *(FirecrawlService)* Correct grammar in extraction prompt for clarity +- *(tests)* Remove unused Serper service configuration in TestCase +- *(views)* Correct order of includes and message sorting +- *(OpenAI)* Remove debugging code and correct response data handling in EmbeddingsRequest +- *(agent)* Add memory and integration resolver exception handling πŸš€ +- *(memory)* Correct input key and debug statements in CollectionMemoryTest +- *(agent)* Correct middleware method for tool initialization +- *(agent)* Correct middleware method for tool initialization +- *(tests)* Remove outdated memory fixture files πŸ—‘οΈ +- *(tests)* Update assertions for messages and standalone_question ### 🚜 Refactor -- _(agent)_ Streamline agent implementation, enhance OpenAI integration -- _(core)_ Update tool call handling and Google search feature -- _(memory)_ Implement new agent executor, enhance tool handling and OpenAI integration -- _(SystemPrompts)_ Convert BaseSystemPrompt to abstract class and clean up imports in tests -- _(prompts)_ Standardize prompt architecture and update invocation flow -- _(core)_ Remove obsolete classes and decouple concerns -- _(Message)_ Rename MessageValueObject to Message -- _(messages)_ Update prompt syntax and improve parsing logic -- _(SerperService)_ Inject apiKey via constructor, enhance SearchGoogleTool output format -- _(output)_ Convert Message object to array for prompt handling -- _(api)_ Replace Message with Response for better encapsulation -- _(memory)_ Split memory into two formats, update prompts to use new memory format -- _(models)_ Remove unused Eloquent models -- _(Message)_ Flatten tool attributes in value object and remove unused method -- _(tools)_ Extract common logic to BaseTool and remove unused method from Tool contract -- _(events)_ Rename model event methods to agent event methods and update related logic -- _(FirecrawlTool)_ Remove unused imports and adjust indentation -- _(logging)_ Consolidate logging logic into BaseTool class -- _(SimpleAgent)_ Replace SearchGoogleTool with SerperTool -- _(search)_ Streamline SerpAPIService parameter handling and update method signature -- _(test)_ Remove unused 'serper' config from TestCase setup -- _(migrations)_ Change `agent_memory_id` to UUID in `messages` table migration -- _(tools)_ Simplify query parameter descriptions in search tools -- _(SynapseServiceProvider)_ Replace publishesMigrations with loadMigrationsFrom -- _(tools)_ Standardize API key retrieval using config files -- _(config)_ Restructure API key and model configurations -- _(openai)_ Replace direct integration calls with Saloon for OpenAI interactions -- _(serper)_ Modularize Serper integration and update usage -- _(services)_ Modularize ClearbitService into separate request and connector classes -- _(crunchbase)_ Modularize and enhance Crunchbase integration -- _(Firecrawl)_ Modernize Firecrawl service architecture -- _(serpapi)_ Integrate new SerpApiConnector, remove deprecated service, and enhance API key handling -- _(SerpAPI)_ Streamline Google News tool handling; update tests and fixtures -- _(integrations)_ Reorganize OpenAI integration structure -- _(tests)_ Remove redundant `only` call in ClaudeIntegrationTest -- _(connectors/claude)_ Remove unused import in ValidateOutputRequest -- _(integrations)_ Update message formatting and tool handling -- _(integrations)_ Relocate Integration contract for better organization -- _(ValueObjects)_ Update comment to accurately reflect the Message validator -- _(agent)_ Streamline constructor and optimize methods for clarity and efficiency -- _(integrations)_ Update docblocks in HasIntegration.php for clarity -- _(memory)_ Reorganize memory methods and improve doc comments -- _(memory)_ Improve method visibility and documentation in memory classes -- _(logging)_ Consolidate logging functionality into HasLogging trait -- _(models)_ Reorganize memory-related models to improve structure -- _(tests)_ Relocate and update MultiQueryRetrieverAgent tests for improved structure and mocking -- _(agent)_ Remove ProfessionalEditorAgent and associated tests and resources -- _(SearchAndScrapeAgent)_ Remove deprecated agent and related files -- _(codebase)_ Optimize null/empty checks and type hints across various classes -- _(codebase)_ Optimize null/empty checks and type hints across various classes -- _(src)_ Standardize variable names and signatures -- _(schema)_ Rename OutputRules to OutputSchema across the codebase -- _(tests)_ Reorganize CollectionMemoryTest directory structure -- _(agent)_ Enhance PendingAgentTask and integration handling -- _(agents)_ Restructure traits for better organization and functionality -- _(integrations)_ Remove unused Message import and method -- _(agent)_ Move Agent class to base namespace πŸ› οΈ -- _(project)_ Restructure namespaces and traits for consistency ♻️ -- _(agent)_ Standardize namespaces and manage memory/tools -- _(value-objects)_ Reorganize Message and EmbeddingResponse namespaces πŸ”„ -- _(memory)_ Move Memory contract to new namespace ♻️ -- _(integrations)_ Relocate `Response` value object to new namespace ♻️ -- _(integration)_ Rename OpenAiIntegration to OpenAIIntegration and update methods -- _(integration)_ Rename OpenAiIntegration to OpenAIIntegration and update methods -- _(agent)_ Rename traits for clarity 🌟 -- _(models)_ 🦊 relocate models to a new namespace for better organization -- _(tools)_ Remove ToolCallValueObject and update references πŸ’… -- _(tool)_ Modify BaseTool to initialize with PendingAgentTask -- _(tools)_ Improve tool handling and integration -- _(agent)_ Rename Agent namespace to AgentTask for clarity -- _(agents)_ Move agent classes from Templates to Agents namespace -- _(agent)_ Streamline integration management and tool handling -- _(memory)_ Unify memory management and enhance tool initialization 🌟✨ -- _(agent/memory)_ Synchronize memory management with middleware pipeline and integrate new interfaces 🧠 -- _(tests)_ Rename fixture files for OpenAi integration tests for better organization -- _(tests)_ Streamline fixture paths and remove unused imports -- _(SerpAPIGoogleSearchTool)_ Streamline API key handling and enhance tests -- _(SerpAPIGoogleNewsTool)_ Streamline API key handling and enhance test coverage -- _(firecrawl)_ Update endpoint and extraction schema handling -- _(CrunchbaseTool)_ Simplify initialization and enhance boot method -- _(clearbit)_ Streamline ClearbitCompanyTool logic, update tests -- _(Message)_ Update content return type to mixed -- _(agent-hooks)_ Split and enhance hook interfaces, add testsπŸ› -- _(agent-hooks)_ Split and enhance hook interfaces, add testsπŸ› -- _(memory)_ Remove deprecated memory trait and methods πŸ’Ύ -- _(tools)_ Streamline API key handling and remove unnecessary boot method πŸ”§ -- _(tools)_ Streamline API key handling and remove unnecessary boot method πŸ”§ -- _(KnowledgeGraphExtractionAgent)_ Implement HasOutputSchema interface and update schema validation 🎯 -- _(command)_ Streamline SynapseInstall.php structure +- *(agent)* Streamline agent implementation, enhance OpenAI integration +- *(core)* Update tool call handling and Google search feature +- *(memory)* Implement new agent executor, enhance tool handling and OpenAI integration +- *(SystemPrompts)* Convert BaseSystemPrompt to abstract class and clean up imports in tests +- *(prompts)* Standardize prompt architecture and update invocation flow +- *(core)* Remove obsolete classes and decouple concerns +- *(Message)* Rename MessageValueObject to Message +- *(messages)* Update prompt syntax and improve parsing logic +- *(SerperService)* Inject apiKey via constructor, enhance SearchGoogleTool output format +- *(output)* Convert Message object to array for prompt handling +- *(api)* Replace Message with Response for better encapsulation +- *(memory)* Split memory into two formats, update prompts to use new memory format +- *(models)* Remove unused Eloquent models +- *(Message)* Flatten tool attributes in value object and remove unused method +- *(tools)* Extract common logic to BaseTool and remove unused method from Tool contract +- *(events)* Rename model event methods to agent event methods and update related logic +- *(FirecrawlTool)* Remove unused imports and adjust indentation +- *(logging)* Consolidate logging logic into BaseTool class +- *(SimpleAgent)* Replace SearchGoogleTool with SerperTool +- *(search)* Streamline SerpAPIService parameter handling and update method signature +- *(test)* Remove unused 'serper' config from TestCase setup +- *(migrations)* Change `agent_memory_id` to UUID in `messages` table migration +- *(tools)* Simplify query parameter descriptions in search tools +- *(SynapseServiceProvider)* Replace publishesMigrations with loadMigrationsFrom +- *(tools)* Standardize API key retrieval using config files +- *(config)* Restructure API key and model configurations +- *(openai)* Replace direct integration calls with Saloon for OpenAI interactions +- *(serper)* Modularize Serper integration and update usage +- *(services)* Modularize ClearbitService into separate request and connector classes +- *(crunchbase)* Modularize and enhance Crunchbase integration +- *(Firecrawl)* Modernize Firecrawl service architecture +- *(serpapi)* Integrate new SerpApiConnector, remove deprecated service, and enhance API key handling +- *(SerpAPI)* Streamline Google News tool handling; update tests and fixtures +- *(integrations)* Reorganize OpenAI integration structure +- *(tests)* Remove redundant `only` call in ClaudeIntegrationTest +- *(connectors/claude)* Remove unused import in ValidateOutputRequest +- *(integrations)* Update message formatting and tool handling +- *(integrations)* Relocate Integration contract for better organization +- *(ValueObjects)* Update comment to accurately reflect the Message validator +- *(agent)* Streamline constructor and optimize methods for clarity and efficiency +- *(integrations)* Update docblocks in HasIntegration.php for clarity +- *(memory)* Reorganize memory methods and improve doc comments +- *(memory)* Improve method visibility and documentation in memory classes +- *(logging)* Consolidate logging functionality into HasLogging trait +- *(models)* Reorganize memory-related models to improve structure +- *(tests)* Relocate and update MultiQueryRetrieverAgent tests for improved structure and mocking +- *(agent)* Remove ProfessionalEditorAgent and associated tests and resources +- *(SearchAndScrapeAgent)* Remove deprecated agent and related files +- *(codebase)* Optimize null/empty checks and type hints across various classes +- *(codebase)* Optimize null/empty checks and type hints across various classes +- *(src)* Standardize variable names and signatures +- *(schema)* Rename OutputRules to OutputSchema across the codebase +- *(tests)* Reorganize CollectionMemoryTest directory structure +- *(agent)* Enhance PendingAgentTask and integration handling +- *(agents)* Restructure traits for better organization and functionality +- *(integrations)* Remove unused Message import and method +- *(agent)* Move Agent class to base namespace πŸ› οΈ +- *(project)* Restructure namespaces and traits for consistency ♻️ +- *(agent)* Standardize namespaces and manage memory/tools +- *(value-objects)* Reorganize Message and EmbeddingResponse namespaces πŸ”„ +- *(memory)* Move Memory contract to new namespace ♻️ +- *(integrations)* Relocate `Response` value object to new namespace ♻️ +- *(integration)* Rename OpenAiIntegration to OpenAIIntegration and update methods +- *(integration)* Rename OpenAiIntegration to OpenAIIntegration and update methods +- *(agent)* Rename traits for clarity 🌟 +- *(models)* 🦊 relocate models to a new namespace for better organization +- *(tools)* Remove ToolCallValueObject and update references πŸ’… +- *(tool)* Modify BaseTool to initialize with PendingAgentTask +- *(tools)* Improve tool handling and integration +- *(agent)* Rename Agent namespace to AgentTask for clarity +- *(agents)* Move agent classes from Templates to Agents namespace +- *(agent)* Streamline integration management and tool handling +- *(memory)* Unify memory management and enhance tool initialization 🌟✨ +- *(agent/memory)* Synchronize memory management with middleware pipeline and integrate new interfaces 🧠 +- *(tests)* Rename fixture files for OpenAi integration tests for better organization +- *(tests)* Streamline fixture paths and remove unused imports +- *(SerpAPIGoogleSearchTool)* Streamline API key handling and enhance tests +- *(SerpAPIGoogleNewsTool)* Streamline API key handling and enhance test coverage +- *(firecrawl)* Update endpoint and extraction schema handling +- *(CrunchbaseTool)* Simplify initialization and enhance boot method +- *(clearbit)* Streamline ClearbitCompanyTool logic, update tests +- *(Message)* Update content return type to mixed +- *(agent-hooks)* Split and enhance hook interfaces, add testsπŸ› +- *(agent-hooks)* Split and enhance hook interfaces, add testsπŸ› +- *(memory)* Remove deprecated memory trait and methods πŸ’Ύ +- *(tools)* Streamline API key handling and remove unnecessary boot method πŸ”§ +- *(tools)* Streamline API key handling and remove unnecessary boot method πŸ”§ +- *(KnowledgeGraphExtractionAgent)* Implement HasOutputSchema interface and update schema validation 🎯 +- *(command)* Streamline SynapseInstall.php structure ### πŸ“š Documentation -- _(getting-started)_ Add installation guide for Laravel Synapse -- _(Response)_ Correct annotation for validationRules method -- _(agent)_ Add detailed docblocks for methods -- _(ClearbitCompanyTool)_ Add missing docblocks and exceptions, improve method annotations -- _(OutputRule)_ Add PHPDoc comments for better code clarity and documentation -- _(SynapseServiceProvider)_ Enhance boot method docblock for clarity and detail -- _(vitepress)_ Add initial VitePress configuration for documentation -- _(agents)_ Add comprehensive documentation for agent memory and collection memory 🍱 -- _(agent-traits)_ Add `HasHooks` contract and `ManagesHooks` trait ✍️ +- *(getting-started)* Add installation guide for Laravel Synapse +- *(Response)* Correct annotation for validationRules method +- *(agent)* Add detailed docblocks for methods +- *(ClearbitCompanyTool)* Add missing docblocks and exceptions, improve method annotations +- *(OutputRule)* Add PHPDoc comments for better code clarity and documentation +- *(SynapseServiceProvider)* Enhance boot method docblock for clarity and detail +- *(vitepress)* Add initial VitePress configuration for documentation +- *(agents)* Add comprehensive documentation for agent memory and collection memory 🍱 +- *(agent-traits)* Add `HasHooks` contract and `ManagesHooks` trait ✍️ - Reorganize and add new sections to documentation πŸ“„ -- _(prompt)_ Enhance documentation with new prompt parts and examples ✍️ -- _(agents)_ Add integration setup documentation for OpenAI and Claude πŸš€ -- _(prompts)_ Enhance documentation for clarity and consistency βœ¨πŸ“š -- _(traits)_ Add documentation for events and log traits πŸ“ -- _(agent-lifecycle)_ Fix broken link to message tags πŸ“š -- _(license)_ Add MIT License to the repository πŸ“„ +- *(prompt)* Enhance documentation with new prompt parts and examples ✍️ +- *(agents)* Add integration setup documentation for OpenAI and Claude πŸš€ +- *(prompts)* Enhance documentation for clarity and consistency βœ¨πŸ“š +- *(traits)* Add documentation for events and log traits πŸ“ +- *(agent-lifecycle)* Fix broken link to message tags πŸ“š +- *(license)* Add MIT License to the repository πŸ“„ ### 🎨 Styling -- _(codebase)_ Adhere to strict type declarations and coding standards -- _(output-rules)_ Refine prompt formatting for better readability -- _(provider)_ Specify return type and update doc comment in SynapseServiceProvider -- _(docblocks)_ Add comprehensive docblocks for constructors and methods -- _(codebase)_ Improve code formatting and consistency across files -- _(agent, tests)_ ⭐️ Ensure consistent code indentation 🌟 +- *(codebase)* Adhere to strict type declarations and coding standards +- *(output-rules)* Refine prompt formatting for better readability +- *(provider)* Specify return type and update doc comment in SynapseServiceProvider +- *(docblocks)* Add comprehensive docblocks for constructors and methods +- *(codebase)* Improve code formatting and consistency across files +- *(agent, tests)* ⭐️ Ensure consistent code indentation 🌟 ### πŸ§ͺ Testing -- _(agent)_ Add SearchAndScrapeAgentTest and cleanup existing tests -- _(ImageAgent)_ Add basic test structure for scraping functionality -- _(SerperTool)_ Enhance coverage and restructure tests with mocking -- _(OpenAiIntegration)_ Add test for Connects With OutputSchema -- _(memory)_ Update and reorganize CollectionMemory test fixtures -- _(ImageAgent)_ Add new fixture for image agent test πŸ€– -- _(memory)_ Add new CollectionMemory test and fixture πŸš€ +- *(agent)* Add SearchAndScrapeAgentTest and cleanup existing tests +- *(ImageAgent)* Add basic test structure for scraping functionality +- *(SerperTool)* Enhance coverage and restructure tests with mocking +- *(OpenAiIntegration)* Add test for Connects With OutputSchema +- *(memory)* Update and reorganize CollectionMemory test fixtures +- *(ImageAgent)* Add new fixture for image agent test πŸ€– +- *(memory)* Add new CollectionMemory test and fixture πŸš€ ### βš™οΈ Miscellaneous Tasks -- _(dependencies)_ Remove unused dependencies 'saloonphp/saloon' and 'spatie/laravel-data' -- _(tests)_ Restructure OpenAiIntegrationTest.php directory -- _(config)_ Add .editorconfig for consistent code formatting -- _(secrets)_ Update encrypted environment variables -- _(docs)_ Add GitHub Actions workflow to deploy VitePress site to Pages πŸš€ -- _(ci)_ Cleanup workflow and add funding configuration 🧹 -- _(workflows)_ Add GitHub Actions workflow for running tests πŸš€ -- _(workflow)_ Add GitHub Action to automate changelog updates upon release πŸš€ -- _(workflows)_ Update CI config to use PHP 8.2 and streamline testing process πŸ›  -- _(workflow)_ Add environment API keys for workflows πŸ› οΈ +- *(dependencies)* Remove unused dependencies 'saloonphp/saloon' and 'spatie/laravel-data' +- *(tests)* Restructure OpenAiIntegrationTest.php directory +- *(config)* Add .editorconfig for consistent code formatting +- *(secrets)* Update encrypted environment variables +- *(docs)* Add GitHub Actions workflow to deploy VitePress site to Pages πŸš€ +- *(ci)* Cleanup workflow and add funding configuration 🧹 +- *(workflows)* Add GitHub Actions workflow for running tests πŸš€ +- *(workflow)* Add GitHub Action to automate changelog updates upon release πŸš€ +- *(workflows)* Update CI config to use PHP 8.2 and streamline testing process πŸ›  +- *(workflow)* Add environment API keys for workflows πŸ› οΈ diff --git a/database/migrations/2024_07_06_132316_create_agent_memory_table.php b/database/migrations/2024_07_06_132316_create_agent_memory_table.php index 2f28658..c25dc9a 100644 --- a/database/migrations/2024_07_06_132316_create_agent_memory_table.php +++ b/database/migrations/2024_07_06_132316_create_agent_memory_table.php @@ -2,17 +2,17 @@ declare(strict_types=1); //Credits to https://github.com/bootstrapguru/dexor -use Illuminate\Database\Migrations\Migration; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Support\Facades\Schema; + use Illuminate\Database\Migrations\Migration; + use Illuminate\Database\Schema\Blueprint; + use Illuminate\Support\Facades\Schema; -return new class extends Migration + return new class extends Migration { public function up(): void { - Schema::create('agent_memories', function (Blueprint $table) { + Schema::create('synapse_agent_memories', function (Blueprint $table) { - $table->uuid('id'); + $table->uuid('id')->primary(); $table->string('type')->nullable(); $table->timestamps(); }); @@ -20,6 +20,6 @@ public function up(): void public function down(): void { - Schema::dropIfExists('agents'); + Schema::dropIfExists('synapse_agent_memories'); } }; diff --git a/database/migrations/2024_07_06_132319_create_messages_table.php b/database/migrations/2024_07_06_132319_create_messages_table.php index 8e6a05f..d3e529a 100644 --- a/database/migrations/2024_07_06_132319_create_messages_table.php +++ b/database/migrations/2024_07_06_132319_create_messages_table.php @@ -2,17 +2,17 @@ declare(strict_types=1); //Credits to https://github.com/bootstrapguru/dexor -use Illuminate\Database\Migrations\Migration; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Support\Facades\Schema; + use Illuminate\Database\Migrations\Migration; + use Illuminate\Database\Schema\Blueprint; + use Illuminate\Support\Facades\Schema; -return new class extends Migration + return new class extends Migration { public function up(): void { - Schema::create('messages', function (Blueprint $table) { + Schema::create('synapse_messages', function (Blueprint $table) { $table->id(); - $table->foreignUuid('agent_memory_id')->constrained('agent_memories')->onDelete('cascade'); + $table->foreignUuid('agent_memory_id')->constrained('synapse_agent_memories')->onDelete('cascade'); $table->string('role'); $table->text('content')->nullable(); $table->string('tool_name')->nullable(); @@ -26,6 +26,6 @@ public function up(): void public function down(): void { - Schema::dropIfExists('messages'); + Schema::dropIfExists('synapse_messages'); } }; diff --git a/docs/tools/index.md b/docs/tools/index.md index 06c6dbc..5aeba67 100644 --- a/docs/tools/index.md +++ b/docs/tools/index.md @@ -5,14 +5,7 @@ Tools allow your agent to interact with your application or external APIs. Essen Tools are inherently part of all agents, but they are not invoked unless the `resolveTools` method returns an array of tools that the agent can use. Below is an example where the `SerperTool` is added to an agent, allowing it to perform Google searches. ```php -use UseTheFork\Synapse\Agent; -use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; -use UseTheFork\Synapse\Contracts\Integration; -use UseTheFork\Synapse\Contracts\Tool; -use UseTheFork\Synapse\Integrations\OpenAIIntegration; -use UseTheFork\Synapse\Tools\SerperTool; -use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; -use UseTheFork\Synapse\ValueObject\SchemaRule; +use UseTheFork\Synapse\Agent;use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema;use UseTheFork\Synapse\Contracts\Integration;use UseTheFork\Synapse\Integrations\OpenAIIntegration;use UseTheFork\Synapse\Tools\Search\SerperTool;use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema;use UseTheFork\Synapse\ValueObject\SchemaRule; class SerperAgent extends Agent implements HasOutputSchema { diff --git a/docs/tools/packaged-tools.md b/docs/tools/packaged-tools.md index 7ca6886..b5fc649 100644 --- a/docs/tools/packaged-tools.md +++ b/docs/tools/packaged-tools.md @@ -16,7 +16,7 @@ SERPER_API_KEY= Then, include the `SerperTool` in your agent: ```php -use UseTheFork\Synapse\Tools\SerperTool; +use UseTheFork\Synapse\Tools\Search\SerperTool; protected function resolveTools(): array { @@ -38,8 +38,7 @@ SERPAPI_API_KEY= Then, include either the `SerpAPIGoogleSearchTool` or the `SerpAPIGoogleNewsTool` in your agent: ```php -use UseTheFork\Synapse\Tools\SerpAPIGoogleNewsTool; -use UseTheFork\Synapse\Tools\SerpAPIGoogleSearchTool; +use UseTheFork\Synapse\Tools\Search\SerpAPIGoogleNewsTool;use UseTheFork\Synapse\Tools\Search\SerpAPIGoogleSearchTool; protected function resolveTools(): array { @@ -64,7 +63,7 @@ FIRECRAWL_API_KEY= Then, include the `FirecrawlTool` in your agent: ```php -use UseTheFork\Synapse\Tools\FirecrawlTool; +use UseTheFork\Synapse\Tools\Scrape\FirecrawlTool; protected function resolveTools(): array { diff --git a/flake.lock b/flake.lock index 97e2f7c..b80007d 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1720546205, - "narHash": "sha256-boCXsjYVxDviyzoEyAk624600f3ZBo/DKtUdvMTpbGY=", + "lastModified": 1736955230, + "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", "owner": "ryantm", "repo": "agenix", - "rev": "de96bd907d5fbc3b14fc33ad37d1b9a3cb15edc6", + "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", "type": "github" }, "original": { @@ -65,11 +65,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1722555600, - "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=", + "lastModified": 1741352980, + "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "8471fe90ad337a8074e957b69ca4d0089218391d", + "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", "type": "github" }, "original": { @@ -86,11 +86,11 @@ ] }, "locked": { - "lastModified": 1719994518, - "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", + "lastModified": 1740872218, + "narHash": "sha256-ZaMw0pdoUKigLpv9HiNDH2Pjnosg7NBYMJlHTIsHEUo=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", + "rev": "3876f6b87db82f33775b1ef5ea343986105db764", "type": "github" }, "original": { @@ -101,11 +101,11 @@ }, "flake-root": { "locked": { - "lastModified": 1713493429, - "narHash": "sha256-ztz8JQkI08tjKnsTpfLqzWoKFQF4JGu2LRz8bkdnYUk=", + "lastModified": 1723604017, + "narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=", "owner": "srid", "repo": "flake-root", - "rev": "bc748b93b86ee76e2032eecda33440ceb2532fcd", + "rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e", "type": "github" }, "original": { @@ -196,15 +196,14 @@ "nixpkgs": [ "snow-blower", "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" + ] }, "locked": { - "lastModified": 1721042469, - "narHash": "sha256-6FPUl7HVtvRHCCBQne7Ylp4p+dpP3P/OYuzjztZ4s70=", + "lastModified": 1740915799, + "narHash": "sha256-JvQvtaphZNmeeV+IpHgNdiNePsIpHD5U/7QN5AeY44A=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "f451c19376071a90d8c58ab1a953c6e9840527fd", + "rev": "42b1ba089d2034d910566bf6b40830af6b8ec732", "type": "github" }, "original": { @@ -384,11 +383,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1722813957, - "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", "type": "github" }, "original": { @@ -400,29 +399,16 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1722555339, - "narHash": "sha256-uFf2QeW7eAHlYXuDktm9c25OxOyCoUOQmh5SZ9amE5Q=", - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1720386169, - "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "lastModified": 1740877520, + "narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "147dee35aab2193b174e4c0868bd80ead5ce755c", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", + "owner": "nix-community", + "repo": "nixpkgs.lib", "type": "github" } }, @@ -444,11 +430,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1722062969, - "narHash": "sha256-QOS0ykELUmPbrrUGmegAUlpmUFznDQeR4q7rFhl8eQg=", + "lastModified": 1741173522, + "narHash": "sha256-k7VSqvv0r1r53nUI/IfPHCppkUAddeXn843YlAC5DR0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b73c2221a46c13557b1b3be9c2070cc42cf01eb3", + "rev": "d69ab0d71b22fa1ce3dbeff666e6deb4917db049", "type": "github" }, "original": { @@ -460,27 +446,27 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1720957393, - "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "lastModified": 1735554305, + "narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=", "owner": "nixos", "repo": "nixpkgs", - "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-unstable", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "process-compose-flake": { "locked": { - "lastModified": 1718031437, - "narHash": "sha256-+RrlkAVZx0QhyeHAGFJnjST+/7Dc3zsDU3zAKXoDXaI=", + "lastModified": 1740324671, + "narHash": "sha256-djc+wRG9L70jlW95Ck4GKr7nTPp1drfsXshJkYZAd9s=", "owner": "Platonic-Systems", "repo": "process-compose-flake", - "rev": "9344fac44edced4c686721686a6ad904d067c546", + "rev": "2a17e49b8a5d32278ed77e4a881f992472be18a1", "type": "github" }, "original": { @@ -509,11 +495,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1722534706, - "narHash": "sha256-9iGOtUWy7yVjQ2fncExoQUrbF0cOKFqWYb8KRF9BSTU=", + "lastModified": 1741351018, + "narHash": "sha256-qvAEg/CtB88q8ArleCpc72Tp93FLy6oHsSVv8UoEAGI=", "owner": "use-the-fork", "repo": "snow-blower", - "rev": "e4c83258538c81b3d51c33b74b60a37ed594d1fd", + "rev": "83924471128e839fc08cebdac5ce2ea50606c92e", "type": "github" }, "original": { @@ -557,11 +543,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1721769617, - "narHash": "sha256-6Pqa0bi5nV74IZcENKYRToRNM5obo1EQ+3ihtunJ014=", + "lastModified": 1739829690, + "narHash": "sha256-mL1szCeIsjh6Khn3nH2cYtwO5YXG6gBiTw1A30iGeDU=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "8db8970be1fb8be9c845af7ebec53b699fe7e009", + "rev": "3d0579f5cc93436052d94b73925b48973a104204", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7b69d76..96f0721 100644 --- a/flake.nix +++ b/flake.nix @@ -93,6 +93,7 @@ }; services = { + aider.enable = true; }; integrations = { diff --git a/resources/views/Prompts/Rat/GetQueryPrompt.blade.php b/resources/views/Prompts/Rat/GetQueryPrompt.blade.php index 4e19d4d..61b8970 100644 --- a/resources/views/Prompts/Rat/GetQueryPrompt.blade.php +++ b/resources/views/Prompts/Rat/GetQueryPrompt.blade.php @@ -1,11 +1,16 @@ -## User input: {{ $question }} +### Question: {{ $question }} -## Response +### Content {{ $answer }} -## Instruction -Summarize the content with a focus on the last sentences to create a concise search query for Bing. Use search syntax to make the query specific and relevant for content verification. +### Instruction +I want to verify the content correctness of the given question, especially the last sentences. +Please summarize the content with the corresponding question. +This summarization will be used as a query to search with Bing search engine. +The query should be short but need to be specific to promise Bing can find related knowledge or pages. +You can also use search syntax to make the query short and clear enough for the search engine to find relevant language data. +Try to make the query as relevant as possible to the last few sentences in the content. @include('synapse::Parts.OutputSchema') diff --git a/resources/views/Prompts/Rat/ReflectAnswerPrompt.blade.php b/resources/views/Prompts/Rat/ReflectAnswerPrompt.blade.php new file mode 100644 index 0000000..281c321 --- /dev/null +++ b/resources/views/Prompts/Rat/ReflectAnswerPrompt.blade.php @@ -0,0 +1,16 @@ + + ### Question: {{ $question }} + + ### Answer: + {{ $answer }} + + ### Instruction + Give a title for the answer of the question. + And add a subtitle to each paragraph in the answer and output the final answer using markdown format. + This will make the answer to this question look more structured for better understanding. + + **IMPORTANT** + Try to keep the structure (multiple paragraphs with its subtitles) in the response and make it more structural for understanding. + + @include('synapse::Parts.OutputSchema') + diff --git a/resources/views/Prompts/Rat/ReviseAnswerPrompt.blade.php b/resources/views/Prompts/Rat/ReviseAnswerPrompt.blade.php new file mode 100644 index 0000000..c6253b6 --- /dev/null +++ b/resources/views/Prompts/Rat/ReviseAnswerPrompt.blade.php @@ -0,0 +1,25 @@ + + ### Existing Text in Wiki Web: + ``` + {{ $content }} + ``` + + ### Question: {{ $question }} + + ### Answer: + {{ $answer }} + + ### Instruction + I want to revise the answer according to retrieved related text of the question in WIKI pages. + You need to check whether the answer is correct. + If you find some errors in the answer, revise the answer to make it better. + If you find some necessary details are ignored, add it to make the answer more plausible according to the related text. + If you find the answer is right and do not need to add more details, just output the original answer directly. + + **IMPORTANT** + Try to keep the structure (multiple paragraphs with its subtitles) in the revised answer and make it more structural for understanding. + Add more details from retrieved text to the answer. + Split the paragraphs with \n\n characters. + + @include('synapse::Parts.OutputSchema') + diff --git a/src/Agent.php b/src/Agent.php index 991968e..34c4c71 100644 --- a/src/Agent.php +++ b/src/Agent.php @@ -80,7 +80,7 @@ public function handle(?array $input, ?array $extraAgentArgs = []): Message $this->pendingAgentTask = $this->pendingAgentTask->middleware()->executeEndThreadPipeline($this->pendingAgentTask); - return $this->pendingAgentTask->currentIteration()->getResponse(); + return $this->pendingAgentTask->getResponse(); } /** @@ -94,20 +94,23 @@ protected function doLoop(): PendingAgentTask $this->pendingAgentTask->middleware()->executeStartIterationPipeline($this->pendingAgentTask); $prompt = $this->getPrompt($this->pendingAgentTask); - // append the prompt chain and iteration memory so tool calls are included - $prompt = $prompt."\n".$this->pendingAgentTask->iterationMemory()->asInputs()['memoryWithMessages']; - $prompt = $this->pendingAgentTask->middleware()->executePromptGeneratedPipeline($prompt); $promptChain = $this->parsePrompt($prompt); + // append the prompt chain and iteration memory so tool calls are included + $promptChain = [ + ...$promptChain, + ...$this->pendingAgentTask->getToolCalls() + ]; + $promptChain = $this->pendingAgentTask->middleware()->executePromptParsedPipeline($promptChain); - $this->pendingAgentTask->currentIteration()->setPromptChain($promptChain); + $this->pendingAgentTask->setPromptChain($promptChain); // Create the Chat request we will be sending. $this->integration->handlePendingAgentTaskCompletion($this->pendingAgentTask); $this->pendingAgentTask->middleware()->executeIntegrationResponsePipeline($this->pendingAgentTask); - switch ($this->pendingAgentTask->currentIteration()->finishReason()) { + switch ($this->pendingAgentTask->getFinishReason()) { case FinishReason::TOOL_CALL: $this->pendingAgentTask->middleware()->executeStartToolCallPipeline($this->pendingAgentTask); $this->handleTools($this->pendingAgentTask); @@ -118,7 +121,7 @@ protected function doLoop(): PendingAgentTask return $this->pendingAgentTask; default: - throw new UnknownFinishReasonException("{$this->pendingAgentTask->currentIteration()->finishReason()} is not a valid finish reason."); + throw new UnknownFinishReasonException("{$this->pendingAgentTask->getFinishReason()} is not a valid finish reason."); } $this->pendingAgentTask->middleware()->executeEndIterationPipeline($this->pendingAgentTask); } @@ -219,7 +222,7 @@ protected function parsePrompt(string $prompt): array private function handleTools(PendingAgentTask $pendingAgentTask): void { - $response = $pendingAgentTask->currentIteration()->getResponse()->toArray(); + $response = $pendingAgentTask->getResponse()->toArray(); if (! empty($response['tool_call_id'])) { $toolResult = $this->executeToolCall($response, $pendingAgentTask); @@ -227,8 +230,7 @@ private function handleTools(PendingAgentTask $pendingAgentTask): void $response['tool_content'] = $toolResult; } - $pendingAgentTask->iterationMemory()->create(Message::make($response)); - $pendingAgentTask->currentIteration()->setResponse(Message::make($response)); + $pendingAgentTask->addToolCall(Message::make($response)); } /** diff --git a/src/AgentChain.php b/src/AgentChain.php index d08a373..785daf7 100644 --- a/src/AgentChain.php +++ b/src/AgentChain.php @@ -4,40 +4,10 @@ namespace UseTheFork\Synapse; - use UseTheFork\Synapse\AgentTask\PendingAgentChain; - use UseTheFork\Synapse\Traits\HasConfig; - use UseTheFork\Synapse\Traits\Makeable; use UseTheFork\Synapse\ValueObject\Message; - class AgentChain + abstract class AgentChain { - use Makeable; - use HasConfig; - - protected PendingAgentChain $pendingAgentChain; - protected $pipeline; - - public function __construct(array $agents) - { - foreach ($agents as $agent) { - if(! ($agent instanceof Agent)){ - throw new \Exception("Agent must be an instance of Agent"); - } - } - - $this->config()->add('persistInputs', []); - $this->config()->add('agents', collect($agents)); - $this->pendingAgentChain = $this->createPendingAgentChain(); - - } - - /** - * Create a new PendingAgentTask - */ - public function createPendingAgentChain(): PendingAgentChain - { - return new PendingAgentChain($this); - } /** * Handles the user input and extra agent arguments to retrieve the response. @@ -48,29 +18,5 @@ public function createPendingAgentChain(): PendingAgentChain * * @throws Throwable */ - public function handle(?array $input): Message - { - $this->config()->add('input', $input); - $this->config()->get('agents')->each(function ($agent) use ($input) { - $input = [ - ...$this->config()->get('input'), - ...$this->config()->get('persistInputs') - ]; - $response = $agent->handle($input); - $this->config()->add('input', $response->content()); - }); - - return Message::make([ - 'role' => 'agent', - 'finish_reason' => 'stop', - 'content' => $this->config()->get('input') - ]); - } - - public function persistInputs(array $inputs): static - { - $this->config()->add('persistInputs', $inputs); - - return $this; - } + abstract public function handle(?array $input, ?array $extraAgentArgs): Message; } diff --git a/src/AgentChains/RatAgentChain.php b/src/AgentChains/RatAgentChain.php new file mode 100644 index 0000000..88436ec --- /dev/null +++ b/src/AgentChains/RatAgentChain.php @@ -0,0 +1,78 @@ +searchTool = $searchTool; + $this->scrapeTool = $scrapeTool; + } + + public function handle(?array $input, ?array $extraAgentArgs = []): Message + { + + $ratDraftAgent = new RatDraftAgent; + $result = $ratDraftAgent->handle($input); + + $ratSplitAnswerAgent = new RatSplitAnswerAgent; + $result = $ratSplitAnswerAgent->handle([ + ...$input, + ...$result->content() + ]); + + $answer = str(''); + foreach ($result->content()['paragraphs'] as $value) { + + $answer = $answer->append("\n\n", $value); + + $getQueryAgent = new GetQueryAgent; + $result = $getQueryAgent->handle([ + ...$input, + 'answer' => $answer->toString() + ]); + + $searchResult = $this->searchTool->handle($result->content()['query']); + $searchResult = json_decode($searchResult, true); + + # Get the first Result scrape page and enhance + if(!empty($searchResult[0])){ + $scrapeResult = $this->scrapeTool->handle($searchResult[0]['link']); + + $getQueryAgent = new ReviseAnswerAgent; + $result = $getQueryAgent->handle([ + ...$input, + 'content' => $scrapeResult, + 'answer' => $answer->toString() + ]); + $answer = str($result->content()['answer']); + } + + } + + $reflectAnswerAgent = new ReflectAnswerAgent; + return $reflectAnswerAgent->handle([ + ...$input, + 'answer' => $answer->toString() + ]); + } + } diff --git a/src/AgentTask/PendingAgentTask.php b/src/AgentTask/PendingAgentTask.php index 55fde8b..d720686 100644 --- a/src/AgentTask/PendingAgentTask.php +++ b/src/AgentTask/PendingAgentTask.php @@ -8,28 +8,27 @@ use UseTheFork\Synapse\Agent; use UseTheFork\Synapse\AgentTask\StartTasks\BootTraits; use UseTheFork\Synapse\AgentTask\StartTasks\MergeProperties; -use UseTheFork\Synapse\Contracts\Memory; -use UseTheFork\Synapse\Memory\CollectionMemory; +use UseTheFork\Synapse\Enums\FinishReason; +use UseTheFork\Synapse\Traits\HasConfig; use UseTheFork\Synapse\Traits\HasMiddleware; +use UseTheFork\Synapse\ValueObject\Message; class PendingAgentTask { use HasMiddleware; + use hasConfig; protected Agent $agent; - protected CurrentIteration $currentIteration; protected Collection $inputs; - protected Memory $iterationMemory; + protected Message $response; + protected Collection $toolCalls; + protected array $tools = []; public function __construct(Agent $agent) { $this->agent = $agent; - $this->currentIteration = new CurrentIteration; - $this->iterationMemory = new CollectionMemory(); - $this->iterationMemory->boot(); - $this ->tap(new BootTraits) ->tap(new MergeProperties); @@ -75,6 +74,11 @@ public function addTool(string $key, array $value): void $this->tools[$key] = $value; } + public function addToolCall(Message $toolCallWithContent): void + { + $this->toolCalls->push($toolCallWithContent); + } + /** * Retrieve the agent associated with the current task. * @@ -85,14 +89,14 @@ public function agent(): Agent return $this->agent; } - /** - * Get the current iteration of the agent task. - * - * @return CurrentIteration|null The current iteration instance or null if not set. - */ - public function currentIteration(): ?CurrentIteration + public function getExtraAgentArgs(): array + { + return $this->config()->get('extraAgentArgs'); + } + + public function getFinishReason(): FinishReason { - return $this->currentIteration; + return FinishReason::from($this->response->finishReason()); } /** @@ -107,6 +111,26 @@ public function getInput(string $key): mixed return $this->inputs[$key] ?? null; } + public function getPromptChain(): array + { + return $this->config()->get('promptChain'); + } + + public function getResponse(): Message + { + return $this->response; + } + + public function setResponse(Message $message): void + { + $this->response = $message; + } + + public function getToolCalls(): array + { + return $this->toolCalls->all(); + } + /** * Get all inputs as an array. * @@ -127,23 +151,17 @@ public function inputs(): array */ public function reboot(array $inputs, array $extraAgentArgs = []): void { - $this->currentIteration = new CurrentIteration; - $this->currentIteration->setExtraAgentArgs($extraAgentArgs); + $this->config()->add('extraAgentArgs', $extraAgentArgs); $this->inputs = collect($inputs); - $this->iterationMemory()->clear(); + $this->toolCalls = collect(); $this->middleware()->executeStartThreadPipeline($this); } - /** - * Retrieve the current tasks memory instance. - * - * @return Memory The pending tasks memory instance. - */ - public function iterationMemory(): Memory + public function setPromptChain(array $promptChain): void { - return $this->iterationMemory; + $this->config()->add('promptChain', $promptChain); } /** diff --git a/src/Agents/Rat/ReflectAnswerAgent.php b/src/Agents/Rat/ReflectAnswerAgent.php new file mode 100644 index 0000000..d38f6a1 --- /dev/null +++ b/src/Agents/Rat/ReflectAnswerAgent.php @@ -0,0 +1,27 @@ + 'answer', + 'rules' => 'required|string', + 'description' => 'Your answer.', + ]), + ]; + } +} diff --git a/src/Agents/Rat/ReviseAnswerAgent.php b/src/Agents/Rat/ReviseAnswerAgent.php new file mode 100644 index 0000000..72e4b61 --- /dev/null +++ b/src/Agents/Rat/ReviseAnswerAgent.php @@ -0,0 +1,27 @@ + 'answer', + 'rules' => 'required|string', + 'description' => 'Your answer.', + ]), + ]; + } +} diff --git a/src/Contracts/Tool/ScrapeTool.php b/src/Contracts/Tool/ScrapeTool.php new file mode 100644 index 0000000..fbdeb33 --- /dev/null +++ b/src/Contracts/Tool/ScrapeTool.php @@ -0,0 +1,12 @@ +doCompletionRequest( - prompt: $pendingAgentTask->currentIteration()->getPromptChain(), + prompt: $pendingAgentTask->getPromptChain(), tools: $pendingAgentTask->tools(), - extraAgentArgs: $pendingAgentTask->currentIteration()->getExtraAgentArgs() + extraAgentArgs: $pendingAgentTask->getExtraAgentArgs() ); - $pendingAgentTask->currentIteration()->setResponse($message); + $pendingAgentTask->setResponse($message); return $pendingAgentTask; } diff --git a/src/Integrations/Connectors/OpenAI/Requests/ChatRequest.php b/src/Integrations/Connectors/OpenAI/Requests/ChatRequest.php index a0a2d19..4c877c2 100644 --- a/src/Integrations/Connectors/OpenAI/Requests/ChatRequest.php +++ b/src/Integrations/Connectors/OpenAI/Requests/ChatRequest.php @@ -24,9 +24,23 @@ public function __construct( public readonly array $extraAgentArgs = [] ) {} - public function resolveEndpoint(): string + public function createDtoFromResponse(Response $response): Message { - return '/chat/completions'; + $data = $response->array(); + $message = $data['choices'][0]['message'] ?? []; + $message['finish_reason'] = $data['choices'][0]['finish_reason'] ?? ''; + if (isset($message['tool_calls'])) { + + $message['tool_call_id'] = $message['tool_calls'][0]['id']; + $message['tool_name'] = $message['tool_calls'][0]['function']['name']; + $message['tool_arguments'] = $message['tool_calls'][0]['function']['arguments']; + unset($message['tool_calls']); + + // Open AI sends a tool call via assistant role. We change it to tool here to make processing easier. + $message['role'] = Role::TOOL; + } + + return Message::make($message); } public function defaultBody(): array @@ -130,22 +144,8 @@ private function formatImageMessage(Message $message): array return $payload; } - public function createDtoFromResponse(Response $response): Message + public function resolveEndpoint(): string { - $data = $response->array(); - $message = $data['choices'][0]['message'] ?? []; - $message['finish_reason'] = $data['choices'][0]['finish_reason'] ?? ''; - if (isset($message['tool_calls'])) { - - $message['tool_call_id'] = $message['tool_calls'][0]['id']; - $message['tool_name'] = $message['tool_calls'][0]['function']['name']; - $message['tool_arguments'] = $message['tool_calls'][0]['function']['arguments']; - unset($message['tool_calls']); - - // Open AI sends a tool call via assistant role. We change it to tool here to make processing easier. - $message['role'] = Role::TOOL; - } - - return Message::make($message); + return '/chat/completions'; } } diff --git a/src/Integrations/OllamaIntegration.php b/src/Integrations/OllamaIntegration.php index 0252ca0..48a1f7f 100644 --- a/src/Integrations/OllamaIntegration.php +++ b/src/Integrations/OllamaIntegration.php @@ -42,12 +42,12 @@ public function handlePendingAgentTaskCompletion( $ollamaAIConnector = new OllamaAIConnector; $message = $ollamaAIConnector->doCompletionRequest( - prompt: $pendingAgentTask->currentIteration()->getPromptChain(), + prompt: $pendingAgentTask->getPromptChain(), tools: $pendingAgentTask->tools(), - extraAgentArgs: $pendingAgentTask->currentIteration()->getExtraAgentArgs() + extraAgentArgs: $pendingAgentTask->getExtraAgentArgs() ); - $pendingAgentTask->currentIteration()->setResponse($message); + $pendingAgentTask->setResponse($message); return $pendingAgentTask; } diff --git a/src/Integrations/OpenAIIntegration.php b/src/Integrations/OpenAIIntegration.php index a62dfe0..ee74c01 100644 --- a/src/Integrations/OpenAIIntegration.php +++ b/src/Integrations/OpenAIIntegration.php @@ -13,23 +13,9 @@ class OpenAIIntegration implements Integration { - /** - * {@inheritdoc} - */ - public function handlePendingAgentTaskCompletion( - PendingAgentTask $pendingAgentTask - ): PendingAgentTask { - - $openAIConnector = new OpenAIConnector; - $message = $openAIConnector->doCompletionRequest( - prompt: $pendingAgentTask->currentIteration()->getPromptChain(), - tools: $pendingAgentTask->tools(), - extraAgentArgs: $pendingAgentTask->currentIteration()->getExtraAgentArgs() - ); - - $pendingAgentTask->currentIteration()->setResponse($message); - - return $pendingAgentTask; + public function createEmbeddings(string $input, array $extraAgentArgs = []): EmbeddingResponse + { + return $this->send(new EmbeddingsRequest($input, $extraAgentArgs))->dto(); } /** @@ -47,8 +33,22 @@ public function handleCompletion( ); } - public function createEmbeddings(string $input, array $extraAgentArgs = []): EmbeddingResponse - { - return $this->send(new EmbeddingsRequest($input, $extraAgentArgs))->dto(); + /** + * {@inheritdoc} + */ + public function handlePendingAgentTaskCompletion( + PendingAgentTask $pendingAgentTask + ): PendingAgentTask { + + $openAIConnector = new OpenAIConnector; + $message = $openAIConnector->doCompletionRequest( + prompt: $pendingAgentTask->getPromptChain(), + tools: $pendingAgentTask->tools(), + extraAgentArgs: $pendingAgentTask->getExtraAgentArgs() + ); + + $pendingAgentTask->setResponse($message); + + return $pendingAgentTask; } } diff --git a/src/Memory/DatabaseMemory.php b/src/Memory/DatabaseMemory.php index 50b3c17..6cafc51 100644 --- a/src/Memory/DatabaseMemory.php +++ b/src/Memory/DatabaseMemory.php @@ -61,7 +61,7 @@ public function asInputs(): array public function boot(?PendingAgentTask $pendingAgentTask = null): void { if(!empty($this->memoryId)){ - $this->agentMemory = AgentMemory::firstOrNew($this->memoryId); + $this->agentMemory = AgentMemory::firstOrNew(['id' => $this->memoryId]); } else { $this->agentMemory = new AgentMemory; $this->agentMemory->save(); diff --git a/src/Models/AgentMemory.php b/src/Models/AgentMemory.php index 9ec454c..d5edad8 100644 --- a/src/Models/AgentMemory.php +++ b/src/Models/AgentMemory.php @@ -16,6 +16,7 @@ class AgentMemory extends Model protected $fillable = [ 'type', ]; + protected $table = 'synapse_agent_memories'; public function messages(): HasMany { diff --git a/src/Models/Message.php b/src/Models/Message.php index df83c62..dd5a457 100644 --- a/src/Models/Message.php +++ b/src/Models/Message.php @@ -9,6 +9,10 @@ class Message extends Model { + + protected $casts = [ + 'image' => 'array', + ]; protected $fillable = [ 'assistant_id', 'role', @@ -19,10 +23,7 @@ class Message extends Model 'tool_content', 'image', ]; - - protected $attributes = [ - 'image' => 'array', - ]; + protected $table = 'synapse_messages'; public function assistant() { diff --git a/src/Services/Firecrawl/Requests/FirecrawlRequest.php b/src/Services/Firecrawl/Requests/FirecrawlRequest.php index f5c3993..8f0f8cb 100644 --- a/src/Services/Firecrawl/Requests/FirecrawlRequest.php +++ b/src/Services/Firecrawl/Requests/FirecrawlRequest.php @@ -17,43 +17,27 @@ class FirecrawlRequest extends Request implements HasBody /** * @param string $url The URL to be used for extraction. - * @param string $extractionPrompt The extraction prompt to be used. */ public function __construct( - public readonly string $url, - public readonly string $extractionPrompt + public readonly string $url ) {} /** * {@inheritdoc} */ - public function resolveEndpoint(): string + public function defaultBody(): array { - return '/v1/scrape'; + return [ + 'url' => $this->url, + 'formats' => ['markdown'] + ]; } /** * {@inheritdoc} */ - public function defaultBody(): array + public function resolveEndpoint(): string { - return [ - 'url' => $this->url, - 'formats' => ['extract'], - 'extract' => [ - 'schema' => [ - 'type' => 'object', - 'properties' => [ - 'result' => [ - 'description' => "detailed markdown list related to **{$this->extractionPrompt}** if no relevant content is found return `No Relevant Content On Page` DO NOT respond with only a URL or Link.", - 'type' => 'string', - ], - ], - 'required' => [ - 'result', - ], - ], - ], - ]; + return '/v1/scrape'; } } diff --git a/src/Tools/FirecrawlTool.php b/src/Tools/Scrape/FirecrawlTool.php similarity index 76% rename from src/Tools/FirecrawlTool.php rename to src/Tools/Scrape/FirecrawlTool.php index 65cc8c0..f43f41b 100644 --- a/src/Tools/FirecrawlTool.php +++ b/src/Tools/Scrape/FirecrawlTool.php @@ -2,13 +2,15 @@ declare(strict_types=1); -namespace UseTheFork\Synapse\Tools; +namespace UseTheFork\Synapse\Tools\Scrape; +use UseTheFork\Synapse\Contracts\Tool\ScrapeTool; use UseTheFork\Synapse\Exceptions\MissingApiKeyException; use UseTheFork\Synapse\Services\Firecrawl\FirecrawlConnector; use UseTheFork\Synapse\Services\Firecrawl\Requests\FirecrawlRequest; +use UseTheFork\Synapse\Tools\BaseTool; -final class FirecrawlTool extends BaseTool +final class FirecrawlTool extends BaseTool implements ScrapeTool { private string $apiKey; @@ -25,15 +27,14 @@ public function __construct() * Useful for getting the contents of a webpage. * * @param string $url The full URL to get the contents from. - * @param string $extractionPrompt A prompt describing what information to extract from the page + * */ public function handle( - string $url, - string $extractionPrompt, + string $url ): string { $firecrawlConnector = new FirecrawlConnector($this->apiKey); - $firecrawlRequest = new FirecrawlRequest($url, $extractionPrompt); + $firecrawlRequest = new FirecrawlRequest($url); $results = $firecrawlConnector->send($firecrawlRequest)->array(); @@ -52,8 +53,8 @@ private function parseResults(array $results): string $snippets->push("Meta Description: {$results['data']['extract']['metadata']['description']}"); } - if (! empty($results['data']['extract']['result'])) { - $snippets->push("Content:\n {$results['data']['extract']['result']}"); + if (! empty($results['data']['markdown'])) { + $snippets->push("Content:\n\n {$results['data']['markdown']}"); } if ($snippets->isEmpty()) { diff --git a/src/Tools/SerpAPIGoogleNewsTool.php b/src/Tools/Search/SerpAPIGoogleNewsTool.php similarity index 66% rename from src/Tools/SerpAPIGoogleNewsTool.php rename to src/Tools/Search/SerpAPIGoogleNewsTool.php index 46a6eb3..3d87f70 100644 --- a/src/Tools/SerpAPIGoogleNewsTool.php +++ b/src/Tools/Search/SerpAPIGoogleNewsTool.php @@ -2,15 +2,17 @@ declare(strict_types=1); -namespace UseTheFork\Synapse\Tools; +namespace UseTheFork\Synapse\Tools\Search; use Illuminate\Support\Arr; use UseTheFork\Synapse\Contracts\Tool; +use UseTheFork\Synapse\Contracts\Tool\SearchTool; use UseTheFork\Synapse\Exceptions\MissingApiKeyException; use UseTheFork\Synapse\Services\SerpApi\Requests\SerpApiSearchRequest; use UseTheFork\Synapse\Services\SerpApi\SerpApiConnector; +use UseTheFork\Synapse\Tools\BaseTool; -final class SerpAPIGoogleNewsTool extends BaseTool implements Tool +final class SerpAPIGoogleNewsTool extends BaseTool implements Tool, SearchTool { private string $apiKey; @@ -30,13 +32,14 @@ public function __construct() */ public function handle( string $query, + ?string $searchType = 'search', + ?int $numberOfResults = 10 ): string { $serpApiConnector = new SerpApiConnector($this->apiKey); $serpApiSearchRequest = new SerpApiSearchRequest($query, 0, 'google_news'); $results = $serpApiConnector->send($serpApiSearchRequest)->array(); - return $this->parseResults($results); } @@ -50,30 +53,30 @@ private function parseResults(array $results): string foreach ($newsResults as $newResult) { $result = collect(); - $result->push("```text\n### Title: {$newResult['title']}"); + $result['title'] = $newResult['title']; if (! empty($newResult['stories'])) { foreach (Arr::get($newResult, 'stories', []) as $story) { - - $result->push("#### Story: {$story['title']}"); - $result->push("- Date: {$story['date']}"); - $result->push("- Link: {$story['link']}"); + $result['stories'][] = [ + 'title' => $story['title'], + 'date' => $story['date'], + 'link' => $story['link'], + ]; } } if (! empty($newResult['source'])) { - $result->push("- Date: {$newResult['date']}"); - $result->push("- Link: {$newResult['link']}"); + $result['date'] = $newResult['date']; + $result['link'] = $newResult['link']; } - $result->push("```\n"); - $snippets->push($result->implode("\n")); + $snippets->push($result); } } if ($snippets->isEmpty()) { - return 'No good Google News Result found'; + return json_encode(['title' => 'No Good Google Search Result was found', 'snippet' => '', 'link' => ''], JSON_PRETTY_PRINT); } - return $snippets->implode("\n"); + return json_encode($snippets, JSON_PRETTY_PRINT); } } diff --git a/src/Tools/SerpAPIGoogleSearchTool.php b/src/Tools/Search/SerpAPIGoogleSearchTool.php similarity index 75% rename from src/Tools/SerpAPIGoogleSearchTool.php rename to src/Tools/Search/SerpAPIGoogleSearchTool.php index 2080ed6..864d131 100644 --- a/src/Tools/SerpAPIGoogleSearchTool.php +++ b/src/Tools/Search/SerpAPIGoogleSearchTool.php @@ -2,16 +2,18 @@ declare(strict_types=1); -namespace UseTheFork\Synapse\Tools; +namespace UseTheFork\Synapse\Tools\Search; use Illuminate\Support\Arr; use Illuminate\Support\Str; use UseTheFork\Synapse\Contracts\Tool; +use UseTheFork\Synapse\Contracts\Tool\SearchTool; use UseTheFork\Synapse\Exceptions\MissingApiKeyException; use UseTheFork\Synapse\Services\SerpApi\Requests\SerpApiSearchRequest; use UseTheFork\Synapse\Services\SerpApi\SerpApiConnector; +use UseTheFork\Synapse\Tools\BaseTool; -final class SerpAPIGoogleSearchTool extends BaseTool implements Tool +final class SerpAPIGoogleSearchTool extends BaseTool implements Tool, SearchTool { private string $apiKey; @@ -32,7 +34,8 @@ public function __construct() */ public function handle( string $query, - int $numberOfResults = 10, + ?string $searchType = 'search', + ?int $numberOfResults = 10 ): string { $serpApiConnector = new SerpApiConnector($this->apiKey); @@ -54,6 +57,7 @@ private function parseResults(array $results): string $description = Arr::get($knowledgeGraph, 'description'); if ($description) { $snippets->push($description); + $snippets->push(['type' => 'Knowledge Graph Description', 'value' => $description]); } foreach ($knowledgeGraph as $key => $value) { if ( @@ -64,7 +68,7 @@ private function parseResults(array $results): string ! Str::endsWith($key, '_link') && ! Str::startsWith($value, 'http') ) { - $snippets->push("{$title} {$key}: {$value}."); + $snippets->push(['type' => 'Knowledge Graph Attribute', 'title' => $title, 'key' => $key, 'value' => $value]); } } } @@ -73,14 +77,14 @@ private function parseResults(array $results): string $organicResults = Arr::get($results, 'organic_results'); foreach ($organicResults as $organicResult) { - $snippets->push("```text\nTitle: {$organicResult['title']}\nLink: {$organicResult['link']}\nSnippet: {$organicResult['snippet']}\n```"); + $snippets->push(['type' => 'Organic', 'title' => $organicResult['title'], 'link' => $organicResult['link'], 'snippet' => $organicResult['snippet']]); } } if ($snippets->isEmpty()) { - return 'No good Google Search Result was found'; + return json_encode(['title' => 'No Good Google Search Result was found', 'snippet' => '', 'link' => ''], JSON_PRETTY_PRINT); } - return $snippets->implode("\n"); + return json_encode($snippets, JSON_PRETTY_PRINT); } } diff --git a/src/Tools/SerperTool.php b/src/Tools/Search/SerperTool.php similarity index 53% rename from src/Tools/SerperTool.php rename to src/Tools/Search/SerperTool.php index b9efc65..4e374ea 100644 --- a/src/Tools/SerperTool.php +++ b/src/Tools/Search/SerperTool.php @@ -2,14 +2,18 @@ declare(strict_types=1); -namespace UseTheFork\Synapse\Tools; +namespace UseTheFork\Synapse\Tools\Search; use Illuminate\Support\Arr; +use Saloon\Exceptions\Request\FatalRequestException; +use Saloon\Exceptions\Request\RequestException; +use UseTheFork\Synapse\Contracts\Tool\SearchTool; use UseTheFork\Synapse\Exceptions\MissingApiKeyException; use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; use UseTheFork\Synapse\Services\Serper\SerperConnector; +use UseTheFork\Synapse\Tools\BaseTool; -final class SerperTool extends BaseTool +final class SerperTool extends BaseTool implements SearchTool { private string $apiKey; @@ -17,7 +21,7 @@ public function __construct() { $this->apiKey = config('synapse.services.serper.key'); - if(empty($this->apiKey)) { + if (empty($this->apiKey)) { throw new MissingApiKeyException('API (SERPER_API_KEY) key is required.'); } } @@ -25,15 +29,17 @@ public function __construct() /** * Search Google using a query. * - * @param string $query the search query to execute. - * @param string $searchType the type of search must be one of `search`, `places`, `news`. (usually search). - * @param int $numberOfResults the number of results to return must be one of `10`, `20`, `30`, `40`, `50` (usually `10`). + * @param string $query the search query to execute. + * @param string|null $searchType the type of search must be one of `search`, `places`, `news`. (usually search). + * @param int|null $numberOfResults the number of results to return must be one of `10`, `20`, `30`, `40`, `50` (usually `10`). * + * @throws FatalRequestException + * @throws RequestException */ public function handle( string $query, - string $searchType = 'search', - int $numberOfResults = 10, + ?string $searchType = 'search', + ?int $numberOfResults = 10 ): string { $serperConnector = new SerperConnector($this->apiKey); @@ -51,28 +57,29 @@ private function parseResults(array $results): string $title = Arr::get($results, 'knowledgeGraph.title'); $entityType = Arr::get($results, 'knowledgeGraph.type'); if ($entityType) { - $snippets->push("{$title}: {$entityType}"); + $snippets->push(['type' => 'Knowledge Graph title', "{$title}" => "{$entityType}"]); } $description = Arr::get($results, 'knowledgeGraph.description'); if ($description) { $snippets->push($description); + $snippets->push(['type' => 'Knowledge Graph Description', 'value' => $description]); } foreach (Arr::get($results, 'knowledgeGraph.attributes', []) as $key => $value) { - $snippets->push("{$title} {$key}: {$value}"); + $snippets->push(['type' => 'Knowledge Graph Attribute', 'title' => $title, 'key' => $key, 'value' => $value]); } } if (! empty($results['organic'])) { foreach ($results['organic'] as $value) { - $snippets->push("```text\nTitle: {$value['title']}\nLink: {$value['link']}\nSnippet: {$value['snippet']}\n```"); + $snippets->push(['type' => 'Organic', 'title' => $value['title'], 'link' => $value['link'], 'snippet' => $value['snippet']]); } } if ($snippets->isEmpty()) { - return 'No good Google Search Result was found'; + return json_encode(['title' => 'No Good Google Search Result was found', 'snippet' => '', 'link' => ''], JSON_PRETTY_PRINT); } - return $snippets->implode("\n"); + return json_encode($snippets, JSON_PRETTY_PRINT); } } diff --git a/src/Traits/Agent/LogsAgentActivity.php b/src/Traits/Agent/LogsAgentActivity.php index 6007e56..b99aa0c 100644 --- a/src/Traits/Agent/LogsAgentActivity.php +++ b/src/Traits/Agent/LogsAgentActivity.php @@ -45,8 +45,7 @@ protected function logStartThread(PendingAgentTask $pendingAgentTask): void protected function logStartIteration(PendingAgentTask $pendingAgentTask): void { $inputs = $pendingAgentTask->inputs(); - $iterationCount = $pendingAgentTask->currentIteration()->getIterationCount(); - Log::debug("Start Iteration {$iterationCount}", $inputs); + Log::debug("Start Iteration", $inputs); } /** @@ -56,35 +55,34 @@ protected function logStartIteration(PendingAgentTask $pendingAgentTask): void */ protected function logIntegrationResponse(PendingAgentTask $pendingAgentTask): void { - Log::debug("Finished Integration with {$pendingAgentTask->currentIteration()->finishReason()->value}"); + Log::debug("Finished Integration with {$pendingAgentTask->getResponse()->finishReason()}"); } protected function logStartToolCall(PendingAgentTask $pendingAgentTask): void { - $currentMessage = $pendingAgentTask->currentIteration()->getResponse()->toArray(); + $currentMessage = $pendingAgentTask->getResponse()->toArray(); Log::debug("Entering Tool Call: {$currentMessage['tool_name']}", $currentMessage); } protected function logAgentFinish(PendingAgentTask $pendingAgentTask): void { - $currentMessage = $pendingAgentTask->currentIteration()->getResponse()->toArray(); + $currentMessage = $pendingAgentTask->getResponse()->toArray(); Log::debug('Agent Finished', $currentMessage); } protected function logEndIteration(PendingAgentTask $pendingAgentTask): void { - $currentMessage = $pendingAgentTask->currentIteration()->getResponse(); - if ($currentMessage) { - $iterationCount = $pendingAgentTask->currentIteration()->getIterationCount(); - Log::debug("End Iteration {$iterationCount}", $currentMessage->toArray()); + $currentMessage = $pendingAgentTask->getResponse(); + if ($currentMessage->finishReason() == 'tool_calls') { + Log::debug("End Iteration", $currentMessage->toArray()); } } protected function logEndThread(PendingAgentTask $pendingAgentTask): void { $inputs = $pendingAgentTask->inputs(); - $currentMessage = $pendingAgentTask->currentIteration()->getResponse()->toArray(); + $currentMessage = $pendingAgentTask->getResponse()->toArray(); Log::debug('End Thread', [ 'inputs' => $inputs, @@ -94,7 +92,7 @@ protected function logEndThread(PendingAgentTask $pendingAgentTask): void protected function logEndToolCall(PendingAgentTask $pendingAgentTask): void { - $currentMessage = $pendingAgentTask->currentIteration()->getResponse()->toArray(); + $currentMessage = $pendingAgentTask->getResponse()->toArray(); Log::debug("Finished Tool Call: {$currentMessage['tool_name']}", $currentMessage); } } diff --git a/src/Traits/Agent/ManagesMemory.php b/src/Traits/Agent/ManagesMemory.php index 92f7fbd..b778ba5 100644 --- a/src/Traits/Agent/ManagesMemory.php +++ b/src/Traits/Agent/ManagesMemory.php @@ -32,9 +32,7 @@ public function addMessageToMemory(Message $message): void public function bootManagesMemory(PendingAgentTask $pendingAgentTask): void { $this->middleware()->onBootAgent(fn () => $this->initializeMemory($pendingAgentTask), 'initializeMemory'); - $this->middleware()->onStartThread(fn () => $this->addUserInputToMemoryPipeline($pendingAgentTask), 'memoryStartThread'); $this->middleware()->onStartIteration(fn () => $this->loadMemory($pendingAgentTask), 'loadMemory'); - $this->middleware()->onEndIteration(fn () => $this->addMessageToMemoryPipeline($pendingAgentTask), 'memoryEndIteration'); $this->middleware()->onAgentFinish(fn () => $this->addMessageToMemoryPipeline($pendingAgentTask), 'memoryAgentFinish'); } @@ -54,22 +52,6 @@ public function resolveMemory(): Memory throw new MissingResolverException('ManagesMemory', 'resolveMemory'); } - /** - * Adds a user message to the current memory - * - * @param PendingAgentTask $pendingAgentTask The message to add to the memory. - */ - protected function addUserInputToMemoryPipeline(PendingAgentTask $pendingAgentTask): PendingAgentTask - { - $input = $pendingAgentTask->getInput('input'); - $this->memory->create(Message::make([ - 'role' => 'user', - 'content' => $input, - ])); - - return $pendingAgentTask; - } - public function loadMemory(PendingAgentTask $pendingAgentTask): PendingAgentTask { $payload = $this->memory->asInputs(); @@ -87,7 +69,7 @@ public function loadMemory(PendingAgentTask $pendingAgentTask): PendingAgentTask */ protected function addMessageToMemoryPipeline(PendingAgentTask $pendingAgentTask): PendingAgentTask { - $message = $pendingAgentTask->currentIteration()->getResponse(); + $message = $pendingAgentTask->getResponse(); $this->memory->create($message); return $pendingAgentTask; diff --git a/src/Traits/Agent/ManagesTools.php b/src/Traits/Agent/ManagesTools.php index 14148d8..6b9a28f 100644 --- a/src/Traits/Agent/ManagesTools.php +++ b/src/Traits/Agent/ManagesTools.php @@ -222,6 +222,7 @@ public function call(PendingAgentTask $pendingAgentTask, string $toolName, ?arra if ( ($parameter_type = $reflectionParameter->getType()) !== null && ! $parameter_type->isBuiltin() && + ! $reflectionParameter->isOptional() && enum_exists($parameter_type->getName()) ) { $params[$reflectionParameter->name] = $parameter_type->getName()::tryFrom($arguments[$reflectionParameter->name]) ?? $reflectionParameter->getDefaultValue(); @@ -239,14 +240,14 @@ enum_exists($parameter_type->getName()) return $tool->handle(...$params); } - private function sanitizeToolParam($value, $type): float|bool|int|string + private function sanitizeToolParam($value, $type): mixed { return match ($type) { 'int' => (int) $value, - 'float' => (float) $value, - 'double' => (float) $value, + 'float', 'double' => (float) $value, 'bool' => (bool) $value, 'string' => (string) $value, + default => $value, }; } } diff --git a/src/Traits/Agent/ValidatesOutputSchema.php b/src/Traits/Agent/ValidatesOutputSchema.php index fbefb8a..6919d9b 100644 --- a/src/Traits/Agent/ValidatesOutputSchema.php +++ b/src/Traits/Agent/ValidatesOutputSchema.php @@ -1,192 +1,191 @@ middleware()->onStartThread(fn (PendingAgentTask $pendingAgentTask) => $this->addOutputSchema($pendingAgentTask), 'addOutputSchema'); + $this->middleware()->onEndThread(fn (PendingAgentTask $pendingAgentTask) => $this->doValidateOutputSchema($pendingAgentTask), 'doValidateOutputSchema', PipeOrder::LAST); + } /** - * Indicates if the agent has an output schema. + * @throws MissingResolverException */ - trait ValidatesOutputSchema + public function addOutputSchema(PendingAgentTask $pendingAgentTask): PendingAgentTask { - use HasMiddleware; - - /** - * The maximum number "loops" that this Validation should run . - */ - protected int $maximumValidationIterations = 5; - - /** - * sets the initial output schema type this agent will use. - */ - public function bootValidatesOutputSchema(): void - { - $this->middleware()->onStartThread(fn(PendingAgentTask $pendingAgentTask) => $this->addOutputSchema($pendingAgentTask), 'addOutputSchema'); - $this->middleware()->onEndThread(fn(PendingAgentTask $pendingAgentTask) => $this->doValidateOutputSchema($pendingAgentTask), 'doValidateOutputSchema', PipeOrder::LAST); - } + $pendingAgentTask->addInput('outputSchema', $this->getOutputSchema()); + + return $pendingAgentTask; + } - /** - * @throws MissingResolverException - */ - public function addOutputSchema(PendingAgentTask $pendingAgentTask): PendingAgentTask - { - $pendingAgentTask->addInput('outputSchema', $this->getOutputSchema()); - return $pendingAgentTask; + /** + * Retrieves the output rules as a JSON string. + * + * @return string|null The output rules encoded as a JSON string. Returns null if there are no output rules. + * + * @throws MissingResolverException + */ + public function getOutputSchema(): ?string + { + $outputParserPromptPart = []; + foreach ($this->resolveOutputSchema() as $rule) { + $outputParserPromptPart[$rule->getName()] = "({$rule->getRules()}) {$rule->getDescription()}"; } - /** - * Retrieves the output rules as a JSON string. - * - * @return string|null The output rules encoded as a JSON string. Returns null if there are no output rules. - * @throws MissingResolverException - */ - public function getOutputSchema(): ?string - { - $outputParserPromptPart = []; - foreach ($this->resolveOutputSchema() as $rule) { - $outputParserPromptPart[$rule->getName()] = "({$rule->getRules()}) {$rule->getDescription()}"; - } + return "```json\n".json_encode($outputParserPromptPart, JSON_PRETTY_PRINT)."\n```"; + } - return "```json\n" . json_encode($outputParserPromptPart, JSON_PRETTY_PRINT) . "\n```"; - } + /** + * Sets the output rules for validation. + * + * @return array + * + * @throws MissingResolverException + */ + public function resolveOutputSchema(): array + { + throw new MissingResolverException('ValidatesOutputSchema', 'resolveOutputSchema'); + } - /** - * Sets the output rules for validation. - * - * @return array - * @throws MissingResolverException - */ - public function resolveOutputSchema(): array - { - throw new MissingResolverException('ValidatesOutputSchema', 'resolveOutputSchema'); - } + /** + * Performs validation on the given response. + * + * @param PendingAgentTask $pendingAgentTask The response to validate. + * @return PendingAgentTask If validation passes, it returns the validated response. Otherwise, it enters a loop and performs revalidation. + * + * @throws Throwable + */ + public function doValidateOutputSchema(PendingAgentTask $pendingAgentTask): PendingAgentTask + { - /** - * Performs validation on the given response. - * - * @param PendingAgentTask $pendingAgentTask The response to validate. - * - * @return PendingAgentTask If validation passes, it returns the validated response. Otherwise, it enters a loop and performs revalidation. - * - * @throws Throwable - */ - public function doValidateOutputSchema(PendingAgentTask $pendingAgentTask): PendingAgentTask - { - - $response = $pendingAgentTask->currentIteration()->getResponse()->content(); - - $outputSchema = []; - collect($this->resolveOutputSchema())->each(function ($rule) use (&$outputSchema): void { - $outputSchema[$rule->getName()] = $rule->getRules(); - }); - - for ($i = 1; $i <= $this->maximumValidationIterations; $i++) { - $result = $this->parseResponse($response); - $errorsAsString = ''; - if (!empty($result)) { - $validator = Validator::make($result, $outputSchema); - if (!$validator->fails()) { - - $currentResponse = $pendingAgentTask->currentIteration()->getResponse(); - $updatedResponse = Message::make([ - ...$currentResponse->toArray(), - 'content' => $validator->validated(), - ]); - $pendingAgentTask->currentIteration()->setResponse($updatedResponse); - - return $pendingAgentTask; - } - - $errorsFlat = collect(); - $errors = $validator->errors()->messages(); - foreach ($errors as $error) { - $errorsFlat->push(implode(PHP_EOL, $error)); - } - $errorsFlat = $errorsFlat->implode(PHP_EOL); - $errorsAsString = $errorsFlat . "\n\n"; + $response = $pendingAgentTask->getResponse()->content(); + + $outputSchema = []; + collect($this->resolveOutputSchema())->each(function ($rule) use (&$outputSchema): void { + $outputSchema[$rule->getName()] = $rule->getRules(); + }); + + for ($i = 1; $i <= $this->maximumValidationIterations; $i++) { + $result = $this->parseResponse($response); + $errorsAsString = ''; + if (! empty($result)) { + $validator = Validator::make($result, $outputSchema); + if (! $validator->fails()) { + + $currentResponse = $pendingAgentTask->getResponse(); + $updatedResponse = Message::make([ + ...$currentResponse->toArray(), + 'content' => $validator->validated(), + ]); + $pendingAgentTask->setResponse($updatedResponse); + + return $pendingAgentTask; } - $response = $this->doRevalidate($response, $errorsAsString); - //since all integrations return a Message value object we need to grab the content - $response = $response->currentIteration()->getResponse()->content(); + $errorsFlat = collect(); + $errors = $validator->errors()->messages(); + foreach ($errors as $error) { + $errorsFlat->push(implode(PHP_EOL, $error)); + } + $errorsFlat = $errorsFlat->implode(PHP_EOL); + $errorsAsString = $errorsFlat."\n\n"; } + $response = $this->doRevalidate($response, $errorsAsString); - throw new MaximumIterationsException($this->maximumValidationIterations); + //since all integrations return a Message value object we need to grab the content + $response = $response->getResponse()->content(); } - /** - * Parses the input response and returns it as an associative array. - * - * @param string $input The input response to parse. - * - * @return array|null The parsed response as an associative array, or null if parsing fails. - */ - protected function parseResponse(string $input): ?array - { - - # we attempt to Decode the Json in a few ways. It's best to give all models a chance before failing. - $jsonFormat = json_decode( - str($input)->replace([ - '```json', - '```', - ], '')->toString(), TRUE - ); - - if(!empty($jsonFormat)){ - return $jsonFormat; - } + throw new MaximumIterationsException($this->maximumValidationIterations); + } - return json_decode( - str($input)->replace([ - '```', - '```', - ], '')->toString(), TRUE - ); - } + /** + * Parses the input response and returns it as an associative array. + * + * @param string $input The input response to parse. + * @return array|null The parsed response as an associative array, or null if parsing fails. + */ + protected function parseResponse(string $input): ?array + { + + // we attempt to Decode the Json in a few ways. It's best to give all models a chance before failing. + $jsonFormat = json_decode( + str($input)->replace([ + '```json', + '```', + ], '')->toString(), true + ); - /** - * Performs revalidation on the given result. - * - * @param string $errors The validation errors. - * - * @return PendingAgentTask The result of handling the validation completion against the prompt chain. - * - * @throws Throwable - */ - protected function doRevalidate(string $response, string $errors = ''): PendingAgentTask - { - - $prompt = view('synapse::Prompts.ReValidateResponsePrompt', [ - 'outputSchema' => $this->getOutputSchema(), - 'lastResponse' => $response, - 'errors' => $errors - ])->render(); - - $validationPrompt = Message::make([ - 'role' => 'user', - 'content' => $prompt, - ]); - - - //We get the whole conversation so far but append a validation message - $promptChain = $this->pendingAgentTask->currentIteration()->getPromptChain(); - - $this->pendingAgentTask->currentIteration()->setPromptChain([ - ...$promptChain, - $validationPrompt - ]); - - // Create the Chat request we will be sending. - return $this->integration->handlePendingAgentTaskCompletion($this->pendingAgentTask); + if (! empty($jsonFormat)) { + return $jsonFormat; } + + return json_decode( + str($input)->replace([ + '```', + '```', + ], '')->toString(), true + ); + } + + /** + * Performs revalidation on the given result. + * + * @param string $errors The validation errors. + * @return PendingAgentTask The result of handling the validation completion against the prompt chain. + * + * @throws Throwable + */ + protected function doRevalidate(string $response, string $errors = ''): PendingAgentTask + { + + $prompt = view('synapse::Prompts.ReValidateResponsePrompt', [ + 'outputSchema' => $this->getOutputSchema(), + 'lastResponse' => $response, + 'errors' => $errors, + ])->render(); + + $message = Message::make([ + 'role' => 'user', + 'content' => $prompt, + ]); + + //We get the whole conversation so far but append a validation message + $promptChain = $this->pendingAgentTask->getPromptChain(); + + $this->pendingAgentTask->setPromptChain([ + ...$promptChain, + $message, + ]); + + // Create the Chat request we will be sending. + return $this->integration->handlePendingAgentTaskCompletion($this->pendingAgentTask); } +} diff --git a/tests/AgentChains/RatAgentChainTest.php b/tests/AgentChains/RatAgentChainTest.php index 1007064..4538d12 100644 --- a/tests/AgentChains/RatAgentChainTest.php +++ b/tests/AgentChains/RatAgentChainTest.php @@ -2,42 +2,44 @@ declare(strict_types=1); -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use Saloon\Http\PendingRequest; -use UseTheFork\Synapse\AgentChain; -use UseTheFork\Synapse\Agents\Rat\RatDraftAgent; -use UseTheFork\Synapse\Agents\Rat\RatSplitAnswerAgent; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; - -it('executes a RAT chain', function (): void { + use Saloon\Http\Faking\Fixture; + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\AgentChains\RatAgentChain; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use UseTheFork\Synapse\Services\Firecrawl\Requests\FirecrawlRequest; + use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; + use UseTheFork\Synapse\Tools\Scrape\FirecrawlTool; + use UseTheFork\Synapse\Tools\Search\SerperTool; + + it('executes a RAT chain', function (): void { MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - return MockResponse::fixture("AgentChains/RatAgentChain-{$hash}"); + return MockResponse::fixture("AgentChains/Rat/RatAgentChain-{$hash}"); }, - ]); + SerperSearchRequest::class => function (PendingRequest $pendingRequest): Fixture { - $agentChain = AgentChain::make([ - new RatDraftAgent, - new RatSplitAnswerAgent, - ])->persistInputs([ - 'question' => 'how so I improve my heart health?', - 'number_of_paragraphs' => '5', + $hash = md5(json_encode($pendingRequest->body()->all())); + + return MockResponse::fixture("AgentChains/Rat/RatAgentChainSerperTool-{$hash}"); + }, + FirecrawlRequest::class => function (PendingRequest $pendingRequest): Fixture { + $hash = md5(json_encode($pendingRequest->body()->all())); + + return MockResponse::fixture("AgentChains/Rat/RatAgentChainFirecrawlTool-{$hash}"); + }, ]); - $message = $agentChain->handle([]); + $ratAgentChain = new RatAgentChain(new SerperTool, new FirecrawlTool); + $message = $ratAgentChain->handle(['question' => 'Summarize the American Civil War according to the timeline.', 'number_of_paragraphs' => '5']); $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() - ->and($agentResponseArray['content'])->toHaveKey('paragraphs') - ->and($agentResponseArray['content']['paragraphs'])->toBeArray(); - - $answer = ''; - foreach ($agentResponseArray['content']['paragraphs'] as $paragraph) { - $answer = "{$answer}\n\n{$paragraph}"; - } + ->and($agentResponseArray['content'])->toHaveKey('answer') + ->and($agentResponseArray['content']['answer'])->toContain('The American Civil War, which spanned from 1861 to 1865, '); -}); +})->skip('This test is only for local testing'); diff --git a/tests/Agents/ChatRephraseAgentTest.php b/tests/Agents/ChatRephraseAgentTest.php index 3d47e8a..beb865a 100644 --- a/tests/Agents/ChatRephraseAgentTest.php +++ b/tests/Agents/ChatRephraseAgentTest.php @@ -2,16 +2,16 @@ declare(strict_types=1); -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use Saloon\Http\PendingRequest; -use UseTheFork\Synapse\Agents\ChatRephraseAgent; -use UseTheFork\Synapse\Constants\Role; -use UseTheFork\Synapse\Enums\FinishReason; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; -use UseTheFork\Synapse\ValueObject\Message; + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\Agents\ChatRephraseAgent; + use UseTheFork\Synapse\Constants\Role; + use UseTheFork\Synapse\Enums\FinishReason; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use UseTheFork\Synapse\ValueObject\Message; -it('can run the Chat Rephrase Agent.', function (): void { + it('can run the Chat Rephrase Agent.', function (): void { MockClient::global([ ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { @@ -39,4 +39,4 @@ expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('standalone_question') ->and($agentResponseArray['content']['standalone_question'])->toBe('How can one improve heart health through gym activities?'); -}); +})->skip('This test is only for local testing'); diff --git a/tests/Agents/ContextualRetrievalPreprocessingAgentTest.php b/tests/Agents/ContextualRetrievalPreprocessingAgentTest.php index 6658fd2..256f911 100644 --- a/tests/Agents/ContextualRetrievalPreprocessingAgentTest.php +++ b/tests/Agents/ContextualRetrievalPreprocessingAgentTest.php @@ -25,4 +25,4 @@ expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('succinct_context') ->and($agentResponseArray['content']['succinct_context'] == 'This chunk introduces the DiffExecutor struct which plays a central role in the differential fuzzing system by wrapping two executors. The primary and secondary executors are designed to run sequentially with the same input to differentiate their behavior.')->toBeTrue(); -}); +})->skip('This test is only for local testing'); diff --git a/tests/Agents/ImageAgentTest.php b/tests/Agents/ImageAgentTest.php index 9d4de44..83b93ba 100644 --- a/tests/Agents/ImageAgentTest.php +++ b/tests/Agents/ImageAgentTest.php @@ -2,17 +2,17 @@ declare(strict_types=1); -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use UseTheFork\Synapse\Agent; -use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; -use UseTheFork\Synapse\Contracts\Integration; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; -use UseTheFork\Synapse\Integrations\OpenAIIntegration; -use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; -use UseTheFork\Synapse\ValueObject\SchemaRule; - -test('can handle image input', function (): void { + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use UseTheFork\Synapse\Agent; + use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; + use UseTheFork\Synapse\Contracts\Integration; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use UseTheFork\Synapse\Integrations\OpenAIIntegration; + use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; + use UseTheFork\Synapse\ValueObject\SchemaRule; + + test('can handle image input', function (): void { MockClient::global([ ChatRequest::class => MockResponse::fixture('Agents/ImageAgentTestAgent'), @@ -50,4 +50,4 @@ public function resolveOutputSchema(): array expect($agentResponseArray)->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') ->and($agentResponseArray['content']['answer'])->toContain('You can also pass params to the loader.'); -}); +})->skip('This test is only for local testing'); diff --git a/tests/Agents/KnowledgeGraphExtractionAgentTest.php b/tests/Agents/KnowledgeGraphExtractionAgentTest.php deleted file mode 100644 index 1f58464..0000000 --- a/tests/Agents/KnowledgeGraphExtractionAgentTest.php +++ /dev/null @@ -1,26 +0,0 @@ - function (PendingRequest $pendingRequest) { - // $count = count($pendingRequest->body()->get('messages')); - // - // return MockResponse::fixture("agents/chat-rephrase-agent/message-{$count}"); - // }, - // ]); - - $agent = new KnowledgeGraphExtractionAgent; - - $agentResponse = $agent->handle(['input' => 'The ML2000 Series is an ANSI/BHMA Grade 1 mortise lock designed to meet the rigors of high-traffic, abusive environments. Constructed of heavy-gauge steel with unique, patented features and a full range of trim and functions including status indicators and Motorized Electric Latch Retraction (MELR), the versatility and reliability of this lock complement any application.']); - -// dd($agentResponse); - - expect($agentResponse)->toBeArray() - ->and($agentResponse)->toHaveKey('standalone_question') - ->and($agentResponse['standalone_question'] == 'What are some methods to improve heart health?')->toBeTrue(); -})->todo(); diff --git a/tests/Agents/MultiQueryRetrieverAgentTest.php b/tests/Agents/MultiQueryRetrieverAgentTest.php index b43dc3d..b538ca6 100644 --- a/tests/Agents/MultiQueryRetrieverAgentTest.php +++ b/tests/Agents/MultiQueryRetrieverAgentTest.php @@ -2,13 +2,13 @@ declare(strict_types=1); -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use Saloon\Http\PendingRequest; -use UseTheFork\Synapse\Agents\MultiQueryRetrieverAgent; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\Agents\MultiQueryRetrieverAgent; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; -it('can run the Multi Query Retriever Agent.', function (): void { + it('can run the Multi Query Retriever Agent.', function (): void { MockClient::global([ ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { @@ -28,4 +28,4 @@ ->and($agentResponseArray['content']['answer'])->toBeArray() ->and($agentResponseArray['content']['answer'])->toHaveCount(5); -}); +})->skip('This test is only for local testing'); diff --git a/tests/Agents/SQLToolAgentTest.php b/tests/Agents/SQLToolAgentTest.php index ed8f0ed..862d8db 100644 --- a/tests/Agents/SQLToolAgentTest.php +++ b/tests/Agents/SQLToolAgentTest.php @@ -2,14 +2,14 @@ declare(strict_types=1); -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use Saloon\Http\PendingRequest; -use UseTheFork\Synapse\Agents\SQLToolAgent; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; -use Workbench\App\Models\Organization; + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\Agents\SQLToolAgent; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use Workbench\App\Models\Organization; -it('can run the SQL Tool Agent.', function (): void { + it('can run the SQL Tool Agent.', function (): void { for ($i = 0; $i < 100; $i++) { $org = new Organization; @@ -60,4 +60,4 @@ expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') ->and($agentResponseArray['content']['answer'])->toContain('100', '5'); -}); +})->skip('This test is only for local testing'); diff --git a/tests/Fixtures/OpenAi/OpenAiFixture.php b/tests/Fixtures/OpenAi/OpenAiFixture.php new file mode 100644 index 0000000..f401f79 --- /dev/null +++ b/tests/Fixtures/OpenAi/OpenAiFixture.php @@ -0,0 +1,19 @@ + 'REDACTED', + 'x-request-id' => 'REDACTED', + "Set-Cookie" => 'REDACTED', + 'CF-RAY' => 'REDACTED', + ]; + } + } diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-0dac52efdcd81f0dae4be83cc7dd9134.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-0dac52efdcd81f0dae4be83cc7dd9134.json deleted file mode 100644 index c0b7531..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-0dac52efdcd81f0dae4be83cc7dd9134.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 17 Oct 2024 01:56:08 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJA25VaNBB4t2ZMS8lc44qZO7WB9x\",\n \"object\": \"chat.completion\",\n \"created\": 1729130161,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"paragraphs\\\": [\\n \\\"Improving heart health is a multifaceted endeavor that includes lifestyle changes and medical strategies. First and foremost, diet plays a critical role in heart health. Reducing the intake of saturated fats, trans fats, and cholesterol-rich foods is advisable, as these can contribute to plaque buildup in arteries. Instead, focus on eating a variety of fruits, vegetables, whole grains, and lean proteins to keep your heart healthy.\\\",\\n \\\"Regular physical activity is also crucial for maintaining a healthy heart. Aim for at least 150 minutes of moderate aerobic exercise or 75 minutes of vigorous exercise each week, combined with muscle-strengthening activities on two or more days a week.\\\",\\n \\\"Avoiding tobacco in any form is one of the most significant steps you can take to protect your heart. Smoking and the use of tobacco products increase the risk of developing cardiovascular diseases. If you smoke, seek help to quit as soon as possible.\\\",\\n \\\"Monitoring your health with regular check-ups can help catch and address potential heart issues before they become severe. This includes keeping an eye on blood pressure, cholesterol levels, and blood sugar, especially if you have a family history of heart disease. Lastly, managing stress and ensuring adequate sleep each night contribute to overall heart health. Engage in stress-reducing activities that you enjoy and aim for 7-9 hours of sleep per night to promote heart health.\\\"\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 381,\n \"completion_tokens\": 294,\n \"total_tokens\": 675,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-23b86031e4743be2f58c64dd85d11f40.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-23b86031e4743be2f58c64dd85d11f40.json deleted file mode 100644 index a430148..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-23b86031e4743be2f58c64dd85d11f40.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:27:52 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "6899", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999844", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "4ms", - "x-request-id": "req_fd9e16fe1d41d69704c264020d6ae42d", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=cSkNNrqiYZL3V1thOKDP5jrTIIk37edj.kGz89SszVg-1729560472-1.0.1.1-op2FlAkf5QMH6IhEYgQhsLOg4LHxseuhdpHwjiOul.3ZEybv_F_bpORQIiTK5ufJdO.pBGsZOOTWxRk0ImZmDw; path=\/; expires=Tue, 22-Oct-24 01:57:52 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=XPTKjmKQYCUkhuhErTbb8MlVyfHpmVTb_B9VZBRGZpk-1729560472549-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b4ed6c8c4245-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxyTO57jKrY1c8OP8tpx6inpsw8K\",\n \"object\": \"chat.completion\",\n \"created\": 1729560465,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Improving heart health is a multifaceted approach involving diet, exercise, lifestyle choices, and monitoring health metrics. \\n\\nFirstly, focusing on a healthy diet is crucial. Aim to incorporate plenty of fruits, vegetables, whole grains, and lean proteins into your daily meals. Reduce intake of saturated fats, trans fats, and cholesterol to help decrease blood pressure and improve lipid profiles. Consider also reducing salt and sugar, which particularly benefit heart health by lowering blood pressure and reducing the risk of cardiovascular disease. \\n\\nSecondly, regular physical activity is essential. The American Heart Association recommends at least 150 minutes of moderate aerobic exercise, or 75 minutes of vigorous exercise, each week. This can include activities like walking, jogging, cycling, or swimming. Regular exercise helps maintain a healthy weight, lowers blood pressure, improves circulation, and strengthens the heart muscle.\\n\\nThirdly, lifestyle modifications play a significant role. If you smoke, quitting is perhaps the most significant step you can take to protect your cardiovascular health. Limiting alcohol consumption and managing stress through techniques like meditation, deep breathing exercises, or yoga can also positively impact heart health.\\n\\nLastly, it\u2019s important to monitor your health through regular check-ups with your doctor. This includes checking your blood pressure, cholesterol levels, and other pertinent heart-related metrics. If you have a family history of heart disease, these check-ups become even more critical as they can help catch potential issues early.\\n\\nBy integrating these practices into your life, you can significantly enhance your heart health and reduce the risk of heart diseases.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 116,\n \"completion_tokens\": 320,\n \"total_tokens\": 436,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-3a4abc7b397c195a952d147f5999c932.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-3a4abc7b397c195a952d147f5999c932.json deleted file mode 100644 index a4719f0..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-3a4abc7b397c195a952d147f5999c932.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:20 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "8876", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999396", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "18ms", - "x-request-id": "req_840559461212cf82d64cbd4b1ae04559", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=RjU4dU2ruXhZ.6WQLXLzA2tsCP7dIYLjNISOHvuD30U-1729560500-1.0.1.1-HuXR5QvzxbScL5RSZkfMGW4fY8oI8UJ.Ury0mBkYicFLO0cCkh2OdT9AkuxvJ8.DnLFZimkZrejysKIGWLhjTQ; path=\/; expires=Tue, 22-Oct-24 01:58:20 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=bJWdtNemdE6f8qGUAEvHMdvlubcWuPjg8QZADZZONfc-1729560500635-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b590ccd642e7-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxytzFzQVlilr4h8iF847NpkL9Qs\",\n \"object\": \"chat.completion\",\n \"created\": 1729560491,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"paragraphs\\\": [\\n \\\"Improving heart health is crucial and can be achieved through a combination of diet, exercise, lifestyle adjustments, and regular medical check-ups. Firstly, diet plays a fundamental role in heart health. Incorporating a variety of fruits, vegetables, whole grains, and lean proteins into your diet helps manage weight and lowers the risk of heart disease. It is also important to minimize the intake of saturated fats, trans fats, excess sodium, and sugars, all of which can negatively impact heart health.\\\",\\n \\\"Secondly, exercise is essential for maintaining a healthy heart. Aim for at least 150 minutes of moderate aerobic activity or 75 minutes of vigorous activity per week, as recommended by health organizations like the American Heart Association. Regular physical activity not only strengthens the heart but also helps control weight, reduces arterial stiffness, and improves overall cardiovascular endurance.\\\",\\n \\\"Thirdly, lifestyle changes are vital for heart health. Quitting smoking and reducing alcohol intake are top priorities, as both have been linked to heart disease. Additionally, managing stress through mindfulness, meditation, or yoga can positively affect your heart health by reducing stress hormones and inflammation.\\\",\\n \\\"Finally, regular health check-ups are indispensable for maintaining heart health. These check-ups help monitor blood pressure, cholesterol levels, and other heart-related indicators, allowing for early detection and management of potential health issues. By integrating these strategies into your daily life, you can significantly enhance your cardiac function and overall heart health, leading to a longer, healthier life.\\\"\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 440,\n \"completion_tokens\": 309,\n \"total_tokens\": 749,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-3d6768be2549ac5e1a0e44d2ed1eb2c1.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-3d6768be2549ac5e1a0e44d2ed1eb2c1.json deleted file mode 100644 index a5372fd..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-3d6768be2549ac5e1a0e44d2ed1eb2c1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:02 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "9568", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999293", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "21ms", - "x-request-id": "req_52ff88b78eb40f3aa93b4ff53e50d77a", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=VC3i2ik2t3JGhiVxi8O.UBz_n5KpT0eGWyr09uk.cdM-1729560482-1.0.1.1-jYw8Cz2T9Z2UcV8M4w2dViD.D2kaihil8Qf69PpoY6J4pbAR0rmQIZOWAHTXKxEMhZqUZ5eiv6OwKJRr8bK4cA; path=\/; expires=Tue, 22-Oct-24 01:58:02 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=EFrlVOrrRA4uHwjqALJbB7M2hCZPTU_wOydaH17Hxdw-1729560482546-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b51b5d2e43dd-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxyblN6CbCJCwiPpb13BChH8TgHQ\",\n \"object\": \"chat.completion\",\n \"created\": 1729560473,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Improving heart health involves a combination of diet, exercise, lifestyle choices, and regular medical check-ups. \\n\\nFirstly, adjusting your diet is a key factor in boosting heart health. Incorporate a variety of fruits, vegetables, and whole grains into your meals. Focus on eating lean proteins and limit your intake of unhealthy fats, sodium, and added sugars. This approach can help manage your body weight, reduce cholesterol, and lower blood pressure, all of which are beneficial for heart health.\\n\\nSecondly, exercise is crucial for maintaining a healthy heart. The American Heart Association recommends at least 150 minutes of moderate-intensity aerobic exercise, or 75 minutes of vigorous exercise per week. Regular physical activity helps strengthen the heart muscle, improves blood circulation, and can help you maintain a healthy weight.\\n\\nAdditionally, lifestyle modifications are necessary for optimal heart health. If you smoke, quitting is one of the most powerful steps you can take. Managing stress through techniques like yoga, meditation, or regular relaxation can also have profound benefits on your cardiovascular health. Limiting alcohol intake is recommended as it can have a direct impact on heart conditions.\\n\\nLastly, routine health screenings are vital. Regular visits to your healthcare provider for blood pressure, cholesterol, and diabetes screenings can help detect problems early and facilitate timely intervention. Discussing your family's health history with your doctor can also provide insights into your personal risk factors and guide preventive measures.\\n\\nBy implementing these strategies, you can improve your heart health significantly and decrease the risk of heart-related diseases.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 525,\n \"completion_tokens\": 314,\n \"total_tokens\": 839,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-7e62e7ca508c58a7dd52e9451a68d9b2.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-7e62e7ca508c58a7dd52e9451a68d9b2.json deleted file mode 100644 index 6d6dd98..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-7e62e7ca508c58a7dd52e9451a68d9b2.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:11 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "8222", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1998750", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "37ms", - "x-request-id": "req_eb79e82455779172b64cf352d1fcd0ba", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=pthxdFvkAVee_uTckkTmSScEXcueUclhCP26WPMAGlI-1729560491-1.0.1.1-r_SOEF1Xfv22ckOB79QM.bk9YcAvHFxsW5hC14NnclNDLwa5LaURig3B7QldesktEoUplk4YKJrvk6BWLIS5Ew; path=/; expires=Tue, 22-Oct-24 01:58:11 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=1RlVzYSrZzPIaOYAp0rMVbchRSinWkZR_Wf8Dt.N1O0-1729560491210-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b559ebfb8cec-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxyl6kWTV5RgXszK4gabSDHNO7eh\",\n \"object\": \"chat.completion\",\n \"created\": 1729560483,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Improving heart health is crucial and can be achieved through a combination of diet, exercise, lifestyle adjustments, and regular medical check-ups. \\\\n\\\\nFirstly, diet plays a fundamental role in heart health. Incorporating a variety of fruits, vegetables, whole grains, and lean proteins into your diet helps manage weight and lowers the risk of heart disease. It is also important to minimize the intake of saturated fats, trans fats, excess sodium, and sugars, all of which can negatively impact heart health. \\\\n\\\\nSecondly, exercise is essential for maintaining a healthy heart. Aim for at least 150 minutes of moderate aerobic activity or 75 minutes of vigorous activity per week, as recommended by health organizations like the American Heart Association. Regular physical activity not only strengthens the heart but also helps control weight, reduces arterial stiffness, and improves overall cardiovascular endurance. \\\\n\\\\nThirdly, lifestyle changes are vital for heart health. Quitting smoking and reducing alcohol intake are top priorities, as both have been linked to heart disease. Additionally, managing stress through mindfulness, meditation, or yoga can positively affect your heart health by reducing stress hormones and inflammation. \\\\n\\\\nFinally, regular health check-ups are indispensable for maintaining heart health. These check-ups help monitor blood pressure, cholesterol levels, and other heart-related indicators, allowing for early detection and management of potential health issues. \\\\n\\\\nBy integrating these strategies into your daily life, you can significantly enhance your cardiac function and overall heart health, leading to a longer, healthier life.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 928,\n \"completion_tokens\": 317,\n \"total_tokens\": 1245,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-9ce86b41e54066cf052469d1d46c848d.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-9ce86b41e54066cf052469d1d46c848d.json deleted file mode 100644 index ede9289..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-9ce86b41e54066cf052469d1d46c848d.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 17 Oct 2024 01:51:50 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ9xp1Dm5MRjmPh5TsT1gZUsvvbBF\",\n \"object\": \"chat.completion\",\n \"created\": 1729129897,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Improving heart health is a multifaceted endeavor that includes lifestyle changes and medical strategies. First and foremost, diet plays a critical role in heart health. Reducing the intake of saturated fats, trans fats, and cholesterol-rich foods is advisable, as these can contribute to plaque buildup in arteries. Instead, focus on eating a variety of fruits, vegetables, whole grains, and lean proteins to keep your heart healthy.\\\\n\\\\nRegular physical activity is also crucial for maintaining a healthy heart. Aim for at least 150 minutes of moderate aerobic exercise or 75 minutes of vigorous exercise each week, combined with muscle-strengthening activities on two or more days a week. Avoiding tobacco in any form is one of the most significant steps you can take to protect your heart. Smoking and the use of tobacco products increase the risk of developing cardiovascular diseases. If you smoke, seek help to quit as soon as possible.\\\\n\\\\nMonitoring your health with regular check-ups can help catch and address potential heart issues before they become severe. This includes keeping an eye on blood pressure, cholesterol levels, and blood sugar, especially if you have a family history of heart disease. Lastly, managing stress and ensuring adequate sleep each night contribute to overall heart health. Engage in stress-reducing activities that you enjoy and aim for 7-9 hours of sleep per night to promote heart health.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 364,\n \"completion_tokens\": 287,\n \"total_tokens\": 651,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-c8b871f5b66ceee6cdd6a4f41ca4809e.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-c8b871f5b66ceee6cdd6a4f41ca4809e.json deleted file mode 100644 index 0d8758f..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-c8b871f5b66ceee6cdd6a4f41ca4809e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 17 Oct 2024 01:50:28 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ9wZnNOMYPTf1cGDenfRqL1FZVs8\",\n \"object\": \"chat.completion\",\n \"created\": 1729129819,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Improving heart health is a multifaceted endeavor that includes lifestyle changes and medical strategies. First and foremost, diet plays a critical role in heart health. Reducing the intake of saturated fats, trans fats, and cholesterol-rich foods is advisable, as these can contribute to plaque buildup in arteries. Instead, focus on eating a variety of fruits, vegetables, whole grains, and lean proteins to keep your heart healthy.\\\\n\\\\nRegular physical activity is also crucial for maintaining a healthy heart. Aim for at least 150 minutes of moderate aerobic exercise or 75 minutes of vigorous exercise each week, combined with muscle-strengthening activities on two or more days a week.\\\\n\\\\nAvoiding tobacco in any form is one of the most significant steps you can take to protect your heart. Smoking and the use of tobacco products increase the risk of developing cardiovascular diseases. If you smoke, seek help to quit as soon as possible.\\\\n\\\\nMonitoring your health with regular check-ups can help catch and address potential heart issues before they become severe. This includes keeping an eye on blood pressure, cholesterol levels, and blood sugar, especially if you have a family history of heart disease.\\\\n\\\\nLastly, managing stress and ensuring adequate sleep each night contribute to overall heart health. Engage in stress-reducing activities that you enjoy and aim for 7-9 hours of sleep per night to promote heart health.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 145,\n \"completion_tokens\": 291,\n \"total_tokens\": 436,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-e6be3b2a969ae75116175e3c039cc2f2.json b/tests/Fixtures/Saloon/AgentChains/RatAgentChain-e6be3b2a969ae75116175e3c039cc2f2.json deleted file mode 100644 index 89a5763..0000000 --- a/tests/Fixtures/Saloon/AgentChains/RatAgentChain-e6be3b2a969ae75116175e3c039cc2f2.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 17 Oct 2024 01:50:18 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID" - }, - "data": "{\n \"id\": \"chatcmpl-AJ9wS3DmlVd0DuHRikV5zpDZekJLG\",\n \"object\": \"chat.completion\",\n \"created\": 1729129812,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Improving heart health is a significant concern for maintaining overall well-being and can be achieved through a combination of lifestyle changes, dietary adjustments, and regular medical check-ups. \\n\\nFirstly, engaging in regular physical activity is one of the most effective ways to strengthen the heart. Aim for at least 150 minutes of moderate aerobic exercise or 75 minutes of vigorous exercise each week. Activities could include walking, cycling, swimming, or sprinting. Exercise helps reduce hypertension, lower cholesterol, and keep body weight under control.\\n\\nSecondly, diet plays a crucial role in heart health. Incorporating heart-healthy foods into your diet can enhance cardiovascular function and reduce risk factors. Focus on eating a variety of fruits and vegetables, whole grains, lean proteins such as fish and legumes, and nuts and seeds. Limit the intake of saturated fats, trans fats, cholesterol, salt (sodium), and added sugars. Opt for cooking methods that require less fat, such as boiling, baking, or steaming rather than frying.\\n\\nAdditionally, managing stress and ensuring adequate sleep each night are vital components of heart health. Chronic stress and poor sleep patterns can lead to increased heart rate and blood pressure, potentially causing long-term harm to the heart. Employ relaxation techniques such as meditation, deep breathing exercises, or yoga. Strive for 7-9 hours of quality sleep per night.\\n\\nRegularly monitoring health metrics and consulting with healthcare professionals are also crucial. Keep track of your blood pressure, cholesterol levels, and body weight. Regular check-ups will help in early identification and management of any potential heart issues. Quitting smoking and limiting alcohol intake are also beneficial for maintaining a healthy heart.\\n\\nBy consistently applying these strategies, you can significantly improve and maintain your heart health over time.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 81,\n \"completion_tokens\": 362,\n \"total_tokens\": 443,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-a4f1718f3bd597aaa73aabb90ccb115b.json b/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-a4f1718f3bd597aaa73aabb90ccb115b.json deleted file mode 100644 index 50e3c43..0000000 --- a/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-a4f1718f3bd597aaa73aabb90ccb115b.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:52:21 GMT", - "Content-Type": "application\/json", - "Content-Length": "711", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHImZj9bW9sqXPa4GJT48mugS5Pe8\",\n \"object\": \"chat.completion\",\n \"created\": 1728687139,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"standalone_question\\\": \\\"How can one improve heart health?\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 237,\n \"completion_tokens\": 20,\n \"total_tokens\": 257,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_4dba7dd7b3\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-d53f1768c34d5c32774aa924150302a0.json b/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-d53f1768c34d5c32774aa924150302a0.json deleted file mode 100644 index bb11931..0000000 --- a/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-d53f1768c34d5c32774aa924150302a0.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:22 GMT", - "Content-Type": "application/json", - "Content-Length": "725", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "858", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999656", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "10ms", - "x-request-id": "req_92c7ea6e5c16152c129ec11fb2b5e172", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=hPO2vobWRuUv61gTCjPAtKKvr39Q1OnxRrf10QS4M7k-1729560502-1.0.1.1-JBD.hk0I9T3n5HJYqlEur46jtDmEFNfy0XU9XtC1Q00Aba3nkBLLxYwL6cv1LgwylMp1jmDiblV7f4lIWDCBBw; path=/; expires=Tue, 22-Oct-24 01:58:22 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=8uibqfRpr59vivboYsljTlOiDpo5lseCEddnNsMZR_s-1729560502072-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b5cbdeef8c9c-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxz3P5k2zvdYdRlwudwl1TUpr6hK\",\n \"object\": \"chat.completion\",\n \"created\": 1729560501,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"standalone_question\\\": \\\"How can one improve heart health through gym activities?\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 272,\n \"completion_tokens\": 20,\n \"total_tokens\": 292,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-d64a50cbac93e15e519fe16f1c1e212f.json b/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-d64a50cbac93e15e519fe16f1c1e212f.json deleted file mode 100644 index 04a8268..0000000 --- a/tests/Fixtures/Saloon/Agents/ChatRephraseAgent-d64a50cbac93e15e519fe16f1c1e212f.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 10 Oct 2024 23:46:06 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "937", - "openai-version": "2020-10-01", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999707", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "8ms", - "x-request-id": "req_466c5caeb7b01c1b342b0548e150e60a", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=lT7uuqpRmkdYPIZTxNszN9rQM2PCT.dOEShecigouTk-1728603966-1.0.1.1-gQjC7x4jXAEUGjoDV0voBu_ddONefTrcC7M0Q88buScHWXOLcBcFSNv94Cjznw_qrDdlyQs.m67Hg8jyz0W6ig; path=/; expires=Fri, 11-Oct-24 00:16:06 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=WO504wXXEuVagLPYoXsRfBJv3MNEzHnkOqHmuvYuDnE-1728603966902-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d0a7ce199754228-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AGx93EGjkiQ6K7Aa6ZzxoCEB3KGyV\",\n \"object\": \"chat.completion\",\n \"created\": 1728603965,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"standalone_question\\\": \\\"How can I improve my heart health?\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 228,\n \"completion_tokens\": 17,\n \"total_tokens\": 245,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"text_tokens\": 0,\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/ContextualRetrievalPreprocessingAgent.json b/tests/Fixtures/Saloon/Agents/ContextualRetrievalPreprocessingAgent.json deleted file mode 100644 index 51ccb07..0000000 --- a/tests/Fixtures/Saloon/Agents/ContextualRetrievalPreprocessingAgent.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 10 Oct 2024 23:58:35 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "2732", - "openai-version": "2020-10-01", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1997322", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "80ms", - "x-request-id": "req_ab84df451a89637d134760104ae48bad", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=AhLoXBbn3OzdlEllguFPNaFudNQpKGo9i_gua7zIcAE-1728604715-1.0.1.1-IdfQYmWUy1s_BsQ_L1NMVpUK9CAona790V7.04ICQswYNV6.HVukbkWmetOun.1TnmQUXNbWQ9dVjyGeANx4jA; path=\/; expires=Fri, 11-Oct-24 00:28:35 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=aHNU2z6QsonPQ3BlCkw9TJ1oTldy6QgvnTMbZlKFmG4-1728604715005-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d0a8f19ea5643a5-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AGxL6JQFm5WvSWvPykmwbGi9BSTwN\",\n \"object\": \"chat.completion\",\n \"created\": 1728604712,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"succinct_context\\\": \\\"This chunk introduces the DiffExecutor struct which plays a central role in the differential fuzzing system by wrapping two executors. The primary and secondary executors are designed to run sequentially with the same input to differentiate their behavior.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 2878,\n \"completion_tokens\": 57,\n \"total_tokens\": 2935,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"text_tokens\": 0,\n \"reasoning_tokens\": 0,\n \"audio_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_4dba7dd7b3\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Agents/ImageAgentTestAgent.json b/tests/Fixtures/Saloon/Agents/ImageAgentTestAgent.json deleted file mode 100644 index bfe36bb..0000000 --- a/tests/Fixtures/Saloon/Agents/ImageAgentTestAgent.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 10 Oct 2024 22:47:17 GMT", - "Content-Type": "application\/json", - "Content-Length": "841", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "3676", - "openai-version": "2020-10-01", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999153", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "25ms", - "x-request-id": "req_19ed4b03924a5d386a174708d90cfb1d", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=jIRlgtwCiOdu6yO24UbkZ_g_vf72leXRHw0icYGYpVw-1728600437-1.0.1.1-7MQX6IX35AO2alxv8cNLWRGJe1TTgyRKKpwFtBMMeAW6Rsg9CTMCfZH6Z4Q10yufn7zMaxPQXF225gTYjElacg; path=\/; expires=Thu, 10-Oct-24 23:17:17 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=fsZzoR20DPpq8.CklM7c1bQPPgrMgf1WmQQ7SnGDdzA-1728600437100-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d0a26a26f490f9d-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AGwE6enS8XIpfXZl43DERfaMsBlat\",\n \"object\": \"chat.completion\",\n \"created\": 1728600434,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Crawler Options #\\\\n\\\\nYou can also pass params to the loader. This is a dictionary of options to pass to the crawler. See the FireCrawl API documentation for more information.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 491,\n \"completion_tokens\": 50,\n \"total_tokens\": 541,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_4dba7dd7b3\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Agents/MultiQueryRetrieverAgent-6a3bece603a588c169c067f3b13d3f04.json b/tests/Fixtures/Saloon/Agents/MultiQueryRetrieverAgent-6a3bece603a588c169c067f3b13d3f04.json deleted file mode 100644 index 5d1c591..0000000 --- a/tests/Fixtures/Saloon/Agents/MultiQueryRetrieverAgent-6a3bece603a588c169c067f3b13d3f04.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 10 Oct 2024 22:53:11 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AGwJnsnfjDl2Cl0JTIrJASqI7VJxW\",\n \"object\": \"chat.completion\",\n \"created\": 1728600787,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": [\\n \\\"Which exercises at the gym are best for cardiovascular health?\\\",\\n \\\"What are the most effective gym workouts to improve heart function?\\\",\\n \\\"Can you suggest some gym routines that benefit heart health?\\\",\\n \\\"What types of gym activities are good for strengthening the heart?\\\",\\n \\\"Which fitness center exercises could help in enhancing heart health?\\\"\\n ]\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 140,\n \"completion_tokens\": 76,\n \"total_tokens\": 216,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/MultiQueryRetrieverAgent-d54e72acfb8432e3c4ce48cab4f69391.json b/tests/Fixtures/Saloon/Agents/MultiQueryRetrieverAgent-d54e72acfb8432e3c4ce48cab4f69391.json deleted file mode 100644 index 1bfa82c..0000000 --- a/tests/Fixtures/Saloon/Agents/MultiQueryRetrieverAgent-d54e72acfb8432e3c4ce48cab4f69391.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:25 GMT", - "Content-Type": "application\/json", - "Content-Length": "1057", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "2499", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999773", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "6ms", - "x-request-id": "req_c2003d4df94f5d76587d213b8e2c6019", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=PYizbeamYDO0AtQDPhtzpVN1Zn._kgqTMunqMSZ7skg-1729560505-1.0.1.1-wXqtr1GxAEswcMzw51eNuZpN.Lnii_6xliCDPdfWV87pExEOJ81H2gGVlr.fsw2dwdoTzM9lAzfQeklTfe19mQ; path=\/; expires=Tue, 22-Oct-24 01:58:25 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=7anOzpNsNSahAxndBxMCshFUOqEqngNywz1TRH5Ogis-1729560505780-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b5d8ae9842a5-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxz5Q8DNUTvqYVNMoCkbfKvQ4dId\",\n \"object\": \"chat.completion\",\n \"created\": 1729560503,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": [\\n \\\"Which exercise routines at the gym are beneficial for cardiovascular health?\\\",\\n \\\"What are the best gym workouts to improve heart function?\\\",\\n \\\"Can you suggest some cardio exercises at the gym for heart health?\\\",\\n \\\"What types of gym activities help in strengthening the heart?\\\",\\n \\\"Which gym exercises are most effective for enhancing cardiac health?\\\"\\n ]\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 175,\n \"completion_tokens\": 77,\n \"total_tokens\": 252,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-09920d4481a4771ce866d0c345e25a91.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-09920d4481a4771ce866d0c345e25a91.json deleted file mode 100644 index 55fa026..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-09920d4481a4771ce866d0c345e25a91.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:00:59 GMT", - "Content-Type": "application\/json", - "Content-Length": "769", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ7IfEVBjVDymyiFQabiIA1NPBP7z\",\n \"object\": \"chat.completion\",\n \"created\": 1729119657,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There are 100 organizations currently operating, and the average number of funding rounds for them is 5.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1247,\n \"completion_tokens\": 33,\n \"total_tokens\": 1280,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-0b0867cd35d40e15c4e6ee69e34045b9.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-0b0867cd35d40e15c4e6ee69e34045b9.json deleted file mode 100644 index 32f95cb..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-0b0867cd35d40e15c4e6ee69e34045b9.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:53:58 GMT", - "Content-Type": "application/json", - "Content-Length": "925", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ87xAJ2JNm18lP8fPhsoJsYHrEc2\",\n \"object\": \"chat.completion\",\n \"created\": 1729122837,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_YRRYKdXqKRF2k1PUQXPqNujy\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 449,\n \"completion_tokens\": 18,\n \"total_tokens\": 467,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-0f2cbb046d14f10babf198d5839a56ee.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-0f2cbb046d14f10babf198d5839a56ee.json deleted file mode 100644 index 9b55d88..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-0f2cbb046d14f10babf198d5839a56ee.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:28 GMT", - "Content-Type": "application/json", - "Content-Length": "897", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "796", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999680", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "9ms", - "x-request-id": "req_502461abc2d9db282ec9184222c3ee8d", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=JXmtqFpn2KYYRTuq2_HsolRbSBmUDuJWEtgNNQCXUcQ-1729560508-1.0.1.1-.a91ln2AQjtDtDE_VpUda3KFAug2G0nNgnTcoa04wlWm0tdHFKG795ys6.i8SfNUlmLLfpDF9ETjm7C_KZb85A; path=/; expires=Tue, 22-Oct-24 01:58:28 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=UQgb.hxkKSJoVq2Y2gjp5xKYJqhiBkIJshOsRnhaRaY-1729560508026-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b5ee1c2a7cf6-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxz9pLzXNEz4PxkGZALXMXcRbAc6\",\n \"object\": \"chat.completion\",\n \"created\": 1729560507,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_UmSgwmAuST5mlWbwTbnyT499\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"list_s_q_l_database_tool\",\n \"arguments\": \"{}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 423,\n \"completion_tokens\": 14,\n \"total_tokens\": 437,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-1ba56f98ec619524c9cc046a17ce54c0.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-1ba56f98ec619524c9cc046a17ce54c0.json deleted file mode 100644 index 4379236..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-1ba56f98ec619524c9cc046a17ce54c0.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:00:52 GMT", - "Content-Type": "application/json", - "Content-Length": "897", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ7IZUfcmlHQYRe4MryCo6Bi5KEo0\",\n \"object\": \"chat.completion\",\n \"created\": 1729119651,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_YGFnHjZAty54Rw5pap6M3qtE\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"list_s_q_l_database_tool\",\n \"arguments\": \"{}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 388,\n \"completion_tokens\": 14,\n \"total_tokens\": 402,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-1f623066a9197d1a4b395fa6a7079da3.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-1f623066a9197d1a4b395fa6a7079da3.json deleted file mode 100644 index 1e62479..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-1f623066a9197d1a4b395fa6a7079da3.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:31 GMT", - "Content-Type": "application/json", - "Content-Length": "925", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "833", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999577", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "12ms", - "x-request-id": "req_11b9677b9ae15f3a78a540efc873ea3e", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=QGlqwaczD6k0rsD1TwdBy4dLtLIHUpv5nUumNVvX720-1729560511-1.0.1.1-UHPXa5jXvG9Hag3ztcEsBmJeaATBM.KKJ2.0L_5Y4YaidaXcL48ZPurCLqGox7ZytfmIt9NkMVblJW3Lhrt5kA; path=/; expires=Tue, 22-Oct-24 01:58:31 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=qoHc98fgxNE4IvtxmiWkTyJBFwiM629PEtjuVk1WiQo-1729560511656-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b607cd398ccd-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzCTjYgxnslLxs7ywdHc5M5HHC6\",\n \"object\": \"chat.completion\",\n \"created\": 1729560510,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_mRECkNXbFwzmdokaTUYG3ufG\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 602,\n \"completion_tokens\": 18,\n \"total_tokens\": 620,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-2065af6d3f057153a11772603ec65f5e.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-2065af6d3f057153a11772603ec65f5e.json deleted file mode 100644 index adb0863..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-2065af6d3f057153a11772603ec65f5e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:00:57 GMT", - "Content-Type": "application/json", - "Content-Length": "1050", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ7IdZYUDQ9fV9dniXMhPPO9ihjDA\",\n \"object\": \"chat.completion\",\n \"created\": 1729119655,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_GLbIHjARoUJh2a5aPJg9FI6l\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS total_organizations, AVG(num_funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1170,\n \"completion_tokens\": 48,\n \"total_tokens\": 1218,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-58b2f699ebef4cb1ebebf4221b228d5e.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-58b2f699ebef4cb1ebebf4221b228d5e.json deleted file mode 100644 index 73ad098..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-58b2f699ebef4cb1ebebf4221b228d5e.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:53:57 GMT", - "Content-Type": "application\/json", - "Content-Length": "897", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "819", - "openai-version": "2020-10-01" - }, - "data": "{\n \"id\": \"chatcmpl-AJ87wCMef7zUWGnJeUmY6NmE570vD\",\n \"object\": \"chat.completion\",\n \"created\": 1729122836,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_yyXdaOAyYq3qDCmDwDEcC9cB\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"list_s_q_l_database_tool\",\n \"arguments\": \"{}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 388,\n \"completion_tokens\": 14,\n \"total_tokens\": 402,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-6991437c545f65d770fa0188d82516ce.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-6991437c545f65d770fa0188d82516ce.json deleted file mode 100644 index 5118d14..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-6991437c545f65d770fa0188d82516ce.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:00:55 GMT", - "Content-Type": "application\/json", - "Content-Length": "925", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ7Ib9oQgUuOMS47M37qIKsgNf2Qv\",\n \"object\": \"chat.completion\",\n \"created\": 1729119653,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_b0cBDtCvT57IPResDtLVIIkB\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 449,\n \"completion_tokens\": 18,\n \"total_tokens\": 467,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-aea323a5832b8415f679133f693e2b13.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-aea323a5832b8415f679133f693e2b13.json deleted file mode 100644 index 7db2297..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-aea323a5832b8415f679133f693e2b13.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:36 GMT", - "Content-Type": "application\/json", - "Content-Length": "758", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "2097", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1998911", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "32ms", - "x-request-id": "req_4fce149cbcb9d6e3df26e6378ea6f79d", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=GEUlC5D1qBJOQxhSRrIXSKecbBwRJWCVSiEaZLy0sow-1729560516-1.0.1.1-OhrdDkGPPQ2.2Ux5kfiD7c3zZhuLLCt7Nx.YzNSKE51AbJwTjPWAc8YPW_iztbsBosyD_J1gfpZ.pOK2yM6Ehg; path=\/; expires=Tue, 22-Oct-24 01:58:36 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=FNQjNOID.tCjMYC7IoA_jeQQysF9sKoyOwn0_NBC3l8-1729560516806-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b6201d410cd9-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzGkfig1506CY7sOwi4eJVTLgUJ\",\n \"object\": \"chat.completion\",\n \"created\": 1729560514,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"{\\\\n \\\\\\\"total_operating_organizations\\\\\\\": 100,\\\\n \\\\\\\"average_funding_rounds\\\\\\\": 5\\\\n}\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1404,\n \"completion_tokens\": 38,\n \"total_tokens\": 1442,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-ca35aaabff5f4b53409aa9635246f84a.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-ca35aaabff5f4b53409aa9635246f84a.json deleted file mode 100644 index 31a5210..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-ca35aaabff5f4b53409aa9635246f84a.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:54:01 GMT", - "Content-Type": "application\/json", - "Content-Length": "1054", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ87zexuBFOyNj25s7F3amktioBRM\",\n \"object\": \"chat.completion\",\n \"created\": 1729122839,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_fa4zFfmXKbS7y0rEE0N44CSe\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS operating_organizations, AVG(num_funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1170,\n \"completion_tokens\": 48,\n \"total_tokens\": 1218,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-dbbeef79e6e45bbca928834e33282bd5.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-dbbeef79e6e45bbca928834e33282bd5.json deleted file mode 100644 index f43d7e4..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-dbbeef79e6e45bbca928834e33282bd5.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:30 GMT", - "Content-Type": "application\/json", - "Content-Length": "1054", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "2048", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999638", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "10ms", - "x-request-id": "req_c999edb687ad626728dda2d3855e596a", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=upcl1KdgiKLJ98rMfYbWz3aOU6JPnrOiUHpuZFT4Gxw-1729560510-1.0.1.1-raAredPc2exiKdm_v.AYk0LKwczq485QcxIhJogC04zjUWaSgb61m6k8u1F5kdNk6DKLQWF_ujqOPRvH7lFflw; path=\/; expires=Tue, 22-Oct-24 01:58:30 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=cAAkbxSH6_wTW48Cmejcl7smgtP2yjzbhNKLUKT2.Hc-1729560510391-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b5f859528cbf-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzA3EnBjDwKYYEPJwZV1gvKQoPR\",\n \"object\": \"chat.completion\",\n \"created\": 1729560508,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_QPwVBq9tehyE7ecdApXFVy3p\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS total_operating_organizations, AVG(funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 484,\n \"completion_tokens\": 49,\n \"total_tokens\": 533,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-df626a1c7b4955432c0bc96cdbffe38f.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-df626a1c7b4955432c0bc96cdbffe38f.json deleted file mode 100644 index 5e48159..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-df626a1c7b4955432c0bc96cdbffe38f.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:34 GMT", - "Content-Type": "application\/json", - "Content-Length": "1060", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "2185", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1998930", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "32ms", - "x-request-id": "req_aafe2fd5dbe16429550a7527f2cabbcf", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=JDiVxyYgVNe_yBBxkGfQomTdzG4JoK8E11aLZgycIzE-1729560514-1.0.1.1-1ZSNkZaiLPrky_UFNGJliTFeGRzwIqIULDSsKoYbQ.nHC2OuvB0hVfWSPFh7b6yHthjacqyw1tTb93.QixQUaw; path=\/; expires=Tue, 22-Oct-24 01:58:34 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=mzHdwKR1_IP7tY1cLCCHyeICk34M4fPv1JQg0OXZ0mE-1729560514175-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b60f28834291-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzEIQXqjmwtLzc9lBOCexAWCeLu\",\n \"object\": \"chat.completion\",\n \"created\": 1729560512,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_873PdtJ71IOO02xUU6KkokEm\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS total_operating_organizations, AVG(num_funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1323,\n \"completion_tokens\": 50,\n \"total_tokens\": 1373,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Agents/SQLToolAgent-f31398b834b15382e7ad551a39889dd7.json b/tests/Fixtures/Saloon/Agents/SQLToolAgent-f31398b834b15382e7ad551a39889dd7.json deleted file mode 100644 index 9ae0e7b..0000000 --- a/tests/Fixtures/Saloon/Agents/SQLToolAgent-f31398b834b15382e7ad551a39889dd7.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 23:54:03 GMT", - "Content-Type": "application/json", - "Content-Length": "760" - }, - "data": "{\n \"id\": \"chatcmpl-AJ8823rTNyertHrdfwPsPmeB0793E\",\n \"object\": \"chat.completion\",\n \"created\": 1729122842,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There are 100 operating organizations and the average number of funding rounds for them is 5.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1248,\n \"completion_tokens\": 31,\n \"total_tokens\": 1279,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Console/SynapseArtisan-0619d6097b2a0bb5bfb6ef58d9dec10a.json b/tests/Fixtures/Saloon/Console/SynapseArtisan-0619d6097b2a0bb5bfb6ef58d9dec10a.json deleted file mode 100644 index 94e125a..0000000 --- a/tests/Fixtures/Saloon/Console/SynapseArtisan-0619d6097b2a0bb5bfb6ef58d9dec10a.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:40 GMT", - "Content-Type": "application\/json", - "Content-Length": "686", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "897", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999539", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "13ms", - "x-request-id": "req_10490703b310d85c036e2e1f8dae319e", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=55P6ASxoIUaoHIJgOdF7qASi3DSyamurOKRInzQtkiY-1729560520-1.0.1.1-0IhzESt4BLKyCFMKWRMgIcv_Az8ntA_vkIbRoaAlNPUqhcuqf9al2QPfp8iQGADFTd332IRcf8_BCdV1MLOgEg; path=\/; expires=Tue, 22-Oct-24 01:58:40 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=IBDk1BFi3MTRT248ag1g44JWc3wgTyVhyMiGURwgGcg-1729560520410-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b63e3b518c51-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzLLvd8Tfu3jRyidjalgHiBFVza\",\n \"object\": \"chat.completion\",\n \"created\": 1729560519,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"command\\\": \\\"make:model Flight -m\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 493,\n \"completion_tokens\": 17,\n \"total_tokens\": 510,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Console/SynapseArtisan-45fd717294d9994835af091e62465560.json b/tests/Fixtures/Saloon/Console/SynapseArtisan-45fd717294d9994835af091e62465560.json new file mode 100644 index 0000000..d37cc5d --- /dev/null +++ b/tests/Fixtures/Saloon/Console/SynapseArtisan-45fd717294d9994835af091e62465560.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:45:34 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2doAIZsW4qZcbKa2CwMrkau5guX\",\n \"object\": \"chat.completion\",\n \"created\": 1741733132,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"command\\\": \\\"make:model Flight -m\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 482,\n \"completion_tokens\": 18,\n \"total_tokens\": 500,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Console/SynapseArtisan-9de9d17283d00e1b029790c472e08b72.json b/tests/Fixtures/Saloon/Console/SynapseArtisan-9de9d17283d00e1b029790c472e08b72.json new file mode 100644 index 0000000..65eea70 --- /dev/null +++ b/tests/Fixtures/Saloon/Console/SynapseArtisan-9de9d17283d00e1b029790c472e08b72.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:45:35 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2dq8fsMiU95gs9Bt5ELmeRicwO2\",\n \"object\": \"chat.completion\",\n \"created\": 1741733134,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"command\\\": \\\"make:model Plane -m -c\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 514,\n \"completion_tokens\": 20,\n \"total_tokens\": 534,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Console/SynapseArtisan-a1d524092dba5bbe9f4a0bb7e0b9f909.json b/tests/Fixtures/Saloon/Console/SynapseArtisan-a1d524092dba5bbe9f4a0bb7e0b9f909.json deleted file mode 100644 index 73787c6..0000000 --- a/tests/Fixtures/Saloon/Console/SynapseArtisan-a1d524092dba5bbe9f4a0bb7e0b9f909.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 21:55:47 GMT", - "Content-Type": "application\/json", - "Content-Length": "688", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ6Harhiy1IiRSI7NHNE0pzdk5BoB\",\n \"object\": \"chat.completion\",\n \"created\": 1729115746,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"command\\\": \\\"make:model Plane -m -c\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 512,\n \"completion_tokens\": 19,\n \"total_tokens\": 531,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Console/SynapseArtisan-c1496a59f5142396d808855025edb586.json b/tests/Fixtures/Saloon/Console/SynapseArtisan-c1496a59f5142396d808855025edb586.json deleted file mode 100644 index ae3bae0..0000000 --- a/tests/Fixtures/Saloon/Console/SynapseArtisan-c1496a59f5142396d808855025edb586.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 21:55:29 GMT", - "Content-Type": "application/json", - "Content-Length": "686", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ6HJu0uzlLcWzIvoCbjt8vtYH1jy\",\n \"object\": \"chat.completion\",\n \"created\": 1729115729,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"command\\\": \\\"make:model Flight -m\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 458,\n \"completion_tokens\": 17,\n \"total_tokens\": 475,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_4dba7dd7b3\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Console/SynapseArtisan-d04b51b713a0ff18d2779ed7991fbc0b.json b/tests/Fixtures/Saloon/Console/SynapseArtisan-d04b51b713a0ff18d2779ed7991fbc0b.json deleted file mode 100644 index 98431b7..0000000 --- a/tests/Fixtures/Saloon/Console/SynapseArtisan-d04b51b713a0ff18d2779ed7991fbc0b.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:42 GMT", - "Content-Type": "application\/json", - "Content-Length": "688", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1006", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999494", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "15ms", - "x-request-id": "req_09331ab953779e8e8fa0fb2d0d57675b", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=5XgyM459nLkc9RlYR63oDfEL7w64CmAic2MqckG9vS4-1729560522-1.0.1.1-XDx0oD4aIYopGa_93NH.b5fjWNz5zliz9_Em41fKzJX2Lpd72yoNaBqPJa6LmdueNUC8lSu0.b76EawU5FQiuw; path=\/; expires=Tue, 22-Oct-24 01:58:42 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=dWLooX_xtpDA4mDJi5ryLB2F_kga5Dqp9psHIn38qrQ-1729560522586-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b64b0e464414-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzNhcfKVnsynbDO81nnCxxGYzxx\",\n \"object\": \"chat.completion\",\n \"created\": 1729560521,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"command\\\": \\\"make:model Plane -m -c\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 547,\n \"completion_tokens\": 19,\n \"total_tokens\": 566,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-0b01a311e346b7ad882115c9bdbd879c.json b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-0b01a311e346b7ad882115c9bdbd879c.json deleted file mode 100644 index 785af61..0000000 --- a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-0b01a311e346b7ad882115c9bdbd879c.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 03 Oct 2024 17:21:07 GMT", - "Content-Type": "application/json", - "Content-Length": "553", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01NssnktW2V8zuU7Jd46RV7y\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is the 46th president of the United States and took office in 2021. Joe Biden previously served as the 47th Vice President of the United States and represented Delaware in the US Senate for 36 years before becoming president.\\\"\\n}\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":181,\"output_tokens\":73}}" -} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-2384f5379c63d4a79106a90e25db0613.json b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-2384f5379c63d4a79106a90e25db0613.json deleted file mode 100644 index 436d80a..0000000 --- a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-2384f5379c63d4a79106a90e25db0613.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 08 Oct 2024 23:28:12 GMT", - "Content-Type": "application\/json", - "Content-Length": "408", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01WYJG7akjyJXCsBfbxabZ9o\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"```json\\n{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is serving as the 46th president of the United States since 2021.\\\"\\n}\\n```\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1440,\"output_tokens\":46}}" -} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-9e4ad814794b1055d28d99c79ff01b37.json b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-9e4ad814794b1055d28d99c79ff01b37.json deleted file mode 100644 index 65ba85b..0000000 --- a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-9e4ad814794b1055d28d99c79ff01b37.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 03 Oct 2024 17:21:04 GMT", - "Content-Type": "application\/json", - "Content-Length": "523", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01BCmUueKuM5LNUnyVsYvVaE\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"Certainly! I'll use the Google search tool to find information about the current president of the United States for you.\"},{\"type\":\"tool_use\",\"id\":\"toolu_019TcpRFgSYNTm48xupzaqH1\",\"name\":\"serper_tool\",\"input\":{\"query\":\"current president of the United States\",\"searchType\":\"search\"}}],\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":517,\"output_tokens\":101}}" -} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-Serper-Tool.json b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-Serper-Tool.json index 7576b1b..1e1218a 100644 --- a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-Serper-Tool.json +++ b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-Serper-Tool.json @@ -1,11 +1,10 @@ { - "statusCode": 200, - "headers": { - "access-control-allow-origin": "*", - "x-ratelimit-limit": "500", - "x-ratelimit-remaining": "499", - "x-ratelimit-reset": "1725375100", - "content-type": "application/json; charset=utf-8" - }, - "data": "{\"searchParameters\":{\"q\":\"current President of the United States\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States / President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https://en.wikipedia.org/wiki/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"position\":1},{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https://www.whitehouse.gov/administration/president-biden/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":2},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https://www.usa.gov/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Dec 6, 2023\",\"position\":3},{\"title\":\"President of the United States\",\"link\":\"https://usun.usmission.gov/our-leaders/the-president-of-the-united-states/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":4},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https://www.whitehouse.gov/about-the-white-house/our-government/the-executive-branch/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":5},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram profile\",\"link\":\"https://www.instagram.com/potus/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4282 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus, proud dad and ...\",\"position\":6},{\"title\":\"President Joe Biden - Facebook\",\"link\":\"https://www.facebook.com/POTUS/\",\"snippet\":\"President Joe Biden. 10344211 likes \u00b7 287600 talking about this. 46th President of the United States, husband to @FLOTUS, proud father and pop. Text...\",\"position\":7},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https://en.wikipedia.org/wiki/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician serving as the 46th and current president of the United States since 2021.\",\"sitelinks\":[{\"title\":\"Political positions\",\"link\":\"https://en.wikipedia.org/wiki/Political_positions_of_Joe_Biden\"},{\"title\":\"Electoral history\",\"link\":\"https://en.wikipedia.org/wiki/Electoral_history_of_Joe_Biden\"},{\"title\":\"United States House Oversight\",\"link\":\"https://en.wikipedia.org/wiki/United_States_House_Oversight_Committee_investigation_into_the_Biden_family\"},{\"title\":\"Jill Biden\",\"link\":\"https://en.wikipedia.org/wiki/Jill_Biden\"}],\"position\":8},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https://www.britannica.com/video/226766/who-is-President-Joe-Biden\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"imageUrl\":\"https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTy2z3ONNaR5BsVyaVUp_PIfgjZYBB-erXUwbbLCz-1jox2T8j1i9A6FA0\",\"position\":9},{\"title\":\"Joe Biden | Biography, Family, Policies, & Facts - Britannica\",\"link\":\"https://www.britannica.com/biography/Joe-Biden\",\"snippet\":\"Joe Biden, the 46th president of the United States, brings decades of political experience and a commitment to unity as he leads America through challenging ...\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the number 1 US president?\",\"snippet\":\"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\"title\":\"Historical rankings of presidents of the United States - Wikipedia\",\"link\":\"https://en.wikipedia.org/wiki/Historical_rankings_of_presidents_of_the_United_States\"},{\"question\":\"Who is next in line for President of us?\",\"snippet\":\"No.\\nOffice\\nParty\\n1\\nVice President\\nDemocratic\\n2\\nSpeaker of the House of Representatives\\nRepublican\\n3\\nPresident pro tempore of the Senate\\nDemocratic\\n4\\nSecretary of State\\nDemocratic\",\"title\":\"United States presidential line of succession - Wikipedia\",\"link\":\"https://en.wikipedia.org/wiki/United_States_presidential_line_of_succession\"},{\"question\":\"Who is the Vice President of the United States today?\",\"snippet\":\"Kamala D. Harris is the Vice President of the United States of America.\",\"title\":\"Vice President of the United States\",\"link\":\"https://ec.usembassy.gov/our-relationship/vice-president/\"},{\"question\":\"Who was the youngest President of the US?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https://en.wikipedia.org/wiki/List_of_presidents_of_the_United_States_by_age\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"All Presidents in order\"},{\"query\":\"48th president of the United States\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"First president of USA\"},{\"query\":\"Joe Biden age\"},{\"query\":\"Who is the Prime Minister of USA\"}],\"credits\":1}" + "statusCode": 200, + "headers": { + "access-control-allow-origin": "*", + "x-ratelimit-limit": "500", + "x-ratelimit-remaining": "499", + "x-ratelimit-reset": "1729895750" + }, + "data": "{\"searchParameters\":{\"q\":\"current president of the United States\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States \/ President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4491 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus ...\",\"date\":\"2 days ago\",\"position\":4},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Sep 20, 2024\",\"position\":5},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":6},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"position\":7},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"position\":8},{\"title\":\"President of the United States - Ballotpedia\",\"link\":\"https:\/\/ballotpedia.org\/President_of_the_United_States\",\"snippet\":\"Article II of the U.S. Constitution laid out the requirements and roles of the president. The current president is Joe Biden (D). Election requirements.\",\"position\":9},{\"title\":\"Joe Biden | Biography, Family, Policies, & Facts | Britannica\",\"link\":\"https:\/\/www.britannica.com\/biography\/Joe-Biden\",\"snippet\":\"Joe Biden, the 46th president of the United States, brings decades of political experience and a commitment to unity as he leads America ...\",\"date\":\"Oct 7, 2024\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the new president of the United States?\",\"snippet\":\"As President, Biden will restore America's leadership and build our communities back better.\",\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\"},{\"question\":\"Who was the youngest president of the USA?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age\"},{\"question\":\"Who is number 1 president?\",\"snippet\":\"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\"title\":\"Historical rankings of presidents of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Historical_rankings_of_presidents_of_the_United_States\"},{\"question\":\"Who was the 47th vice president?\",\"snippet\":\"Joseph Robinette Biden, Jr., represented Delaware for 36 years in the U.S. Senate before becoming the 47th and current Vice President of the United States.\",\"title\":\"Vice President Joe Biden | The White House\",\"link\":\"https:\/\/obamawhitehouse.archives.gov\/vp\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"47th President of the United States\"},{\"query\":\"48th President of the United States\"},{\"query\":\"All Presidents in order\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"Is Joe Biden still president\"}],\"credits\":1}" } diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-f53d2674b3ae26af9917b35b24751e4e.json b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-f53d2674b3ae26af9917b35b24751e4e.json deleted file mode 100644 index 498615f..0000000 --- a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent-f53d2674b3ae26af9917b35b24751e4e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Thu, 03 Oct 2024 17:21:06 GMT", - "Content-Type": "application/json", - "Content-Length": "685", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01QXkWJFEt4ovqFcChsaTsf2\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"Based on the search results, I can provide you with the answer about the current president of the United States.\\n\\n```json\\n{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is the 46th president of the United States and took office in 2021. Joe Biden previously served as the 47th Vice President of the United States and represented Delaware in the US Senate for 36 years before becoming president.\\\"\\n}\\n```\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1367,\"output_tokens\":102}}" -} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent.json b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent.json index b571f73..5dac74a 100644 --- a/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent.json +++ b/tests/Fixtures/Saloon/Integrations/ClaudeTestAgent.json @@ -1,16 +1,10 @@ { "statusCode": 200, "headers": { - "Date": "Wed, 04 Sep 2024 13:34:55 GMT", + "Date": "Fri, 25 Oct 2024 22:35:46 GMT", "Content-Type": "application/json", - "Content-Length": "315", - "Connection": "keep-alive", - "anthropic-ratelimit-requests-limit": "50", - "anthropic-ratelimit-requests-remaining": "49", - "anthropic-ratelimit-requests-reset": "2024-09-04T13:35:21Z", - "anthropic-ratelimit-tokens-limit": "40000", - "anthropic-ratelimit-tokens-remaining": "40000", - "anthropic-ratelimit-tokens-reset": "2024-09-04T13:34:55Z" + "Content-Length": "302", + "Connection": "keep-alive" }, - "data": "{\"id\":\"msg_01Uxhp67wAnDLJVgH9rKc7mX\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"```json\\n{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\\n```\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":56,\"output_tokens\":26}}" + "data": "{\"id\":\"msg_01LmxHhUUB5iGNX8hd7CHQdm\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":102,\"output_tokens\":21}}" } diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-0700e950a65562155bd8920325b51181.json b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-0700e950a65562155bd8920325b51181.json new file mode 100644 index 0000000..f72d102 --- /dev/null +++ b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-0700e950a65562155bd8920325b51181.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 22:35:52 GMT", + "Content-Type": "application/json", + "Content-Length": "693", + "Connection": "keep-alive" + }, + "data": "{\"id\":\"msg_01U46oa7ef3riiRKkdj7tYHS\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"Based on the search results, I can provide you with the information about the current president of the United States.\\n\\n```json\\n{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is the 46th president of the United States, having taken office in 2021. Biden previously served as the 47th Vice President of the United States and represented Delaware in the U.S. Senate for 36 years before becoming president.\\\"\\n}\\n```\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1634,\"output_tokens\":105}}" +} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-652ecfbf9539e59a6fd65d11f1a2fba2.json b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-652ecfbf9539e59a6fd65d11f1a2fba2.json deleted file mode 100644 index c5e3d87..0000000 --- a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-652ecfbf9539e59a6fd65d11f1a2fba2.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:10:34 GMT", - "Content-Type": "application\/json", - "Content-Length": "554", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01UhGwrG9YgACCgLu48F2tx8\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is the 46th president of the United States and took office in 2021. Joe Biden previously served as the 47th Vice President of the United States and represented Delaware in the US Senate for 36 years before becoming president.\\\"\\n}\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1610,\"output_tokens\":73}}" -} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-74cc9ac7d39fc2dbb068a35c3b4154a8.json b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-74cc9ac7d39fc2dbb068a35c3b4154a8.json new file mode 100644 index 0000000..00f8819 --- /dev/null +++ b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-74cc9ac7d39fc2dbb068a35c3b4154a8.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 22:35:54 GMT", + "Content-Type": "application\/json", + "Content-Length": "557", + "Connection": "keep-alive" + }, + "data": "{\"id\":\"msg_01V8MMPaJ5dns4C1KavzLoXq\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is the 46th president of the United States, having taken office in 2021. Biden previously served as the 47th Vice President of the United States and represented Delaware in the U.S. Senate for 36 years before becoming president.\\\"\\n}\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1834,\"output_tokens\":76}}" +} diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-9e4ad814794b1055d28d99c79ff01b37.json b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-9e4ad814794b1055d28d99c79ff01b37.json index e048e02..7fb8c64 100644 --- a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-9e4ad814794b1055d28d99c79ff01b37.json +++ b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-9e4ad814794b1055d28d99c79ff01b37.json @@ -1,10 +1,10 @@ { - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:10:30 GMT", - "Content-Type": "application/json", - "Content-Length": "557", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01Eq8LoF24ttPcPdZCx5FVzq\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"To search Google for information about the current president of the United States, I'll use the serper_tool function. Here's how I'll structure the query:\"},{\"type\":\"tool_use\",\"id\":\"toolu_01AZWBaBr57C7x92FbW8GxuX\",\"name\":\"serper_tool\",\"input\":{\"query\":\"current president of the United States\",\"searchType\":\"search\"}}],\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":554,\"output_tokens\":111}}" + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 22:35:49 GMT", + "Content-Type": "application\/json", + "Content-Length": "523", + "Connection": "keep-alive" + }, + "data": "{\"id\":\"msg_01C2qd8JZoxH5moRkypwc8cT\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"Certainly! I'll use the Google search tool to find information about the current president of the United States for you.\"},{\"type\":\"tool_use\",\"id\":\"toolu_01Ao9PHvVowGeBp41eFnNxHo\",\"name\":\"serper_tool\",\"input\":{\"query\":\"current president of the United States\",\"searchType\":\"search\"}}],\"stop_reason\":\"tool_use\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":554,\"output_tokens\":102}}" } diff --git a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-e6ed7a42ff9b7106aa22db121275e575.json b/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-e6ed7a42ff9b7106aa22db121275e575.json deleted file mode 100644 index 6131849..0000000 --- a/tests/Fixtures/Saloon/Integrations/ClaudeToolTestAgent-e6ed7a42ff9b7106aa22db121275e575.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:10:32 GMT", - "Content-Type": "application\/json", - "Content-Length": "690", - "Connection": "keep-alive" - }, - "data": "{\"id\":\"msg_01BmxjB7URqBjdHs994ijozw\",\"type\":\"message\",\"role\":\"assistant\",\"model\":\"claude-3-5-sonnet-20240620\",\"content\":[{\"type\":\"text\",\"text\":\"Based on the search results, I can provide you with the information about the current president of the United States.\\n\\n```json\\n{\\n \\\"answer\\\": \\\"The current president of the United States is Joe Biden. He is the 46th president of the United States and took office in 2021. Joe Biden previously served as the 47th Vice President of the United States and represented Delaware in the US Senate for 36 years before becoming president.\\\"\\n}\\n```\"}],\"stop_reason\":\"end_turn\",\"stop_sequence\":null,\"usage\":{\"input_tokens\":1413,\"output_tokens\":102}}" -} diff --git a/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-Serper-Tool.json b/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-Serper-Tool.json index 3d1b7bf..24b0157 100644 --- a/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-Serper-Tool.json +++ b/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-Serper-Tool.json @@ -4,15 +4,15 @@ "access-control-allow-origin": "*", "x-ratelimit-limit": "500", "x-ratelimit-remaining": "499", - "x-ratelimit-reset": "1729559610", + "x-ratelimit-reset": "1729895590", "content-type": "application\/json; charset=utf-8", - "x-cloud-trace-context": "3306ea4ecb0fdb4d634a34089f9366bc", - "set-cookie": "GAESA=CowBMDA3OTg5ZjJhMTUxNDY0YzcyYTk1Mjg4MzA4N2QwNGUwNjgwZjVhNWI3OWI3YmEyNmU2NjAyZGQzMDMxZDI5Yzg0NzNmOWUyZDY0YzJjMzQ0MTI2ODNjOGNiN2QyZmJlNTllZGEzZTRjYjU5MGI2NGFmYzg2NmQxMGMwODFiYmM2MzhhYjE1YmJiMDUQhISljqsy; expires=Thu, 21-Nov-2024 01:13:29 GMT; path=\/", - "date": "Tue, 22 Oct 2024 01:13:29 GMT", + "x-cloud-trace-context": "35a8df804c3e269c3c7b2bd134fb4039", + "set-cookie": "GAESA=Co4BMDA0OTQwYjNiODMxZTc0NDA2YmU2MThjNDg0NDhkY2JkOGVjZTI2OTQ2M2VhZmY2NDBmN2NlMGRmODdlMWI0MTg5MmE2MDYzYzIxZTI4NDIzMmU4MWJlNjdmNzVhYTZhZDYyMGVjNTYyYmM1N2QzNjQ0YmQxMThhZDM3OTkxZGEyNmIzZGJhNmQ3Mzc4NhCWt7-urDI; expires=Sun, 24-Nov-2024 22:33:06 GMT; path=\/", + "date": "Fri, 25 Oct 2024 22:33:06 GMT", "server": "Google Frontend", - "Content-Length": "5698", + "Content-Length": "5250", "via": "1.1 google", "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" }, - "data": "{\"searchParameters\":{\"q\":\"current president of the united states\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office of the\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4480 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus, proud dad and ...\",\"position\":4},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Sep 20, 2024\",\"position\":5},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":6},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"position\":7},{\"title\":\"President Joe Biden - Facebook\",\"link\":\"https:\/\/www.facebook.com\/POTUS\/\",\"snippet\":\"President Joe Biden. 10328420 likes \u00b7 100413 talking about this. 46th President of the United States, husband to @FLOTUS, proud father and pop. Text...\",\"sitelinks\":[{\"title\":\"Photos\",\"link\":\"https:\/\/m.facebook.com\/POTUS\/photos\/\"},{\"title\":\"Followers\",\"link\":\"https:\/\/m.facebook.com\/POTUS\/followers\/\"},{\"title\":\"Iniciar sesi\u00f3n\",\"link\":\"https:\/\/www.facebook.com\/POTUS\/?locale=es_LA\"},{\"title\":\"\u8a73\u7d30\u8cc7\u6599\",\"link\":\"https:\/\/m.facebook.com\/POTUS\/?locale=zh_TW\"}],\"position\":8},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"position\":9},{\"title\":\"President Joe Biden | CNN Politics\",\"link\":\"https:\/\/www.cnn.com\/politics\/joe-biden\",\"snippet\":\"CNN coverage of Joseph R. Biden, the 46th president of the United States \u00b7 Latest Headlines \u00b7 Latest Video \u00b7 Spotlight \u00b7 Vice President Kamala Harris \u00b7 More News.\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the new president of the United States?\",\"snippet\":\"President Biden graduated from the University of Delaware and Syracuse Law School and served on the New Castle County Council. At age 29, President Biden became one of the youngest Americans ever elected to the United States Senate.\",\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\"},{\"question\":\"Who was the youngest president of the USA?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age\"},{\"question\":\"Who is the 50th president?\",\"snippet\":\"Joseph R. Biden Jr.\",\"title\":\"Presidents | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/presidents\/\"},{\"question\":\"Who is number 1 president?\",\"snippet\":\"On April 30, 1789, George Washington, standing on the balcony of Federal Hall on Wall Street in New York, took his oath of office as the first President of the United States.\",\"title\":\"George Washington | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/presidents\/george-washington\/\"}],\"relatedSearches\":[{\"query\":\"Who is the current Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"Who is the 47th President of the United States\"},{\"query\":\"All Presidents in order\"},{\"query\":\"Joe Biden age\"},{\"query\":\"48th President of the United States\"},{\"query\":\"Is Joe Biden still president\"}],\"credits\":1}" + "data": "{\"searchParameters\":{\"q\":\"the current president of the united states.\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4491 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus ...\",\"date\":\"2 days ago\",\"position\":4},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Sep 20, 2024\",\"position\":5},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":6},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"position\":7},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"position\":8},{\"title\":\"President of the United States - Ballotpedia\",\"link\":\"https:\/\/ballotpedia.org\/President_of_the_United_States\",\"snippet\":\"Article II of the U.S. Constitution laid out the requirements and roles of the president. The current president is Joe Biden (D). Election requirements.\",\"position\":9},{\"title\":\"President of the United States - U.S. Embassy & Consulates in India\",\"link\":\"https:\/\/in.usembassy.gov\/our-relationship\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the new president in American?\",\"snippet\":\"In all, 45 individuals have served 46 presidencies spanning 58 four-year terms. Joe Biden is the 46th and current president, having assumed office on January 20, 2021.\",\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\"},{\"question\":\"Who is the #1 president?\",\"snippet\":\"On April 30, 1789, George Washington, standing on the balcony of Federal Hall on Wall Street in New York, took his oath of office as the first President of the United States.\",\"title\":\"George Washington | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/presidents\/george-washington\/\"},{\"question\":\"Who is the USA president?\",\"snippet\":\"Joe Biden\\nJoe Biden: The President. The White House.\",\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\"},{\"question\":\"Is Joe Biden still president?\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"48th President of the United States\"},{\"query\":\"u.s. president list\"},{\"query\":\"47th President of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"Is Kamala Harris President\"}],\"credits\":1}" } \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-d8f986e1f1fc626f7d0d10b0fd2ba58f.json b/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-d8f986e1f1fc626f7d0d10b0fd2ba58f.json index b5935b5..3702e70 100644 --- a/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-d8f986e1f1fc626f7d0d10b0fd2ba58f.json +++ b/tests/Fixtures/Saloon/Integrations/OllamaTestAgent-d8f986e1f1fc626f7d0d10b0fd2ba58f.json @@ -2,8 +2,8 @@ "statusCode": 200, "headers": { "Content-Type": "application\/json; charset=utf-8", - "Date": "Tue, 22 Oct 2024 01:12:45 GMT", - "Content-Length": "330" + "Date": "Fri, 25 Oct 2024 22:32:43 GMT", + "Content-Length": "331" }, - "data": "{\"model\":\"llama3.2\",\"created_at\":\"2024-10-22T01:12:45.859244298Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n \\\"answer\\\": \\\"Hello!\\\" }\\n```\"},\"done_reason\":\"stop\",\"done\":true,\"total_duration\":2645440997,\"load_duration\":20609427,\"prompt_eval_count\":111,\"prompt_eval_duration\":1796052000,\"eval_count\":11,\"eval_duration\":704477000}" + "data": "{\"model\":\"llama3.2\",\"created_at\":\"2024-10-25T22:32:43.781790706Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n \\\"answer\\\": \\\"Hi there!\\\"\\n}\"},\"done_reason\":\"stop\",\"done\":true,\"total_duration\":5583213110,\"load_duration\":2327188911,\"prompt_eval_count\":111,\"prompt_eval_duration\":2533807000,\"eval_count\":11,\"eval_duration\":680305000}" } \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-73a9b9db662176ac0a3ed17dec715886.json b/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-73a9b9db662176ac0a3ed17dec715886.json deleted file mode 100644 index 6aa8e64..0000000 --- a/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-73a9b9db662176ac0a3ed17dec715886.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Content-Type": "application\/json; charset=utf-8", - "Date": "Tue, 22 Oct 2024 01:13:52 GMT", - "Content-Length": "391" - }, - "data": "{\"model\":\"llama3.2\",\"created_at\":\"2024-10-22T01:13:52.227941545Z\",\"message\":{\"role\":\"assistant\",\"content\":\"```\\n{\\n \\\"answer\\\": \\\"The current President of the United States is Joe Biden.\\\"\\n}\\n```\"},\"done_reason\":\"stop\",\"done\":true,\"total_duration\":22040210143,\"load_duration\":20179864,\"prompt_eval_count\":855,\"prompt_eval_duration\":20239842000,\"eval_count\":22,\"eval_duration\":1568235000}" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-c0527b86cfc080fa4aaa3255dd06edfc.json b/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-c0527b86cfc080fa4aaa3255dd06edfc.json index 7514713..5e22d51 100644 --- a/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-c0527b86cfc080fa4aaa3255dd06edfc.json +++ b/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-c0527b86cfc080fa4aaa3255dd06edfc.json @@ -1,9 +1,9 @@ { - "statusCode": 200, - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Date": "Tue, 22 Oct 2024 01:13:28 GMT", - "Content-Length": "456" - }, - "data": "{\"model\":\"llama3.2\",\"created_at\":\"2024-10-22T01:13:28.947376961Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"function\":{\"name\":\"serper_tool\",\"arguments\":{\"numberOfResults\":\"10\",\"query\":\"current president of the united states\",\"searchType\":\"search\"}}}]},\"done_reason\":\"stop\",\"done\":true,\"total_duration\":9544760508,\"load_duration\":19568592,\"prompt_eval_count\":325,\"prompt_eval_duration\":7393902000,\"eval_count\":29,\"eval_duration\":2007733000}" -} + "statusCode": 200, + "headers": { + "Content-Type": "application\/json; charset=utf-8", + "Date": "Fri, 25 Oct 2024 22:32:53 GMT", + "Content-Length": "461" + }, + "data": "{\"model\":\"llama3.2\",\"created_at\":\"2024-10-25T22:32:53.341652928Z\",\"message\":{\"role\":\"assistant\",\"content\":\"\",\"tool_calls\":[{\"function\":{\"name\":\"serper_tool\",\"arguments\":{\"numberOfResults\":\"10\",\"query\":\"the current president of the united states.\",\"searchType\":\"search\"}}}]},\"done_reason\":\"stop\",\"done\":true,\"total_duration\":9449725558,\"load_duration\":15762599,\"prompt_eval_count\":325,\"prompt_eval_duration\":7271351000,\"eval_count\":30,\"eval_duration\":2037525000}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-f1744f93cad29395237a8874e3527b0d.json b/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-f1744f93cad29395237a8874e3527b0d.json new file mode 100644 index 0000000..9c9c00d --- /dev/null +++ b/tests/Fixtures/Saloon/Integrations/OllamaToolTestAgent-f1744f93cad29395237a8874e3527b0d.json @@ -0,0 +1,9 @@ +{ + "statusCode": 200, + "headers": { + "Content-Type": "application\/json; charset=utf-8", + "Date": "Fri, 25 Oct 2024 22:33:32 GMT", + "Content-Length": "373" + }, + "data": "{\"model\":\"llama3.2\",\"created_at\":\"2024-10-25T22:33:32.714183387Z\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\\"answer\\\":\\\"Joe Biden is the current president of the United States.\\\"}\"},\"done_reason\":\"stop\",\"done\":true,\"total_duration\":25843897079,\"load_duration\":21748238,\"prompt_eval_count\":1036,\"prompt_eval_duration\":24480786000,\"eval_count\":16,\"eval_duration\":1123629000}" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Integrations/OpenAiTestAgent.json b/tests/Fixtures/Saloon/Integrations/OpenAiTestAgent.json index 29bdd4e..4995096 100644 --- a/tests/Fixtures/Saloon/Integrations/OpenAiTestAgent.json +++ b/tests/Fixtures/Saloon/Integrations/OpenAiTestAgent.json @@ -1,10 +1,27 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:14:46 GMT", + "Date": "Fri, 25 Oct 2024 22:29:57 GMT", "Content-Type": "application/json", "Content-Length": "655", - "Connection": "keep-alive" + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "440", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999879", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "3ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKxltPt5yDOlBBJmGR7TAth1NH7bS\",\n \"object\": \"chat.completion\",\n \"created\": 1729559685,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Hello!\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 96,\n \"completion_tokens\": 9,\n \"total_tokens\": 105,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" + "data": "{\n \"id\": \"chatcmpl-AMN6bR6Xy3bGwGT4fZppmiTROIaSz\",\n \"object\": \"chat.completion\",\n \"created\": 1729895397,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Hello!\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 96,\n \"completion_tokens\": 9,\n \"total_tokens\": 105,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" } diff --git a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-4715cf69359c579bd0b0aaebdb3cfe92.json b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-4715cf69359c579bd0b0aaebdb3cfe92.json new file mode 100644 index 0000000..78d644a --- /dev/null +++ b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-4715cf69359c579bd0b0aaebdb3cfe92.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 22:27:22 GMT", + "Content-Type": "application\/json", + "Content-Length": "676", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "758", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1998980", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "30ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMN46XDLyBLBkffKn7kulT68HGqvo\",\n \"object\": \"chat.completion\",\n \"created\": 1729895242,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1140,\n \"completion_tokens\": 15,\n \"total_tokens\": 1155,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json index 44ec98b..f2eb12b 100644 --- a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json +++ b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json @@ -1,10 +1,27 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:14:47 GMT", + "Date": "Fri, 25 Oct 2024 22:27:21 GMT", "Content-Type": "application\/json", - "Content-Length": "985", - "Connection": "keep-alive" + "Content-Length": "984", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "1191", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999865", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "4ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKxluvQCEThkm2qOIuQGOzO4ije0d\",\n \"object\": \"chat.completion\",\n \"created\": 1729559686,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_mL9H73EAkD9uUEPZLbDITNRK\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\",\\\"searchType\\\":\\\"search\\\",\\\"numberOfResults\\\":10}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 213,\n \"completion_tokens\": 30,\n \"total_tokens\": 243,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" + "data": "{\n \"id\": \"chatcmpl-AMN44jCGNROnJSVGGCuPuos6eLyoe\",\n \"object\": \"chat.completion\",\n \"created\": 1729895240,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_I0yDdVlYb6QX0TeS3OPfpwDJ\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\",\\\"searchType\\\":\\\"search\\\",\\\"numberOfResults\\\":1}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 213,\n \"completion_tokens\": 30,\n \"total_tokens\": 243,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" } diff --git a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-Serper-Tool.json b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-Serper-Tool.json index 87afe41..de0f4ba 100644 --- a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-Serper-Tool.json +++ b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-Serper-Tool.json @@ -4,7 +4,13 @@ "access-control-allow-origin": "*", "x-ratelimit-limit": "500", "x-ratelimit-remaining": "499", - "x-ratelimit-reset": "1729559690" + "x-ratelimit-reset": "1729894705", + "content-type": "application\/json; charset=utf-8", + "date": "Fri, 25 Oct 2024 22:18:23 GMT", + "server": "Google Frontend", + "Content-Length": "5687", + "via": "1.1 google", + "Alt-Svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000" }, - "data": "{\"searchParameters\":{\"q\":\"current president of the United States\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States \/ President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office of the\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4480 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus, proud dad and ...\",\"position\":4},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Sep 20, 2024\",\"position\":5},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":6},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"position\":7},{\"title\":\"President Joe Biden - Facebook\",\"link\":\"https:\/\/www.facebook.com\/POTUS\/\",\"snippet\":\"President Joe Biden. 10328420 likes \u00b7 100413 talking about this. 46th President of the United States, husband to @FLOTUS, proud father and pop. Text...\",\"sitelinks\":[{\"title\":\"Photos\",\"link\":\"https:\/\/m.facebook.com\/POTUS\/photos\/\"},{\"title\":\"Followers\",\"link\":\"https:\/\/m.facebook.com\/POTUS\/followers\/\"},{\"title\":\"Iniciar sesi\u00f3n\",\"link\":\"https:\/\/www.facebook.com\/POTUS\/?locale=es_LA\"},{\"title\":\"\u8a73\u7d30\u8cc7\u6599\",\"link\":\"https:\/\/m.facebook.com\/POTUS\/?locale=zh_TW\"}],\"position\":8},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"position\":9},{\"title\":\"President Joe Biden | CNN Politics\",\"link\":\"https:\/\/www.cnn.com\/politics\/joe-biden\",\"snippet\":\"CNN coverage of Joseph R. Biden, the 46th president of the United States \u00b7 Latest Headlines \u00b7 Latest Video \u00b7 Spotlight \u00b7 Vice President Kamala Harris \u00b7 More News.\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the new president of the United States?\",\"snippet\":\"President Biden graduated from the University of Delaware and Syracuse Law School and served on the New Castle County Council. At age 29, President Biden became one of the youngest Americans ever elected to the United States Senate.\",\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\"},{\"question\":\"Who was the youngest president of the USA?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age\"},{\"question\":\"Who is the 50th president?\",\"snippet\":\"Joseph R. Biden Jr.\",\"title\":\"Presidents | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/presidents\/\"},{\"question\":\"Who is number 1 president?\",\"snippet\":\"On April 30, 1789, George Washington, standing on the balcony of Federal Hall on Wall Street in New York, took his oath of office as the first President of the United States.\",\"title\":\"George Washington | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/presidents\/george-washington\/\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"47th President of the United States\"},{\"query\":\"48th President of the United States\"},{\"query\":\"All Presidents in order\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"Is Kamala Harris President\"}],\"credits\":1}" + "data": "{\"searchParameters\":{\"q\":\"current president of the United States\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States \/ President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4491 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus ...\",\"date\":\"2 days ago\",\"position\":4},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":5},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Sep 20, 2024\",\"position\":6},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"position\":7},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"position\":8},{\"title\":\"Presidents of the United States of America - Ohio Secretary of State\",\"link\":\"https:\/\/www.ohiosos.gov\/elections\/election-results-and-data\/historical-election-comparisons\/presidents-of-the-united-states-of-america\/\",\"snippet\":\"4,5 \u00b7 6,7 \u00b7 8,9 \u00b7 10 ; Thomas Jefferson \u00b7 James Madison \u00b7 James Monroe \u00b7 John Quincy Adams.\",\"position\":9},{\"title\":\"Joe Biden | Biography, Family, Policies, & Facts | Britannica\",\"link\":\"https:\/\/www.britannica.com\/biography\/Joe-Biden\",\"snippet\":\"Joe Biden, the 46th president of the United States, brings decades of political experience and a commitment to unity as he leads America ...\",\"date\":\"Oct 7, 2024\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the new president of the United States?\",\"snippet\":\"As President, Biden will restore America's leadership and build our communities back better.\",\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\"},{\"question\":\"Who was the youngest president of the USA?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age\"},{\"question\":\"Who is number 1 president?\",\"snippet\":\"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\"title\":\"Historical rankings of presidents of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Historical_rankings_of_presidents_of_the_United_States\"},{\"question\":\"Who was the 47th vice president?\",\"snippet\":\"Joseph Robinette Biden, Jr., represented Delaware for 36 years in the U.S. Senate before becoming the 47th and current Vice President of the United States.\",\"title\":\"Vice President Joe Biden | The White House\",\"link\":\"https:\/\/obamawhitehouse.archives.gov\/vp\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"47th President of the United States\"},{\"query\":\"All Presidents in order\"},{\"query\":\"48th President of the United States\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"Is Joe Biden still president\"}],\"credits\":1}" } diff --git a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-e0903793a2fa24d5a334f52b3d9b46c6.json b/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-e0903793a2fa24d5a334f52b3d9b46c6.json deleted file mode 100644 index bb86efc..0000000 --- a/tests/Fixtures/Saloon/Integrations/OpenAiToolTestAgent-e0903793a2fa24d5a334f52b3d9b46c6.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:14:50 GMT", - "Content-Type": "application\/json", - "Content-Length": "721", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKxlxlegF2fwElaov1NEa1vOeMdEQ\",\n \"object\": \"chat.completion\",\n \"created\": 1729559689,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden is the current President of the United States.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 913,\n \"completion_tokens\": 23,\n \"total_tokens\": 936,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Integrations/OpenAiWithOutResolveTestAgent.json b/tests/Fixtures/Saloon/Integrations/OpenAiWithOutResolveTestAgent.json index e4b03b7..74d89d8 100644 --- a/tests/Fixtures/Saloon/Integrations/OpenAiWithOutResolveTestAgent.json +++ b/tests/Fixtures/Saloon/Integrations/OpenAiWithOutResolveTestAgent.json @@ -1,12 +1,27 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:14:45 GMT", + "Date": "Fri, 25 Oct 2024 22:29:56 GMT", "Content-Type": "application/json", "Content-Length": "684", "Connection": "keep-alive", "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8" + "openai-organization": "REDACTED", + "openai-processing-ms": "570", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999879", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "3ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKxlsdzTgy5RBFI4xFRDzYCEcntKy\",\n \"object\": \"chat.completion\",\n \"created\": 1729559684,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 96,\n \"completion_tokens\": 16,\n \"total_tokens\": 112,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" + "data": "{\n \"id\": \"chatcmpl-AMN6a0FJNXKBL5nMNo3j6S37bfTxz\",\n \"object\": \"chat.completion\",\n \"created\": 1729895396,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 96,\n \"completion_tokens\": 16,\n \"total_tokens\": 112,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" } diff --git a/tests/Fixtures/Saloon/Memory/CollectionMemory-2b5f90ae806afa53a979306da93d9e84.json b/tests/Fixtures/Saloon/Memory/CollectionMemory-2b5f90ae806afa53a979306da93d9e84.json new file mode 100644 index 0000000..941fe6b --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/CollectionMemory-2b5f90ae806afa53a979306da93d9e84.json @@ -0,0 +1,31 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:45:38 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "1366", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999877", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "3ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "cf-cache-status": "DYNAMIC", + "Set-Cookie": [ + "__cf_bm=wWNfZoxQMmS6dKim6QcCoAL40L2W5cXKOLhC8CpZyxI-1741733138-1.0.1.1-Cc3oHpGWSMy0DgU4qKLKrtoad9DaxhDAImO3iV57tSsoMPOTGTBaxgthdKmCUt9xK7fGhuTBPjm2bhu48hbPbq1_RY8HdT5nHlsch_Tj7Eo; path=\/; expires=Tue, 11-Mar-25 23:15:38 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", + "_cfuvid=H8U2WRFV6qQm.Za5vBTkYRoS7KEciwnKhbPf5TWMago-1741733138148-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" + ], + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-BA2dsubK1Z9Akze1pzcIAN8KgSCtZ\",\n \"object\": \"chat.completion\",\n \"created\": 1741733136,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 99,\n \"completion_tokens\": 21,\n \"total_tokens\": 120,\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_7c63087da1\"\n}\n" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/CollectionMemory-71950ab35a36f639488c5a8c74463d53.json b/tests/Fixtures/Saloon/Memory/CollectionMemory-71950ab35a36f639488c5a8c74463d53.json deleted file mode 100644 index 98f2243..0000000 --- a/tests/Fixtures/Saloon/Memory/CollectionMemory-71950ab35a36f639488c5a8c74463d53.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:28:20 GMT", - "Content-Type": "application/json", - "Content-Length": "686", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIPMZyJn0AjYpBALB0dLISFsiWlY\",\n \"object\": \"chat.completion\",\n \"created\": 1728685700,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\".sdrawkcab tuB ?yas tsuj I did tahw\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 111,\n \"completion_tokens\": 22,\n \"total_tokens\": 133,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/CollectionMemory-8cefaea3e899f6f2489b3487aa0a040d.json b/tests/Fixtures/Saloon/Memory/CollectionMemory-8cefaea3e899f6f2489b3487aa0a040d.json deleted file mode 100644 index ae9194f..0000000 --- a/tests/Fixtures/Saloon/Memory/CollectionMemory-8cefaea3e899f6f2489b3487aa0a040d.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:47 GMT", - "Content-Type": "application\/json", - "Content-Length": "696", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1121", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999839", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "4ms", - "x-request-id": "req_2b5930e81733c8b7f1ddee551e567a47", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=rtVTw0q1TFFEVwSOd7WpGh5vmMRpuP2cdZQrjmEFrtg-1729560527-1.0.1.1-hD81VqTDMu1.Add5pC4YMEGU_DtRPMXygLNCXlQ2E8BW5axUaIYkhoRCv9WVlJ4anVbvkcSdtpMI3a4EBehBPQ; path=\/; expires=Tue, 22-Oct-24 01:58:47 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=mRRdQJ9aHmYamqkONyzsd9b7.c265OWt3VzncynmLmw-1729560527465-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b668eb15c34b-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzSIWl0HaNUOKyw7yzEu9IDAzTn\",\n \"object\": \"chat.completion\",\n \"created\": 1729560526,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"?sdrawkcaB .yas tsuj I did tahw\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 150,\n \"completion_tokens\": 25,\n \"total_tokens\": 175,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/CollectionMemory-d14909a03783ba5b88f3dea252a1f37a.json b/tests/Fixtures/Saloon/Memory/CollectionMemory-d14909a03783ba5b88f3dea252a1f37a.json deleted file mode 100644 index 361a3ed..0000000 --- a/tests/Fixtures/Saloon/Memory/CollectionMemory-d14909a03783ba5b88f3dea252a1f37a.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:28:19 GMT", - "Content-Type": "application\/json", - "Content-Length": "683", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIPLTeiKo9T8X7gTB8e014CNDy21\",\n \"object\": \"chat.completion\",\n \"created\": 1728685699,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 71,\n \"completion_tokens\": 16,\n \"total_tokens\": 87,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/CollectionMemory-dfff118fdeea050656d98836a66f4f01.json b/tests/Fixtures/Saloon/Memory/CollectionMemory-dfff118fdeea050656d98836a66f4f01.json new file mode 100644 index 0000000..cc05622 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/CollectionMemory-dfff118fdeea050656d98836a66f4f01.json @@ -0,0 +1,31 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:45:41 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "3097", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999854", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "4ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "cf-cache-status": "DYNAMIC", + "Set-Cookie": [ + "__cf_bm=hEoe0baAvLIBOlZ33YXZLjprmy3gz8Cm9gj9cpvi9qE-1741733141-1.0.1.1-wpMa0aKelK2.LEj6bZz1XW_2KTbwypOMt_X_RBCcq17LqFrs2d01xDovUkyWN38Nh8aDv8H92hWuADagKjhTyZssA96wPFALty632QiTGNg; path=\/; expires=Tue, 11-Mar-25 23:15:41 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", + "_cfuvid=sJ2OgXay21v_fLK50anb72ebC0jJNd7KIHi5lVonjAs-1741733141504-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" + ], + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-BA2dugae1Y6j19SmPYBZXpAu52hb4\",\n \"object\": \"chat.completion\",\n \"created\": 1741733138,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"?yadot uoy tsi**a**ss I nac woH !olleH\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 128,\n \"completion_tokens\": 32,\n \"total_tokens\": 160,\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_bf9cb2c77f\"\n}\n" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/CollectionMemory-fe703367aa1f98d7884652612a3c77a6.json b/tests/Fixtures/Saloon/Memory/CollectionMemory-fe703367aa1f98d7884652612a3c77a6.json deleted file mode 100644 index 39fa424..0000000 --- a/tests/Fixtures/Saloon/Memory/CollectionMemory-fe703367aa1f98d7884652612a3c77a6.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:45 GMT", - "Content-Type": "application\/json", - "Content-Length": "699", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "645", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999871", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_d812e4f7e5835d70aed6a7319b731fdb", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=Ielj7HJ5UFyX1roQLJHPvepuIehAM00fGDBAtQ5wUVU-1729560525-1.0.1.1-.qJGpK6juks6BfzGmMMeSLlzfRDU63kCPVhOF5y7CacYYgbhGrLLGiyBaW7JC1Ea0Q9SCvgCfbx7t1Tw8V12ww; path=\/; expires=Tue, 22-Oct-24 01:58:45 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=hpAxlShffUqZT5swLIFFLD939cV0QQyKvtprK1dun0c-1729560525912-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b6622f7c41df-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzRHZJw0xhYEPqhXoMLP3CG36qC\",\n \"object\": \"chat.completion\",\n \"created\": 1729560525,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 106,\n \"completion_tokens\": 20,\n \"total_tokens\": 126,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-2f7d9367ae0a307240ca69cc079676ea.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-2f7d9367ae0a307240ca69cc079676ea.json deleted file mode 100644 index 8c89961..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-2f7d9367ae0a307240ca69cc079676ea.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:30:22 GMT", - "Content-Type": "application\/json", - "Content-Length": "698", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIRJgqcHGgn4tAM7wgZRz5qZHeI6\",\n \"object\": \"chat.completion\",\n \"created\": 1728685821,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 85,\n \"completion_tokens\": 20,\n \"total_tokens\": 105,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-4d99e66b29cfdc8b1693e0ccf1306612.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-4d99e66b29cfdc8b1693e0ccf1306612.json new file mode 100644 index 0000000..f3715d3 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-4d99e66b29cfdc8b1693e0ccf1306612.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 23:00:41 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2sRBVIBbG4mJa6CxDU9reaNTB1k\",\n \"object\": \"chat.completion\",\n \"created\": 1741734039,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The conversation continues to focus solely on a test. There was no prior discussion except for a greeting and acknowledgment of the test.\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 153,\n \"completion_tokens\": 26,\n \"total_tokens\": 179,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-4de6d484520d502d2ee2f7cfc8d03616.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-4de6d484520d502d2ee2f7cfc8d03616.json new file mode 100644 index 0000000..9f90084 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-4de6d484520d502d2ee2f7cfc8d03616.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:56:32 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2oQbhZjIPTRSzlBW0EuboY39blj\",\n \"object\": \"chat.completion\",\n \"created\": 1741733790,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There was no prior conversation to summarize, beyond your greeting and mentioning that this is a test.\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 108,\n \"completion_tokens\": 31,\n \"total_tokens\": 139,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-5bb9375587f60ab90598e4e35ef208bb.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-5bb9375587f60ab90598e4e35ef208bb.json new file mode 100644 index 0000000..03c4b70 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-5bb9375587f60ab90598e4e35ef208bb.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 23:00:39 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2sPVx3GjzyfEMqR1KdXe1ZQIslg\",\n \"object\": \"chat.completion\",\n \"created\": 1741734037,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\".tset eht fo tnemelckwoda dna gniteerg a sedisdeb noissucsid roirp on saw ereht dna ,tset a evlovni snoitavresnoc eht svolni noitasrevnoC ##\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 136,\n \"completion_tokens\": 67,\n \"total_tokens\": 203,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-5e1fafee7be3b90f42757e4e40abcea4.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-5e1fafee7be3b90f42757e4e40abcea4.json deleted file mode 100644 index 36ab5ff..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-5e1fafee7be3b90f42757e4e40abcea4.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:48 GMT", - "Content-Type": "application\/json", - "Content-Length": "682", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "782", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999855", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "4ms", - "x-request-id": "req_c7812bf9445789a39c86210fbbb02ba2", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=vuy4vyIq7RR3thK2Hzr_6J1hGYcEVU_sOOMbQ94NTXg-1729560528-1.0.1.1-vXusK_QAoRJAlUc2d61BTJEv22ljCbPqGqZoBwxvNYoAaQph_P1KsD3_6Ax7tKQFFcHat7.bs4_JQ7w7uKfFPA; path=\/; expires=Tue, 22-Oct-24 01:58:48 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=YNNn.6fLfYYGc6dNguQNAetq7vf_sfGPlEG5d0haaiM-1729560528726-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b672eb6d0ca5-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzTjkbWKh9ao64cOPWDIRov1GFG\",\n \"object\": \"chat.completion\",\n \"created\": 1729560527,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"hello this a test\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 120,\n \"completion_tokens\": 16,\n \"total_tokens\": 136,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-6ca314ac196be36057a2a956836a6d8d.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-6ca314ac196be36057a2a956836a6d8d.json deleted file mode 100644 index cb3ccea..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-6ca314ac196be36057a2a956836a6d8d.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:49 GMT", - "Content-Type": "application\/json", - "Content-Length": "724", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "881", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999894", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_f83f9d9c34d6b164e361587b3194c7af", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=HtQfe9ZEiZRCCxBzOSUp6AaDT15vacOa0Jrght_B7WI-1729560529-1.0.1.1-9cn0ZEeutOeWovN1MNo4EYz_xlc3h9hGQ4ju.PEYGWEnXa.HMK7f5CauVgD2bx1uWkx1AchpRuQUITNTQruXrw; path=\/; expires=Tue, 22-Oct-24 01:58:49 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=x3it8V3bVr3kFFkcvhsJFqwaohKwUwxnzlqRKwrnX5c-1729560529986-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b67a2cd67c7c-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzVUNoLmGtlakUONmSyPFdxE77l\",\n \"object\": \"chat.completion\",\n \"created\": 1729560529,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\" and the assistant responds with \\\"hello this a test\\\".\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 92,\n \"completion_tokens\": 22,\n \"total_tokens\": 114,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-6ebf9da45af10a1c751df604f61ca011.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-6ebf9da45af10a1c751df604f61ca011.json deleted file mode 100644 index f528038..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-6ebf9da45af10a1c751df604f61ca011.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:30:23 GMT", - "Content-Type": "application/json", - "Content-Length": "738", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIRKyjaJUQ8xw4cEq7zM6jMEXj4T\",\n \"object\": \"chat.completion\",\n \"created\": 1728685822,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\". The assistant responded with \\\"Hello! How can I assist you today?\\\"\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 97,\n \"completion_tokens\": 25,\n \"total_tokens\": 122,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-88c99971ec0d20928a13254ec24d91e8.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-88c99971ec0d20928a13254ec24d91e8.json deleted file mode 100644 index 07e1751..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-88c99971ec0d20928a13254ec24d91e8.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:37:06 GMT", - "Content-Type": "application/json", - "Content-Length": "685", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "771", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999823", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "5ms", - "x-request-id": "req_73a10708637cf068130b21f6669e743f", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=3fwN9kpVCyPDQJhUiCamWKqbcSsggIgxPiiZE.w7JZw-1729561026-1.0.1.1-NBAd0kJoT5QobhbxtZKuFzpzdRv1cW4YOKDmR7jvF4AMfwh8d544347KfZ5fDxdQ5Cguws6HgzSodoJbwnx7tQ; path=/; expires=Tue, 22-Oct-24 02:07:06 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=SKvmXa0uw5GlONqiHtr.U.b26KyZqKzyQvOSCzlTDcU-1729561026829-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65c29c0f3442b1-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy7WsTDIkDUCG08tPr8OF7dz8gX6\",\n \"object\": \"chat.completion\",\n \"created\": 1729561026,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"tset a si siht olleh\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 149,\n \"completion_tokens\": 20,\n \"total_tokens\": 169,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-a5508037a2c8a381d8b9556e70d91322.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-a5508037a2c8a381d8b9556e70d91322.json deleted file mode 100644 index 32a0bea..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-a5508037a2c8a381d8b9556e70d91322.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:31:01 GMT", - "Content-Type": "application\/json", - "Content-Length": "858", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIRvpZKVwPc6IZqba591jmv5TDxj\",\n \"object\": \"chat.completion\",\n \"created\": 1728685859,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\". The assistant responded with \\\"Hello! How can I assist you today?\\\" Following this, the user asked what they just said but backwards. The assistant replied with \\\"tset a si siht olleh\\\".\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 123,\n \"completion_tokens\": 52,\n \"total_tokens\": 175,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-bd12160cf0d4298d6b5dc4e13ae5a14d.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-bd12160cf0d4298d6b5dc4e13ae5a14d.json deleted file mode 100644 index ea54acd..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-bd12160cf0d4298d6b5dc4e13ae5a14d.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:37:05 GMT", - "Content-Type": "application\/json", - "Content-Length": "779", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1096", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999888", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_021c6924d94bd0e3ee0f06bc3db4c4bc", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=vL__r5ubJvNV4RmlJZhNFqArDwX6GyxVKpi.q4yM0nI-1729561025-1.0.1.1-UpZdTgW2r55OFqoyho_c5ivHOoQRN8ljHmOPcECcUNlMcWmNp6zCSPvljzEVxxSgqJC6yW8kTDEo16cfyjxN8g; path=\/; expires=Tue, 22-Oct-24 02:07:05 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=8YjaCofLksiUzxQCu0C5XWrc1Q8tEXkO1xPJxxx0MkQ-1729561025666-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65c292d9c11a38-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy7Uc6De3D1gSPOHQZTYrQkiA2Ek\",\n \"object\": \"chat.completion\",\n \"created\": 1729561024,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\" and the assistant responds with \\\"hello this a test\\\". The user then asks what they just said, but backwards.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 93,\n \"completion_tokens\": 34,\n \"total_tokens\": 127,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-bf2f932a9607c7432e73ab858d97f0a4.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-bf2f932a9607c7432e73ab858d97f0a4.json new file mode 100644 index 0000000..e9a9eca --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-bf2f932a9607c7432e73ab858d97f0a4.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:56:33 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2oS61BPczvfFOmnEBgycQPHSltC\",\n \"object\": \"chat.completion\",\n \"created\": 1741733792,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The conversation involves a test, and there was no prior discussion besides a greeting and acknowledgment of the test.\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 78,\n \"completion_tokens\": 22,\n \"total_tokens\": 100,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-ed9122f08b49da7ee73e6f97b414cde2.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-ed9122f08b49da7ee73e6f97b414cde2.json deleted file mode 100644 index 75765c3..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-ed9122f08b49da7ee73e6f97b414cde2.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:30:59 GMT", - "Content-Type": "application\/json", - "Content-Length": "685", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIRu92Y75hq2BYG0QOEX05ft6OhO\",\n \"object\": \"chat.completion\",\n \"created\": 1728685858,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"tset a si siht olleh\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 118,\n \"completion_tokens\": 20,\n \"total_tokens\": 138,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-efd20736544ba41f5fe46cb57dd7102e.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-efd20736544ba41f5fe46cb57dd7102e.json deleted file mode 100644 index 7eee38e..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-efd20736544ba41f5fe46cb57dd7102e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:30:57 GMT", - "Content-Type": "application\/json", - "Content-Length": "804", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIRsh2BC8mD9NYcSUdOULmx0yEz8\",\n \"object\": \"chat.completion\",\n \"created\": 1728685856,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\". The assistant responded with \\\"Hello! How can I assist you today?\\\" Following this, the user asked what they just said but backwards.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 96,\n \"completion_tokens\": 38,\n \"total_tokens\": 134,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-f35bc9bf07dc805cedb1cbda219d7a63.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-f35bc9bf07dc805cedb1cbda219d7a63.json deleted file mode 100644 index 1143710..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-f35bc9bf07dc805cedb1cbda219d7a63.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:37:08 GMT", - "Content-Type": "application\/json", - "Content-Length": "833", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1472", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999867", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_141298f6aa078e29d1afc0e0b3e13a4a", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=Xq_.3B8FFYh0icDGV9BMRsG1XRoKWpn4FR.vPbsrIqY-1729561028-1.0.1.1-CmRScxLczHkErR45.scYJkcdTj8L4HmoXsNAJYSH.p39nsm97GqsK.7PE3JBCZkVJPtVJmhK.9iv_Phn58kQnQ; path=\/; expires=Tue, 22-Oct-24 02:07:08 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=VQUYWMFih3MXgQW2g18Iiz7Cz5VtxZsT0Bn09DAcTzM-1729561028760-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65c2a3c9e17d02-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy7X6AksadnNQ8O5xKbFuIWTJdz3\",\n \"object\": \"chat.completion\",\n \"created\": 1729561027,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\" and the assistant responds with \\\"hello this a test\\\". The user then asks what they just said, but backwards. The assistant answers with \\\"tset a si siht olleh\\\".\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 119,\n \"completion_tokens\": 48,\n \"total_tokens\": 167,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-f36a2b79c2417f34329f24e826de8bce.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-f36a2b79c2417f34329f24e826de8bce.json deleted file mode 100644 index a197047..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryAgent-f36a2b79c2417f34329f24e826de8bce.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:30:20 GMT", - "Content-Type": "application\/json", - "Content-Length": "669", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIRICapumjPbPYCevujizmUX8tIB\",\n \"object\": \"chat.completion\",\n \"created\": 1728685820,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user's message says \\\"hello this a test\\\".\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 48,\n \"completion_tokens\": 11,\n \"total_tokens\": 59,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-32ae472286b057df708d31ea881cb283.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-32ae472286b057df708d31ea881cb283.json new file mode 100644 index 0000000..463c770 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-32ae472286b057df708d31ea881cb283.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:31:02 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2PlapK5HkdsqCsEqtzVyQN9vAID\",\n \"object\": \"chat.completion\",\n \"created\": 1741732261,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Donald J. Trump is the current president of the United States.\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1579,\n \"completion_tokens\": 26,\n \"total_tokens\": 1605,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-36440b3fabab462e10a0388479c20807.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-36440b3fabab462e10a0388479c20807.json deleted file mode 100644 index d160882..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-36440b3fabab462e10a0388479c20807.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:41:40 GMT", - "Content-Type": "application\/json", - "Content-Length": "819", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBvNyXTas4ANlvgTA60GGx5TYKp\",\n \"object\": \"chat.completion\",\n \"created\": 1729561299,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user wanted to know about the Vice President following the confirmation that Joe Biden is the current President of the United States. The Vice President following Joe Biden is Kamala Harris.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 116,\n \"completion_tokens\": 35,\n \"total_tokens\": 151,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-47c33ba83a48790e1c7369c546e364d1.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-47c33ba83a48790e1c7369c546e364d1.json deleted file mode 100644 index c916253..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-47c33ba83a48790e1c7369c546e364d1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:40:59 GMT", - "Content-Type": "application\/json", - "Content-Length": "721", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBGdiiK67EBTKsg030yafl8AuPZ\",\n \"object\": \"chat.completion\",\n \"created\": 1729561258,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden is the current President of the United States.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 951,\n \"completion_tokens\": 23,\n \"total_tokens\": 974,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-4dd943e799ab1c294682801edb307f4e.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-4dd943e799ab1c294682801edb307f4e.json deleted file mode 100644 index 059c141..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-4dd943e799ab1c294682801edb307f4e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:40:55 GMT", - "Content-Type": "application\/json", - "Content-Length": "936", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBCkD8mMFwheZaD8OYJ4wrwVkca\",\n \"object\": \"chat.completion\",\n \"created\": 1729561254,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_VgLPDzWdffoRI5faDGoGVHOV\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current President of the United States\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 239,\n \"completion_tokens\": 20,\n \"total_tokens\": 259,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-560e8c18c3ee1995f229f46dd73dcc33.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-560e8c18c3ee1995f229f46dd73dcc33.json new file mode 100644 index 0000000..e32a0bd --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-560e8c18c3ee1995f229f46dd73dcc33.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:55:19 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2nGTcjCjZ6Zg7rJQTwH13zUDuqj\",\n \"object\": \"chat.completion\",\n \"created\": 1741733718,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The summary of the conversation is that Donald J. Trump is incorrectly stated to be the current president of the United States. Vice President Kamala Harris is serving under President Joe Biden.\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 123,\n \"completion_tokens\": 37,\n \"total_tokens\": 160,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-7ad11bd7dd13649bbf0c0ee2f8935881.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-7ad11bd7dd13649bbf0c0ee2f8935881.json new file mode 100644 index 0000000..e3299f7 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-7ad11bd7dd13649bbf0c0ee2f8935881.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:31:00 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2Pj2XqTUhjHmmB7Z1S8Apx9foPq\",\n \"object\": \"chat.completion\",\n \"created\": 1741732259,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_gOfBjqem8wzVXhTg6FLGIDEX\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\",\\\"searchType\\\":\\\"search\\\",\\\"numberOfResults\\\":10}\"\n }\n }\n ],\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 223,\n \"completion_tokens\": 31,\n \"total_tokens\": 254,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-840fbdc622785ce8eaf6265ec38b373a.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-840fbdc622785ce8eaf6265ec38b373a.json deleted file mode 100644 index 91c1f56..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-840fbdc622785ce8eaf6265ec38b373a.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:41:02 GMT", - "Content-Type": "application\/json", - "Content-Length": "978", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBI2IiSzAG6L22hN0DGbHe3qaFO\",\n \"object\": \"chat.completion\",\n \"created\": 1729561260,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user requested to search Google for the current President of the United States. Using the serper_tool, the results showed multiple references confirming that Joe Biden is the current President of the United States, serving as the 46th president since 2021. The assistant confirmed that Joe Biden is indeed the current President of the United States.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 139,\n \"completion_tokens\": 67,\n \"total_tokens\": 206,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-8afadb44cc44e4a50f20f3cbfa927732.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-8afadb44cc44e4a50f20f3cbfa927732.json new file mode 100644 index 0000000..1ffd31c --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-8afadb44cc44e4a50f20f3cbfa927732.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:31:04 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2PnvictkuFLYzeipgSyTrDCoCtf\",\n \"object\": \"chat.completion\",\n \"created\": 1741732263,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The summary of the conversation is that Donald J. Trump is stated to be the current president of the United States.\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 72,\n \"completion_tokens\": 24,\n \"total_tokens\": 96,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-991e3ebf644dfe01a68fc39669e07299.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-991e3ebf644dfe01a68fc39669e07299.json deleted file mode 100644 index 5fabd19..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-991e3ebf644dfe01a68fc39669e07299.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:41:39 GMT", - "Content-Type": "application/json", - "Content-Length": "742", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBuVmdBNnW5ohHS3bvE7exLroho\",\n \"object\": \"chat.completion\",\n \"created\": 1729561298,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"The Vice President of the United States following Joe Biden is Kamala Harris.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 243,\n \"completion_tokens\": 27,\n \"total_tokens\": 270,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-Tool-37a6259cc0c1dae299a7866489dff0bd.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-Tool-37a6259cc0c1dae299a7866489dff0bd.json index 5e48a06..4f08f8a 100644 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-Tool-37a6259cc0c1dae299a7866489dff0bd.json +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-Tool-37a6259cc0c1dae299a7866489dff0bd.json @@ -4,7 +4,7 @@ "access-control-allow-origin": "*", "x-ratelimit-limit": "500", "x-ratelimit-remaining": "499", - "x-ratelimit-reset": "1728686085" + "x-ratelimit-reset": "1741732265" }, - "data": "{\"searchParameters\":{\"q\":\"current president of the united states\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"Joe BidenUnited States \/ President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":1},{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4442 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus, proud dad and ...\",\"position\":4},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of president, vice president, and first lady of the United States. Find out how to contact and learn more about current and past leaders.\",\"position\":5},{\"title\":\"President Joe Biden - Facebook\",\"link\":\"https:\/\/www.facebook.com\/POTUS\/\",\"snippet\":\"The only way forward is to replace every lead pipeline in our country and connect the American people to clean water once and for all.\",\"position\":6},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":7},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"sitelinks\":[{\"title\":\"Political positions\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Political_positions_of_Joe_Biden\"},{\"title\":\"Electoral history\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Electoral_history_of_Joe_Biden\"},{\"title\":\"2008 Presidential Campaign\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden_2008_presidential_campaign\"},{\"title\":\"Class president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Class_president\"}],\"position\":8},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"position\":9},{\"title\":\"President of the United States - Ballotpedia\",\"link\":\"https:\/\/ballotpedia.org\/President_of_the_United_States\",\"snippet\":\"Article II of the U.S. Constitution laid out the requirements and roles of the president. The current president is Joe Biden (D). Election requirements.\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the current president of the USA?\",\"snippet\":\"Joe Biden\\nUnited States \/ President\",\"title\":\"\"},{\"question\":\"What number president is Joe Biden?\",\"snippet\":\"46\\nJoe Biden \/ President number\",\"title\":\"\"},{\"question\":\"Who was the youngest president of the US?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age\"},{\"question\":\"Who is number 1 president?\",\"snippet\":\"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\"title\":\"Historical rankings of presidents of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Historical_rankings_of_presidents_of_the_United_States\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"All Presidents in order\"},{\"query\":\"48th president of the United States\"},{\"query\":\"Who is the New president of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"47th President of the United States\"},{\"query\":\"First president of USA\"}],\"credits\":1}" + "data": "{\"searchParameters\":{\"q\":\"current president of the United States\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States \/ President\",\"answer\":\"Donald Trump\"},\"knowledgeGraph\":{\"title\":\"Donald Trump\",\"type\":\"45th and 47th U.S. President\",\"imageUrl\":\"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcSOpSNNTTnQQt9_M1jlNzxfjl66Y0WTu7qfQ8sPi5VCsvtohzYQWdiT7g&s=0\",\"description\":\"Donald John Trump is an American politician, media personality, and businessman who is the 47th president of the United States. A member of the Republican Party, he served as the 45th president from 2017 to 2021.\",\"descriptionSource\":\"Wikipedia\",\"descriptionLink\":\"https:\/\/en.wikipedia.org\/wiki\/Donald_Trump\",\"attributes\":{\"Born\":\"June 14, 1946 (age 78\u00a0years), Jamaica Hospital Medical Center, New York, NY\",\"Organizations founded\":\"Department of Government Efficiency, Trump Winery, Trump Media & Technology Group, and more\",\"Aunts\":\"Elizabeth Trump Walters and Christina Matheson\",\"Cousins\":\"John Gordon Trump, Karen Ingraham, and Christine Philp\",\"Grandchildren\":\"Kai Madison Trump and Donald Trump III\",\"Grandparents\":\"Malcolm MacLeod, Frederick Trump, Elizabeth Christ Trump, and more\",\"Great-grandparents\":\"Christian Johannes Trump, Katharina Trump, Ann MacLeod, and more\"}},\"organic\":[{\"title\":\"The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/\",\"snippet\":\"Donald J. Trump. President of the United States \u00b7 JD Vance. VICE PRESIDENT OF THE UNITED STATES \u00b7 Melania Trump. First Lady OF THE UNITED STATES \u00b7 The Cabinet. Of ...\",\"position\":1},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"Donald J. Trump serves as the 47th President of the United States. He also served as the 45th. Read the President's full biography.\",\"position\":2},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"Donald Trump is the 47th and current president since January 20, 2025. Contents. 1 History and development. 1.1 Origins; 1.2 1789\u20131933; 1.3 Imperial ...\",\"sitelinks\":[{\"title\":\"List\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Vice President\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Vice_President_of_the_United_States\"}],\"position\":3},{\"title\":\"The Trump Administration - The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/\",\"snippet\":\"Donald J. Trump. 45th & 47th President of the United States. After a landslide election victory in 2024, President Donald J. Trump is returning to the White ...\",\"position\":4},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"The 47th and current president of the United States is Donald John Trump. He was sworn into office on January 20, 2025.\",\"position\":5},{\"title\":\"President Donald J. Trump (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"President Donald J. Trump 45th & 47th President of the United States. The Golden Age of America Begins Right Now.\",\"position\":6},{\"title\":\"List of presidents of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\",\"snippet\":\"The incumbent president is Donald Trump, who assumed office on January 20, 2025. Since the office was established in 1789, 45 men have served ...\",\"sitelinks\":[{\"title\":\"Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States#Presidents\"},{\"title\":\"Notes\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States#Notes\"},{\"title\":\"References\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States#References\"}],\"position\":7},{\"title\":\"Donald J. Trump: America's new president\",\"link\":\"https:\/\/me.usembassy.gov\/donald-j-trump-americas-new-president\/\",\"snippet\":\"President Donald J. Trump is returning to the White House as the 47th president to build upon his previous successes, unleash the American economy.\",\"date\":\"Jan 23, 2025\",\"position\":8},{\"title\":\"Presidents of the United States of America - Ohio Secretary of State\",\"link\":\"https:\/\/www.ohiosos.gov\/elections\/election-results-and-data\/historical-election-comparisons\/presidents-of-the-united-states-of-america\/\",\"snippet\":\"Dwight D. Joseph R. Biden, Jr. (a) Authorities differ as to Jackson's birthplace and some believe his birthplace to be Union County, North Carolina.\",\"position\":9}],\"peopleAlsoAsk\":[{\"question\":\"Who is president right now?\",\"snippet\":\"Donald J. Trump serves as the 47th President of the United States.\",\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\"},{\"question\":\"Who is the new president in the United States?\",\"snippet\":\"President of the United States\\n\\nPresidential flag\\n\\nIncumbent Donald Trump since January 20, 2025\\n\\nExecutive branch of the U.S. government Executive Office of the President\\n\\nStyle\\nMr. President (informal) The Honorable (formal) His Excellency (diplomatic)\",\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\"},{\"question\":\"Are there 45 or 46 presidents?\",\"snippet\":\"Since the office was established in 1789, 45 men have served in 47 presidencies; the discrepancy arises from two individuals elected to non-consecutive terms: Grover Cleveland is counted as the 22nd and 24th president of the United States, while Donald Trump is counted as the 45th and 47th president.\",\"title\":\"List of presidents of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"question\":\"Who was the 48th president?\",\"snippet\":\"Presidents of the United States of America\\nPresident\/ Term\\n\\n36\\n44, (b)45\\nLyndon Baines Johnson\\n37\\n46,47\\nRichard M. Nixon\\n38\\n47 (b)\\nGerald R. Ford\\n39\\n48\\nJimmy Carter\",\"title\":\"Presidents of the United States of America - Ohio Secretary of State\",\"link\":\"https:\/\/www.ohiosos.gov\/elections\/election-results-and-data\/historical-election-comparisons\/presidents-of-the-united-states-of-america\/\"}],\"credits\":1}" } diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-b906c3b4c8019936fe115e4e62d3994c.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-b906c3b4c8019936fe115e4e62d3994c.json deleted file mode 100644 index 7120493..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-b906c3b4c8019936fe115e4e62d3994c.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:41:38 GMT", - "Content-Type": "application\/json", - "Content-Length": "762", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBtzdOThyrXdQHyqVduKWsGLQCn\",\n \"object\": \"chat.completion\",\n \"created\": 1729561297,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user wanted to know about the Vice President following the confirmation that Joe Biden is the current President of the United States.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 134,\n \"completion_tokens\": 24,\n \"total_tokens\": 158,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-de2f99ba9fd74f13849ee043bcee4bdf.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-de2f99ba9fd74f13849ee043bcee4bdf.json deleted file mode 100644 index b43fa9a..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-de2f99ba9fd74f13849ee043bcee4bdf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:40:54 GMT", - "Content-Type": "application\/json", - "Content-Length": "706", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBBDJ6NEok04RrR1sqhDRtUNmqc\",\n \"object\": \"chat.completion\",\n \"created\": 1729561253,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user requested to search Google for the current President of the United States.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 54,\n \"completion_tokens\": 15,\n \"total_tokens\": 69,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-ee890dab1469e9a09f9960cb3f09bf6d.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-ee890dab1469e9a09f9960cb3f09bf6d.json deleted file mode 100644 index ad35bfd..0000000 --- a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-ee890dab1469e9a09f9960cb3f09bf6d.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:40:57 GMT", - "Content-Type": "application/json", - "Content-Length": "885", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AKyBEvI5AofCNQk8dGLLqHG5TsQt7\",\n \"object\": \"chat.completion\",\n \"created\": 1729561256,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The user requested to search Google for the current President of the United States. Using the serper_tool, the results showed multiple references confirming that Joe Biden is the current President of the United States, serving as the 46th president since 2021.\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 746,\n \"completion_tokens\": 51,\n \"total_tokens\": 797,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-fd244ad8f44fd521474d587db86ae4c7.json b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-fd244ad8f44fd521474d587db86ae4c7.json new file mode 100644 index 0000000..b52b7c5 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/ConversationSummaryWithToolsAgent-fd244ad8f44fd521474d587db86ae4c7.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:55:18 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2nFmw0xbtGswzkzvTxCt0vYQ26l\",\n \"object\": \"chat.completion\",\n \"created\": 1741733717,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Vice President Kamala Harris is serving under President Joe Biden. Donald J. Trump is not the current president.\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 242,\n \"completion_tokens\": 36,\n \"total_tokens\": 278,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Memory/DatabaseMemory-472476cf0424ea3af72057915e207478.json b/tests/Fixtures/Saloon/Memory/DatabaseMemory-472476cf0424ea3af72057915e207478.json new file mode 100644 index 0000000..18d6ec0 --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/DatabaseMemory-472476cf0424ea3af72057915e207478.json @@ -0,0 +1,31 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:47:38 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", + "openai-processing-ms": "1236", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999877", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "3ms", + "x-request-id": "req_c3e7c4e20282d5e03bfe92a7803d3f14", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "Set-Cookie": [ + "__cf_bm=i8XmZzY5PUFvBVWUq5eiU3BIQzXe8d7V5BbxH5JX.VA-1741733258-1.0.1.1-XM0.NktYe8xZ38S3d0XJaPkMj2P_vwjBoR3EZTMFrX_9Xwi6Wd4_yxffoyttCzgni3d9IdjcerxIUPCRbkhIv_nAfxG552jr_VSPKfE4xKQ; path=\/; expires=Tue, 11-Mar-25 23:17:38 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", + "_cfuvid=RmsQgvpflf3.oAK9MgV4Rky3mtZ4eww83no4QrhmKGo-1741733258377-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" + ], + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "91ee9837ed07306b-BOS", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-BA2fpmkKc9ZJ6Zd8IyXkw0SApDQUr\",\n \"object\": \"chat.completion\",\n \"created\": 1741733257,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 98,\n \"completion_tokens\": 21,\n \"total_tokens\": 119,\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_7c63087da1\"\n}\n" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/DatabaseMemory-495ba0207bd93966fcb5547c5509fadb.json b/tests/Fixtures/Saloon/Memory/DatabaseMemory-495ba0207bd93966fcb5547c5509fadb.json deleted file mode 100644 index 50e82b6..0000000 --- a/tests/Fixtures/Saloon/Memory/DatabaseMemory-495ba0207bd93966fcb5547c5509fadb.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:59 GMT", - "Content-Type": "application/json", - "Content-Length": "700", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "814", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999867", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_a4bac68eb7d7a76ad2a793e80a8218b1", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=2x1PuHrqwDqQco4Ix1Eulg_5eOvLN4LGQm6XNJtm69M-1729560539-1.0.1.1-FWGy71BtK4BF6u5pxEmeYbY.YMaAddyBqjc_E1a.AYmnQtfhG.v0s_mmGfT1V3GuId1hka1EtP3ppY3yOnU3Pw; path=/; expires=Tue, 22-Oct-24 01:58:59 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=09Iz6Fidm4vDRcvj4rhCfC4qlyVsjpHqz68CeTqpAXc-1729560539653-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b6b6fc6b3344-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzeRQRG836TY7nG3trfn43Nk5Us\",\n \"object\": \"chat.completion\",\n \"created\": 1729560538,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\".sdrawkcab tuB ?yas tsuj I did tahw\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 112,\n \"completion_tokens\": 26,\n \"total_tokens\": 138,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/DatabaseMemory-ccd0a3decc142cdd6d28fc823fb70573.json b/tests/Fixtures/Saloon/Memory/DatabaseMemory-ccd0a3decc142cdd6d28fc823fb70573.json deleted file mode 100644 index e8c7359..0000000 --- a/tests/Fixtures/Saloon/Memory/DatabaseMemory-ccd0a3decc142cdd6d28fc823fb70573.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:29:22 GMT", - "Content-Type": "application\/json", - "Content-Length": "679", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIQMXfVSSZy4enUogfNF6wnVR2G9\",\n \"object\": \"chat.completion\",\n \"created\": 1728685762,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\".sdrawkcab yas tsuj I did tahw\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 77,\n \"completion_tokens\": 20,\n \"total_tokens\": 97,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/DatabaseMemory-d14909a03783ba5b88f3dea252a1f37a.json b/tests/Fixtures/Saloon/Memory/DatabaseMemory-d14909a03783ba5b88f3dea252a1f37a.json deleted file mode 100644 index 89919e4..0000000 --- a/tests/Fixtures/Saloon/Memory/DatabaseMemory-d14909a03783ba5b88f3dea252a1f37a.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 11 Oct 2024 22:29:21 GMT", - "Content-Type": "application\/json", - "Content-Length": "683", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHIQLLSmcAp0r2oKO8owGTUQI2gQw\",\n \"object\": \"chat.completion\",\n \"created\": 1728685761,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 71,\n \"completion_tokens\": 16,\n \"total_tokens\": 87,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Memory/DatabaseMemory-d8ef1e6148a4a1a85e9d5d0f11254784.json b/tests/Fixtures/Saloon/Memory/DatabaseMemory-d8ef1e6148a4a1a85e9d5d0f11254784.json new file mode 100644 index 0000000..92ff41f --- /dev/null +++ b/tests/Fixtures/Saloon/Memory/DatabaseMemory-d8ef1e6148a4a1a85e9d5d0f11254784.json @@ -0,0 +1,31 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:47:39 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", + "openai-processing-ms": "939", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999872", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "3ms", + "x-request-id": "req_b1d384b49d1cbac23b9588b121b42ec5", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "cf-cache-status": "DYNAMIC", + "Set-Cookie": [ + "__cf_bm=y.UQUzztMx1LiLSkl8pJGFuAIMQ0XEo69Ry0qTbpndE-1741733259-1.0.1.1-ZJ5bYh0kAy6lF1ZtYp_m6cmHx0ENFjq94VTzOvyJeuTHk_3PtlK48xhSyvJi3H_NZIyrb.Y40hWZhPQMGnqgx183qG2bDAipI4hWm9pz6Lg; path=\/; expires=Tue, 11-Mar-25 23:17:39 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", + "_cfuvid=rmHtgFpf4SYDTmg219o49KXrXdhmHhj4YpgRL.yYdFg-1741733259639-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" + ], + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "91ee9841feff4cf4-BOS", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-BA2fqCAt4ZivFvQw1BcZJheXKvo7t\",\n \"object\": \"chat.completion\",\n \"created\": 1741733258,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"sdrawkcaB .yas tsuj I did tahw\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 104,\n \"completion_tokens\": 26,\n \"total_tokens\": 130,\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_7c63087da1\"\n}\n" +} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Memory/DatabaseMemory-fe703367aa1f98d7884652612a3c77a6.json b/tests/Fixtures/Saloon/Memory/DatabaseMemory-fe703367aa1f98d7884652612a3c77a6.json deleted file mode 100644 index 68a13a8..0000000 --- a/tests/Fixtures/Saloon/Memory/DatabaseMemory-fe703367aa1f98d7884652612a3c77a6.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:28:58 GMT", - "Content-Type": "application/json", - "Content-Length": "699", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "713", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999871", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_0ad66874bca30e90a762f870164e6daf", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=eYiKNfU2u7krCUQda0_2IGklMhCJJcQ.s.ZO_4Ov.Ig-1729560538-1.0.1.1-TPvjywQitZ6hfmN_fhOYM6Ohm2KJpB02G_4zvFFxN7BWGOvOpkQhlFcRxObcLnHkD9oIvPHxKaUGKHTLV3XYKg; path=/; expires=Tue, 22-Oct-24 01:58:58 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=mqdo9Lfc5FHkdb5ZItd6Gd4zVDZli7BgWgoD3Oy2u74-1729560538317-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b6af4a8e7279-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzdkhKVl4ZdLbXJgpaPc7lEK1wQ\",\n \"object\": \"chat.completion\",\n \"created\": 1729560537,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Hello! How can I assist you today?\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 106,\n \"completion_tokens\": 20,\n \"total_tokens\": 126,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-16d091022a41b3b3ba0ece72a85fd909.json b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-16d091022a41b3b3ba0ece72a85fd909.json new file mode 100644 index 0000000..ca474a4 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-16d091022a41b3b3ba0ece72a85fd909.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 23:46:30 GMT", + "Content-Type": "application/json", + "Content-Length": "1199", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "2440", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999764", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "7ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOIdmmNsVS1uOqx9EIa4cpLTvZIN\",\n \"object\": \"chat.completion\",\n \"created\": 1729899987,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"OpenAI, Inc. is an AI research company dedicated to creating and promoting friendly AI in a way that benefits humanity as a whole. They prioritize human values and emphasize diversity in the development of AI technologies. This company operates in the Health Care sector, specifically in Life Sciences Tools & Services. Their activities span various fields including Information Technology & Services, Academic Research, Physical Sciences, Engineering, Life Sciences, and Scientific & Academic Research, with a focus on B2B services.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 265,\n \"completion_tokens\": 107,\n \"total_tokens\": 372,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-41fce475054295b2a2d1473d04f7aa9c.json b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-41fce475054295b2a2d1473d04f7aa9c.json deleted file mode 100644 index d70c432..0000000 --- a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-41fce475054295b2a2d1473d04f7aa9c.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 14:08:49 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked" - }, - "data": "{\n \"id\": \"chatcmpl-AEdH6eXHJ9aYLlivszEr8WUOWiBFD\",\n \"object\": \"chat.completion\",\n \"created\": 1728050928,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_mRZAQmndYAUYzFpJMnTlWWfa\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"clearbit_company_tool\",\n \"arguments\": \"{\\\"domain\\\":\\\"openai.com\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 119,\n \"completion_tokens\": 18,\n \"total_tokens\": 137,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-46246d8bf1cf8981b79398408f1c9374.json b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-46246d8bf1cf8981b79398408f1c9374.json deleted file mode 100644 index 2e6b146..0000000 --- a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-46246d8bf1cf8981b79398408f1c9374.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 14:09:22 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AEdHXRO4CywC6H5EhEMgONveMlSbu\",\n \"object\": \"chat.completion\",\n \"created\": 1728050955,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"OpenAI is an AI research company focused on safe and beneficial artificial intelligence for all, prioritizing human values and diversity in technology.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 230,\n \"completion_tokens\": 38,\n \"total_tokens\": 268,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-4844006bb7346a8cd4946135a26bb2f2.json b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-4844006bb7346a8cd4946135a26bb2f2.json deleted file mode 100644 index 9eea816..0000000 --- a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-4844006bb7346a8cd4946135a26bb2f2.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:05 GMT", - "Content-Type": "application\/json", - "Content-Length": "1181", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "3842", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999764", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "7ms", - "x-request-id": "req_ac23ffb783a250f76b95115937089a7e", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=Us0iTr53ncmzPI8qVv.1x9gVdpPlJR5GeAy5hjlRbKI-1729560545-1.0.1.1-.0NSN.9zujuAIUPwIRDuGHoncs0LiyKBgnHv1SaRAmVsY8yH_G3KUmjfM6evehR2C1aoLhBREPPm5BmOLUgBIw; path=\/; expires=Tue, 22-Oct-24 01:59:05 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=JUryU1x.ZbpzxhkUdSU1hFX4eOsscQQdP23.AuOAq_o-1729560545365-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b6c689a88c81-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzhNxpVwFrmbcoILCEXEgQwop3G\",\n \"object\": \"chat.completion\",\n \"created\": 1729560541,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"OpenAI, legally known as OpenAI, Inc., is an AI research company dedicated to developing safe and beneficial artificial intelligence that aligns with human values and promotes diversity in technology. It operates primarily in the Health Care sector and the Life Sciences Tools & Services industry. Its activities span across various areas including Information Technology & Services, Academic Research, Physical Sciences, Engineering, Life Sciences, and Scientific & Academic Research, with a focus on B2B services.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 265,\n \"completion_tokens\": 103,\n \"total_tokens\": 368,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-503bf8fd461d39c783d3b774fa78b28f.json b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-503bf8fd461d39c783d3b774fa78b28f.json index a4c94c7..22ecdaa 100644 --- a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-503bf8fd461d39c783d3b774fa78b28f.json +++ b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-503bf8fd461d39c783d3b774fa78b28f.json @@ -1,13 +1,13 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:29:01 GMT", + "Date": "Fri, 25 Oct 2024 23:46:26 GMT", "Content-Type": "application\/json", "Content-Length": "919", "Connection": "keep-alive", "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "907", + "openai-organization": "REDACTED", + "openai-processing-ms": "681", "openai-version": "2020-10-01", "x-ratelimit-limit-requests": "10000", "x-ratelimit-limit-tokens": "2000000", @@ -15,17 +15,13 @@ "x-ratelimit-remaining-tokens": "1999873", "x-ratelimit-reset-requests": "6ms", "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_f7878283ef6e18fcbf8132cee5a0455a", + "x-request-id": "REDACTED", "strict-transport-security": "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=6PHlwDjNI4H8glQRkd60601.Ugl1R_yvcWt7VR5VnGc-1729560541-1.0.1.1-I3JFrCPq6ai.iZqPLR9_w6QrkeKNJjojD.uHff1lUhqSlXO1YgtP.z7eVBo9XVNPdd1vR3.MnMCssiyz.XA0yw; path=\/; expires=Tue, 22-Oct-24 01:59:01 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=2GChtEo6KKIVnEn5jTl_4DGZZEcHXVLwkUk23.Xec2w-1729560541014-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], "X-Content-Type-Options": "nosniff", "Server": "cloudflare", - "CF-RAY": "8d65b6befdf819aa-EWR", + "CF-RAY": "REDACTED", "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKxzgDWV6kDn2eoCLTjCIoEfoaPPS\",\n \"object\": \"chat.completion\",\n \"created\": 1729560540,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_qZ3lmgIblORUAfduIGJHeDcS\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"clearbit_company_tool\",\n \"arguments\": \"{\\\"domain\\\":\\\"openai.com\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 154,\n \"completion_tokens\": 18,\n \"total_tokens\": 172,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file + "data": "{\n \"id\": \"chatcmpl-AMOIcQDoTchH6epkconRmwF2qLAlu\",\n \"object\": \"chat.completion\",\n \"created\": 1729899986,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_kIA6AP8Th19awMZzLKkjGBqz\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"clearbit_company_tool\",\n \"arguments\": \"{\\\"domain\\\":\\\"openai.com\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 154,\n \"completion_tokens\": 18,\n \"total_tokens\": 172,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-Tool.json b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-Tool.json index f0e6c76..6ba8a9d 100644 --- a/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-Tool.json +++ b/tests/Fixtures/Saloon/Tools/ClearbitCompanyTool-Tool.json @@ -1,8 +1,11 @@ { - "statusCode": 200, - "headers": { - "content-type": "application\/json", - "x-api-version": "2019-12-19" - }, - "data": "{\n \"id\": \"d14197b7-cbf2-4276-9593-a53a7d486aa7\",\n \"name\": \"OpenAI\",\n \"legalName\": \"OpenAI, Inc.\",\n \"domain\": \"openai.com\",\n \"domainAliases\": [\n\n ],\n \"site\": {\n \"phoneNumbers\": [\n\n ],\n \"emailAddresses\": [\n \"privacy@openai.com\",\n \"dsar@openai.com\",\n \"dpo@openai.com\",\n \"legal@openai.com\"\n ]\n },\n \"category\": {\n \"sector\": \"Health Care\",\n \"industryGroup\": \"Pharmaceuticals, Biotechnology & Life Sciences\",\n \"industry\": \"Life Sciences Tools & Services\",\n \"subIndustry\": \"Life Sciences Tools & Services\",\n \"gicsCode\": \"20202020\",\n \"sicCode\": \"87\",\n \"sic4Codes\": [\n \"8733\"\n ],\n \"naicsCode\": \"54\",\n \"naics6Codes\": [\n \"541715\"\n ],\n \"naics6Codes2022\": [\n \"541715\"\n ]\n },\n \"tags\": [\n \"Information Technology & Services\",\n \"Academic Research\",\n \"Physical Sciences\",\n \"Engineering\",\n \"Life Sciences\",\n \"Scientific & Academic Research\",\n \"B2B\"\n ],\n \"description\": \"OpenAI is an AI research company focused on safe and beneficial artificial intelligence for all, prioritizing human values and diversity in technology.\",\n \"foundedYear\": 2015,\n \"location\": \"Poineer building, 3180 18th St, San Francisco, CA 94110, USA\",\n \"timeZone\": \"America\/Los_Angeles\",\n \"utcOffset\": -7,\n \"geo\": {\n \"streetNumber\": \"3180\",\n \"streetName\": \"18th Street\",\n \"subPremise\": null,\n \"streetAddress\": \"3180 18th Street\",\n \"city\": \"San Francisco\",\n \"postalCode\": \"94110\",\n \"state\": \"California\",\n \"stateCode\": \"CA\",\n \"country\": \"United States\",\n \"countryCode\": \"US\",\n \"lat\": 37.7623346,\n \"lng\": -122.4146878\n },\n \"logo\": \"https:\/\/logo.clearbit.com\/openai.com\",\n \"facebook\": {\n \"handle\": \"openai.research\",\n \"likes\": 6602\n },\n \"linkedin\": {\n \"handle\": \"company\/openai\"\n },\n \"twitter\": {\n \"handle\": \"OpenAI\",\n \"id\": \"4398626122\",\n \"bio\": \"OpenAI\u2019s mission is to ensure that artificial general intelligence benefits all of humanity. We\u2019re hiring: https:\/\/t.co\/dJGr6LgzPA\",\n \"followers\": 1893255,\n \"following\": 0,\n \"location\": \"\",\n \"site\": \"https:\/\/t.co\/3bPlZZkvdL\",\n \"avatar\": \"https:\/\/pbs.twimg.com\/profile_images\/1634058036934500352\/b4F1eVpJ_normal.jpg\"\n },\n \"crunchbase\": {\n \"handle\": \"organization\/openai\"\n },\n \"emailProvider\": false,\n \"type\": \"education\",\n \"ticker\": null,\n \"identifiers\": {\n \"usEIN\": null,\n \"usCIK\": null\n },\n \"phone\": null,\n \"metrics\": {\n \"alexaUsRank\": 700,\n \"alexaGlobalRank\": 1151,\n \"trafficRank\": \"very_high\",\n \"employees\": 770,\n \"employeesRange\": \"251-1K\",\n \"marketCap\": null,\n \"raised\": 300000000,\n \"annualRevenue\": 28000000,\n \"estimatedAnnualRevenue\": \"$10M-$50M\",\n \"fiscalYearEnd\": null\n },\n \"indexedAt\": \"2024-09-29T02:53:13.436Z\",\n \"tech\": [\n \"google_apps\",\n \"microsoft_exchange_online\",\n \"outlook\",\n \"vimeo\",\n \"apache_kafka\",\n \"stripe\",\n \"github\",\n \"postgresql\"\n ],\n \"techCategories\": [\n \"productivity\",\n \"email_hosting_service\",\n \"image_video_services\",\n \"data_processing\",\n \"payment\",\n \"database\"\n ],\n \"parent\": {\n \"domain\": null\n },\n \"ultimateParent\": {\n \"domain\": null\n }\n}" + "statusCode": 200, + "headers": { + "content-type": "application/json", + "x-api-version": "2019-12-19", + "x-ratelimit-limit": "600", + "x-ratelimit-remaining": "599", + "x-ratelimit-reset": "1729900046" + }, + "data": "{\n \"id\": \"d14197b7-cbf2-4276-9593-a53a7d486aa7\",\n \"name\": \"OpenAI\",\n \"legalName\": \"OpenAI, Inc.\",\n \"domain\": \"openai.com\",\n \"domainAliases\": [\n\n ],\n \"site\": {\n \"phoneNumbers\": [\n\n ],\n \"emailAddresses\": [\n \"privacy@openai.com\",\n \"dsar@openai.com\",\n \"dpo@openai.com\",\n \"legal@openai.com\"\n ]\n },\n \"category\": {\n \"sector\": \"Health Care\",\n \"industryGroup\": \"Pharmaceuticals, Biotechnology & Life Sciences\",\n \"industry\": \"Life Sciences Tools & Services\",\n \"subIndustry\": \"Life Sciences Tools & Services\",\n \"gicsCode\": \"20202020\",\n \"sicCode\": \"87\",\n \"sic4Codes\": [\n \"8733\"\n ],\n \"naicsCode\": \"54\",\n \"naics6Codes\": [\n \"541715\"\n ],\n \"naics6Codes2022\": [\n \"541715\"\n ]\n },\n \"tags\": [\n \"Information Technology & Services\",\n \"Academic Research\",\n \"Physical Sciences\",\n \"Engineering\",\n \"Life Sciences\",\n \"Scientific & Academic Research\",\n \"B2B\"\n ],\n \"description\": \"OpenAI is an AI research company focused on safe and beneficial artificial intelligence for all, prioritizing human values and diversity in technology.\",\n \"foundedYear\": 2015,\n \"location\": \"Poineer building, 3180 18th St, San Francisco, CA 94110, USA\",\n \"timeZone\": \"America/Los_Angeles\",\n \"utcOffset\": -7,\n \"geo\": {\n \"streetNumber\": \"3180\",\n \"streetName\": \"18th Street\",\n \"subPremise\": null,\n \"streetAddress\": \"3180 18th Street\",\n \"city\": \"San Francisco\",\n \"postalCode\": \"94110\",\n \"state\": \"California\",\n \"stateCode\": \"CA\",\n \"country\": \"United States\",\n \"countryCode\": \"US\",\n \"lat\": 37.7623346,\n \"lng\": -122.4146878\n },\n \"logo\": \"https://logo.clearbit.com/openai.com\",\n \"facebook\": {\n \"handle\": \"openai.research\",\n \"likes\": 6602\n },\n \"linkedin\": {\n \"handle\": \"company/openai\"\n },\n \"twitter\": {\n \"handle\": \"OpenAI\",\n \"id\": \"4398626122\",\n \"bio\": \"OpenAI\u2019s mission is to ensure that artificial general intelligence benefits all of humanity. We\u2019re hiring: https://t.co/dJGr6LgzPA\",\n \"followers\": 1893255,\n \"following\": 0,\n \"location\": \"\",\n \"site\": \"https://t.co/3bPlZZkvdL\",\n \"avatar\": \"https://pbs.twimg.com/profile_images/1634058036934500352/b4F1eVpJ_normal.jpg\"\n },\n \"crunchbase\": {\n \"handle\": \"organization/openai\"\n },\n \"emailProvider\": false,\n \"type\": \"education\",\n \"ticker\": null,\n \"identifiers\": {\n \"usEIN\": null,\n \"usCIK\": null\n },\n \"phone\": null,\n \"metrics\": {\n \"alexaUsRank\": 700,\n \"alexaGlobalRank\": 1151,\n \"trafficRank\": \"very_high\",\n \"employees\": 770,\n \"employeesRange\": \"251-1K\",\n \"marketCap\": null,\n \"raised\": 300000000,\n \"annualRevenue\": 28000000,\n \"estimatedAnnualRevenue\": \"$10M-$50M\",\n \"fiscalYearEnd\": null\n },\n \"indexedAt\": \"2024-10-18T15:54:08.133Z\",\n \"tech\": [\n \"google_apps\",\n \"microsoft_exchange_online\",\n \"outlook\",\n \"vimeo\",\n \"apache_kafka\",\n \"stripe\",\n \"github\",\n \"postgresql\"\n ],\n \"techCategories\": [\n \"productivity\",\n \"email_hosting_service\",\n \"image_video_services\",\n \"data_processing\",\n \"payment\",\n \"database\"\n ],\n \"parent\": {\n \"domain\": null\n },\n \"ultimateParent\": {\n \"domain\": null\n }\n}" } diff --git a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-45750ef652ddceeaa4b56a6798ccee02.json b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-45750ef652ddceeaa4b56a6798ccee02.json deleted file mode 100644 index 9372e3c..0000000 --- a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-45750ef652ddceeaa4b56a6798ccee02.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:59:51 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AEd8Rfeihc8ExizWSphUAU1n7CFle\",\n \"object\": \"chat.completion\",\n \"created\": 1728050391,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_mRZAQmndYAUYzFpJMnTlWWfa\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"crunchbase_tool\",\n \"arguments\": \"{\\\"entityId\\\":\\\"siteimprove\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 115,\n \"completion_tokens\": 19,\n \"total_tokens\": 134,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-527a61c765676b4729099512e1a42e6a.json b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-527a61c765676b4729099512e1a42e6a.json index 18ca178..6d221b9 100644 --- a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-527a61c765676b4729099512e1a42e6a.json +++ b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-527a61c765676b4729099512e1a42e6a.json @@ -1,13 +1,13 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:29:07 GMT", + "Date": "Fri, 25 Oct 2024 23:45:07 GMT", "Content-Type": "application\/json", "Content-Length": "916", "Connection": "keep-alive", "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "965", + "openai-organization": "REDACTED", + "openai-processing-ms": "830", "openai-version": "2020-10-01", "x-ratelimit-limit-requests": "10000", "x-ratelimit-limit-tokens": "2000000", @@ -15,17 +15,13 @@ "x-ratelimit-remaining-tokens": "1999871", "x-ratelimit-reset-requests": "6ms", "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_3de368cb5b6df9fd0bfc65e58977668b", + "x-request-id": "REDACTED", "strict-transport-security": "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=GmnVDsX_tel0VVHmwOjaCuoGzwlIbTebGdZ05HZy.Gw-1729560547-1.0.1.1-HOfG1tkrOD3vsmh8Z9VEYt27ySKLa_WoFELF0bFbZj6JgwRghAtCUalzRXUGjgxWBvB9nnEs3aBazHWVtOEzmQ; path=\/; expires=Tue, 22-Oct-24 01:59:07 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=pkOCF9gLZOrlgy4TAwnXAkVpp56bOXL4KwHoSnfI58c-1729560547103-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], "X-Content-Type-Options": "nosniff", "Server": "cloudflare", - "CF-RAY": "8d65b6e4896a72b6-EWR", + "CF-RAY": "REDACTED", "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKxzmMFGNIkX3K9QwdAkfLRH93HwA\",\n \"object\": \"chat.completion\",\n \"created\": 1729560546,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_xhzwdqGvs52gZDBu70IQo3iC\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"crunchbase_tool\",\n \"arguments\": \"{\\\"entityId\\\":\\\"siteimprove\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 150,\n \"completion_tokens\": 19,\n \"total_tokens\": 169,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file + "data": "{\n \"id\": \"chatcmpl-AMOHKTa1di3eEfc1pqS3KznqeHrWT\",\n \"object\": \"chat.completion\",\n \"created\": 1729899906,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_YxTtmS5sZ3XP3sj137SH5c64\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"crunchbase_tool\",\n \"arguments\": \"{\\\"entityId\\\":\\\"siteimprove\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 150,\n \"completion_tokens\": 19,\n \"total_tokens\": 169,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-53741f3dfe7c8ca47ce535174669b15d.json b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-53741f3dfe7c8ca47ce535174669b15d.json new file mode 100644 index 0000000..0f3d04f --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-53741f3dfe7c8ca47ce535174669b15d.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 23:45:12 GMT", + "Content-Type": "application/json", + "Content-Length": "1333", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "4480", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999230", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "23ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOHMfcJhBXCZ730TqBaxnQlw3sjR\",\n \"object\": \"chat.completion\",\n \"created\": 1729899908,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Siteimprove is a company that provides comprehensive cloud-based digital presence optimization software. It has its headquarters in Copenhagen, Denmark. The organization offers services and products to improve website performance, accessibility, and compliance. Siteimprove has a global presence and is recognized within its industry with a current corporate rank of 1562. More details including their LinkedIn, Facebook, and Twitter profiles can be accessed via their respective URLs: http://www.linkedin.com/company/siteimprove, http://www.facebook.com/Siteimprove, and https://x.com/Siteimprove. Visit their website at http://siteimprove.com for more information.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 896,\n \"completion_tokens\": 139,\n \"total_tokens\": 1035,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_4dba7dd7b3\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-91330c935ee3c0271e4611b376117ea7.json b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-91330c935ee3c0271e4611b376117ea7.json deleted file mode 100644 index 38ae583..0000000 --- a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-91330c935ee3c0271e4611b376117ea7.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:11 GMT", - "Content-Type": "application/json", - "Content-Length": "1127", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "3809", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999230", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "23ms", - "x-request-id": "req_db34286a7841fcc189d87cf8e4be8d19", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=o0FpqBcFHHGUkxDANXhS7Xr.gT8kO.heNuPXgBCz6eQ-1729560551-1.0.1.1-.Dwg9rr7MpxbVWO9SznPODRQr9zJn2qHF09HO2ZRf09Zj1PMzxSXC_0dsQbIAJKa1QfkmhtxTD65ShurNIgJAw; path=/; expires=Tue, 22-Oct-24 01:59:11 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=Uc1vEOnA4NTZFd30WQJN2Qu4BuHhfnqRjwStORjqVe4-1729560551263-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b6ecce0a8ce6-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxznJ52joKwF2QqtalZLLGjV5936\",\n \"object\": \"chat.completion\",\n \"created\": 1729560547,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Siteimprove offers comprehensive cloud-based digital presence optimization software. Located in Copenhagen, Denmark, the company also has locations in Hovedstaden and is prominent within Europe. Siteimprove has an active presence on LinkedIn, Facebook, and Twitter. More details about the company can be found on their website at http://siteimprove.com. The company was created on June 21, 2014, and the latest update on their profile was on September 3, 2024.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 898,\n \"completion_tokens\": 110,\n \"total_tokens\": 1008,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-94745683d5f8f1ed70612a5c036d54bf.json b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-94745683d5f8f1ed70612a5c036d54bf.json deleted file mode 100644 index 1a78ff3..0000000 --- a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-94745683d5f8f1ed70612a5c036d54bf.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 14:03:00 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AEdBP55xlCkeEdXugbO3OGzRBFGh8\",\n \"object\": \"chat.completion\",\n \"created\": 1728050575,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Siteimprove offers comprehensive cloud-based digital presence optimization software. This company is based in Copenhagen, Denmark, and has a presence across multiple locations including Hovedstaden and the broader European region. Siteimprove's digital footprint includes a LinkedIn page available at http:\/\/www.linkedin.com\/company\/siteimprove, a Facebook page at http:\/\/www.facebook.com\/Siteimprove, and a Twitter profile at https:\/\/x.com\/Siteimprove. More about the company can be found on their website: http:\/\/siteimprove.com.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 863,\n \"completion_tokens\": 119,\n \"total_tokens\": 982,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-Tool.json b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-Tool.json index 57c6fdb..484e205 100644 --- a/tests/Fixtures/Saloon/Tools/CrunchbaseTool-Tool.json +++ b/tests/Fixtures/Saloon/Tools/CrunchbaseTool-Tool.json @@ -3,7 +3,7 @@ "headers": { "Cache-Control": "no-cache, private", "Content-Type": "application\/json", - "Date": "Fri, 04 Oct 2024 13:59:52 GMT" + "Date": "Fri, 25 Oct 2024 23:45:07 GMT" }, - "data": "{\"properties\":{\"identifier\":{\"uuid\":\"c41f21f2-3f19-72d2-47cb-bfdd47e45216\",\"value\":\"Siteimprove\",\"image_id\":\"db51071603a0425f95c1bc34b4e04be8\",\"permalink\":\"siteimprove\",\"entity_def_id\":\"organization\"}},\"cards\":{\"fields\":{\"rank_principal\":4400,\"identifier\":{\"uuid\":\"c41f21f2-3f19-72d2-47cb-bfdd47e45216\",\"value\":\"Siteimprove\",\"image_id\":\"db51071603a0425f95c1bc34b4e04be8\",\"permalink\":\"siteimprove\",\"entity_def_id\":\"organization\"},\"linkedin\":{\"value\":\"http:\/\/www.linkedin.com\/company\/siteimprove\"},\"short_description\":\"Siteimprove offers comprehensive cloud-based digital presence optimization software.\",\"rank_org\":4395,\"facebook\":{\"value\":\"http:\/\/www.facebook.com\/Siteimprove\"},\"twitter\":{\"value\":\"https:\/\/x.com\/Siteimprove\"},\"rank_delta_d90\":1.6,\"rank_org_company\":4314,\"rank_delta_d7\":0.3,\"rank_delta_d30\":3.4,\"image_url\":\"https:\/\/images.crunchbase.com\/image\/upload\/t_cb-default-original\/db51071603a0425f95c1bc34b4e04be8\",\"created_at\":\"2014-06-21T05:59:18Z\",\"location_identifiers\":[{\"uuid\":\"c0723e0a-84b4-231e-3cf7-f3be235af6d4\",\"value\":\"Copenhagen\",\"permalink\":\"copenhagen-hovedstaden\",\"entity_def_id\":\"location\",\"location_type\":\"city\"},{\"uuid\":\"cfa7addd-6b5f-8fb3-9968-c6f3ad20b487\",\"value\":\"Hovedstaden\",\"permalink\":\"hovedstaden-denmark\",\"entity_def_id\":\"location\",\"location_type\":\"region\"},{\"uuid\":\"f593ac31-624a-2ccd-a203-ddb04c319a79\",\"value\":\"Denmark\",\"permalink\":\"denmark\",\"entity_def_id\":\"location\",\"location_type\":\"country\"},{\"uuid\":\"6106f5dc-823e-5da8-40d7-51612c0b2c4e\",\"value\":\"Europe\",\"permalink\":\"europe\",\"entity_def_id\":\"location\",\"location_type\":\"continent\"}],\"website_url\":\"http:\/\/siteimprove.com\",\"updated_at\":\"2024-09-03T15:22:07Z\"}}}" + "data": "{\"properties\":{\"identifier\":{\"uuid\":\"c41f21f2-3f19-72d2-47cb-bfdd47e45216\",\"value\":\"Siteimprove\",\"image_id\":\"db51071603a0425f95c1bc34b4e04be8\",\"permalink\":\"siteimprove\",\"entity_def_id\":\"organization\"}},\"cards\":{\"fields\":{\"rank_principal\":1631,\"identifier\":{\"uuid\":\"c41f21f2-3f19-72d2-47cb-bfdd47e45216\",\"value\":\"Siteimprove\",\"image_id\":\"db51071603a0425f95c1bc34b4e04be8\",\"permalink\":\"siteimprove\",\"entity_def_id\":\"organization\"},\"linkedin\":{\"value\":\"http:\/\/www.linkedin.com\/company\/siteimprove\"},\"short_description\":\"Siteimprove offers comprehensive cloud-based digital presence optimization software.\",\"rank_org\":1630,\"facebook\":{\"value\":\"http:\/\/www.facebook.com\/Siteimprove\"},\"twitter\":{\"value\":\"https:\/\/x.com\/Siteimprove\"},\"rank_delta_d90\":9.2,\"rank_org_company\":1562,\"rank_delta_d7\":-1,\"rank_delta_d30\":9.5,\"image_url\":\"https:\/\/images.crunchbase.com\/image\/upload\/t_cb-default-original\/db51071603a0425f95c1bc34b4e04be8\",\"created_at\":\"2014-06-21T05:59:18Z\",\"location_identifiers\":[{\"uuid\":\"c0723e0a-84b4-231e-3cf7-f3be235af6d4\",\"value\":\"Copenhagen\",\"permalink\":\"copenhagen-hovedstaden\",\"entity_def_id\":\"location\",\"location_type\":\"city\"},{\"uuid\":\"cfa7addd-6b5f-8fb3-9968-c6f3ad20b487\",\"value\":\"Hovedstaden\",\"permalink\":\"hovedstaden-denmark\",\"entity_def_id\":\"location\",\"location_type\":\"region\"},{\"uuid\":\"f593ac31-624a-2ccd-a203-ddb04c319a79\",\"value\":\"Denmark\",\"permalink\":\"denmark\",\"entity_def_id\":\"location\",\"location_type\":\"country\"},{\"uuid\":\"6106f5dc-823e-5da8-40d7-51612c0b2c4e\",\"value\":\"Europe\",\"permalink\":\"europe\",\"entity_def_id\":\"location\",\"location_type\":\"continent\"}],\"website_url\":\"http:\/\/siteimprove.com\",\"updated_at\":\"2024-10-09T08:32:57Z\"}}}" } diff --git a/tests/Fixtures/Saloon/Tools/FirecrawlTool-4045f581b66dc3e16fa0edbf3869dc68.json b/tests/Fixtures/Saloon/Tools/FirecrawlTool-4045f581b66dc3e16fa0edbf3869dc68.json deleted file mode 100644 index 6eae140..0000000 --- a/tests/Fixtures/Saloon/Tools/FirecrawlTool-4045f581b66dc3e16fa0edbf3869dc68.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:33:54 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AEcjJY2nt7KLnEhgSY83fSC7OXafR\",\n \"object\": \"chat.completion\",\n \"created\": 1728048833,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_sAg3DjOruYzDJrfEfJuk3AOT\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"firecrawl_tool\",\n \"arguments\": \"{\\\"url\\\":\\\"https:\/\/www.firecrawl.dev\/\\\",\\\"extractionPrompt\\\":\\\"Describe the main purpose or topic of the webpage.\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 141,\n \"completion_tokens\": 36,\n \"total_tokens\": 177,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_81dd8129df\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/FirecrawlTool-43bcd63cc9d9b98eb8488d0e1a4c4174.json b/tests/Fixtures/Saloon/Tools/FirecrawlTool-43bcd63cc9d9b98eb8488d0e1a4c4174.json index 41ff66b..d1ad082 100644 --- a/tests/Fixtures/Saloon/Tools/FirecrawlTool-43bcd63cc9d9b98eb8488d0e1a4c4174.json +++ b/tests/Fixtures/Saloon/Tools/FirecrawlTool-43bcd63cc9d9b98eb8488d0e1a4c4174.json @@ -1,31 +1,27 @@ { - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:15 GMT", - "Content-Type": "application\/json", - "Content-Length": "1001", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1423", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999868", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_83947e3fedb8e55c0cecd4763dc7106a", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=kl0HCYhDWdQBHgu.au70qqhChKk5RaAT1LEbZ7.6R18-1729560555-1.0.1.1-QcPuKMjTG83kHEndnvp.zEX6Q9wx94nCOc_NpD56yCySJKLKQ._VUZyb7N9NQW6MVPNcwO32Qxwp_YrIcZYu2A; path=\/; expires=Tue, 22-Oct-24 01:59:15 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=.MwFI73GnUCEax2U8GwoTYEDfqLLG6ccDc.TIosZQrY-1729560555299-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b714de574252-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzt9uuS0RxiTGLtYoHR26gRNPjy\",\n \"object\": \"chat.completion\",\n \"created\": 1729560553,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_N1tuNKzGU3rp68ipitruNElF\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"firecrawl_tool\",\n \"arguments\": \"{\\\"url\\\":\\\"https:\/\/www.firecrawl.dev\/\\\",\\\"extractionPrompt\\\":\\\"Describe the main purpose or focus of the website.\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 176,\n \"completion_tokens\": 36,\n \"total_tokens\": 212,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 23:47:58 GMT", + "Content-Type": "application/json", + "Content-Length": "925", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "787", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1999868", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "3ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOK69XqSun7nD4c0mmAnALLAT122\",\n \"object\": \"chat.completion\",\n \"created\": 1729900078,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_0NAw7fAgEA7GoNFhDraQqkfY\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"firecrawl_tool\",\n \"arguments\": \"{\\\"url\\\":\\\"https://www.firecrawl.dev/\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 158,\n \"completion_tokens\": 21,\n \"total_tokens\": 179,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/FirecrawlTool-57eb596433503d505d08b167660e1980.json b/tests/Fixtures/Saloon/Tools/FirecrawlTool-57eb596433503d505d08b167660e1980.json deleted file mode 100644 index 3427e5b..0000000 --- a/tests/Fixtures/Saloon/Tools/FirecrawlTool-57eb596433503d505d08b167660e1980.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:48:07 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked" - }, - "data": "{\n \"id\": \"chatcmpl-AEcx0nuS49mxVK0uzfVlDFeTQVgeB\",\n \"object\": \"chat.completion\",\n \"created\": 1728049682,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"The 'https://www.firecrawl.dev/' webpage is about Firecrawl, a web scraping tool designed for extracting, cleaning, and converting web data into formats suitable for AI applications, especially Large Language Models (LLMs). It features capabilities to crawl pages, handle dynamic content, and provide data in clean markdown or structured formats. It targets LLM engineers, data scientists, and AI researchers, offering multiple pricing plans and integration options with popular frameworks. The tool is also open-source.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 462,\n \"completion_tokens\": 108,\n \"total_tokens\": 570,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_68a5bb159e\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/FirecrawlTool-9670841841d278662b0bb2ecc61c6f68.json b/tests/Fixtures/Saloon/Tools/FirecrawlTool-9670841841d278662b0bb2ecc61c6f68.json new file mode 100644 index 0000000..ce58bac --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/FirecrawlTool-9670841841d278662b0bb2ecc61c6f68.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Fri, 25 Oct 2024 23:48:07 GMT", + "Content-Type": "application\/json", + "Content-Length": "1137", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "2912", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1994965", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "151ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOKCPKcTDVdl4TynfjEaKju1r30H\",\n \"object\": \"chat.completion\",\n \"created\": 1729900084,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Firecrawl is a service that provides web scraping and data crawling capabilities focusing on delivering clean, LLM-ready (Large Language Models) data from websites. It's designed to empower AI applications by extracting and structuring web content into markdown or other structured data formats. Firecrawl offers tools and features to handle dynamic content, rate limits, and anti-scraping mechanisms, making it ideal for developers, data scientists, and AI researchers.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 5192,\n \"completion_tokens\": 98,\n \"total_tokens\": 5290,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/FirecrawlTool-Tool.json b/tests/Fixtures/Saloon/Tools/FirecrawlTool-Tool.json index 15272c5..229a9e4 100644 --- a/tests/Fixtures/Saloon/Tools/FirecrawlTool-Tool.json +++ b/tests/Fixtures/Saloon/Tools/FirecrawlTool-Tool.json @@ -1,9 +1,10 @@ { "statusCode": 200, "headers": { - "x-powered-by": "Express", - "access-control-allow-origin": "*", - "content-type": "application\/json; charset=utf-8" + "X-Powered-By": "Express", + "Access-Control-Allow-Origin": "*", + "Content-Type": "application\/json; charset=utf-8", + "Content-Length": "21428" }, - "data": "{\"success\":true,\"data\":{\"extract\":{\"result\":\"- **Main Topic**: The webpage is about Firecrawl, a web scraping tool designed to extract, clean, and convert web data into formats suitable for AI applications, particularly LLMs (Large Language Models).\\n\\n- **Key Features**:\\n - Crawl and scrape accessible subpages with no sitemap required.\\n - Returns clean markdown or structured data useful for training AI applications.\\n - Capable of handling dynamic content rendered with JavaScript.\\n - Built with reliability in mind, ensuring users receive the latest data without caching.\\n\\n- **Target Audience**: The service targets LLM engineers, data scientists, AI researchers, and developers looking to make use of web data for various purposes including machine learning model training and content aggregation.\\n\\n- **Business Model**: Firecrawl offers multiple pricing plans that allow users to start for free with 500 credits and scale up based on their scraping needs. There are options for free, hobbyist, standard, growth, and enterprise plans.\\n\\n- **Integration**: The tool integrates with popular frameworks like LlamaIndex, Langchain, and others to facilitate the development of AI applications.\\n\\n- **Open Source**: Firecrawl is open-source, inviting contributions from the community.\\n\\n- **Support**: The webpage includes an FAQ section addressing concerns regarding functionality, pricing, data credit costs, crawling limitations, and more, thus providing support to potential or existing users.\"},\"metadata\":{\"title\":\"Home - Firecrawl\",\"description\":\"Firecrawl crawls and converts any website into clean markdown.\",\"language\":\"en\",\"keywords\":\"Firecrawl,Markdown,Data,Mendable,Langchain\",\"robots\":\"follow, index\",\"ogTitle\":\"Firecrawl\",\"ogDescription\":\"Turn any website into LLM-ready data.\",\"ogUrl\":\"https:\/\/www.firecrawl.dev\/\",\"ogImage\":\"https:\/\/www.firecrawl.dev\/og.png?123\",\"ogLocaleAlternate\":[],\"ogSiteName\":\"Firecrawl\",\"sourceURL\":\"https:\/\/www.firecrawl.dev\/\",\"sitemap\":{\"changefreq\":\"weekly\",\"lastmod\":\"2024-10-03T20:51:47.851Z\"},\"statusCode\":200}}}" + "data": "{\"success\":true,\"data\":{\"markdown\":\"Announcing Launch Week II - From 10\/28 to 11\/3 - [Check it out \ud83d\udd25](\/launch-week)\\n\\n[\ud83d\udca5 Get 2 months free with yearly plan](\/pricing)\\n\\nTurn websites into \\n_LLM-ready_ data\\n=====================================\\n\\nPower your AI apps with clean data crawled from any website. It's also open-source.\\n\\nStart for free (500 credits)Start for free[Talk to us](https:\/\/calendly.com\/d\/cj83-ngq-knk\/meet-firecrawl)\\n\\nA product by\\n\\n[![Mendable Logo](https:\/\/www.firecrawl.dev\/images\/mendable_logo_transparent.png)Mendable](https:\/\/mendable.ai)\\n\\n![Example Webpage](https:\/\/www.firecrawl.dev\/multiple-websites.png)\\n\\nCrawl, Scrape, Clean\\n--------------------\\n\\nWe crawl all accessible subpages and give you clean markdown for each. No sitemap required.\\n\\n \\n [\\\\\\n {\\\\\\n \\\"url\\\": \\\"https:\/\/www.firecrawl.dev\/\\\",\\\\\\n \\\"markdown\\\": \\\"## Welcome to Firecrawl\\\\\\n Firecrawl is a web scraper that allows you to extract the content of a webpage.\\\"\\\\\\n },\\\\\\n {\\\\\\n \\\"url\\\": \\\"https:\/\/www.firecrawl.dev\/features\\\",\\\\\\n \\\"markdown\\\": \\\"## Features\\\\\\n Discover how Firecrawl's cutting-edge features can \\\\\\n transform your data operations.\\\"\\\\\\n },\\\\\\n {\\\\\\n \\\"url\\\": \\\"https:\/\/www.firecrawl.dev\/pricing\\\",\\\\\\n \\\"markdown\\\": \\\"## Pricing Plans\\\\\\n Choose the perfect plan that fits your needs.\\\"\\\\\\n },\\\\\\n {\\\\\\n \\\"url\\\": \\\"https:\/\/www.firecrawl.dev\/about\\\",\\\\\\n \\\"markdown\\\": \\\"## About Us\\\\\\n Learn more about Firecrawl's mission and the \\\\\\n team behind our innovative platform.\\\"\\\\\\n }\\\\\\n ]\\n \\n\\nNote: The markdown has been edited for display purposes.\\n\\nTrusted by Top Companies\\n------------------------\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/zapier.png)](https:\/\/www.zapier.com)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/gamma.svg)](https:\/\/gamma.app)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/nvidia-com.png)](https:\/\/www.nvidia.com)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/teller-io.svg)](https:\/\/www.teller.io)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/stackai.svg)](https:\/\/www.stack-ai.com)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/palladiumdigital-co-uk.svg)](https:\/\/www.palladiumdigital.co.uk)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/worldwide-casting-com.svg)](https:\/\/www.worldwide-casting.com)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/open-gov-sg.png)](https:\/\/www.open.gov.sg)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/bain-com.svg)](https:\/\/www.bain.com)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/demand-io.svg)](https:\/\/www.demand.io)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/carrefour-logo-1.svg)](https:\/\/www.carrefour.com)\\n\\n[![Customer Logo](https:\/\/www.firecrawl.dev\/logos\/cyberagent-co-jp.svg)](https:\/\/www.cyberagent.co.jp)\\n\\nIntegrate today\\n---------------\\n\\nEnhance your applications with top-tier web scraping and crawling capabilities.\\n\\n#### Scrape\\n\\nExtract markdown or structured data from websites quickly and efficiently.\\n\\n#### Crawling\\n\\nNavigate and retrieve data from all accessible subpages, even without a sitemap.\\n\\n1\\n\\n2\\n\\n3\\n\\n4\\n\\n5\\n\\n6\\n\\n7\\n\\n8\\n\\n9\\n\\n10\\n\\n\/\/ npm install @mendable\/firecrawl-js \\n \\nimport FirecrawlApp from '@mendable\/firecrawl-js'; \\n \\nconst app \\\\= new FirecrawlApp({ apiKey: \\\"fc-YOUR\\\\_API\\\\_KEY\\\" }); \\n \\n\/\/ Scrape a website: \\nconst scrapeResult \\\\= await app.scrapeUrl('firecrawl.dev'); \\n \\nconsole.log(scrapeResult.data.markdown)\\n\\n#### Use well-known tools\\n\\nAlready fully integrated with the greatest existing tools and workflows.\\n\\n[![LlamaIndex](https:\/\/www.firecrawl.dev\/logos\/llamaindex.svg)](https:\/\/docs.llamaindex.ai\/en\/stable\/examples\/data_connectors\/WebPageDemo\/#using-firecrawl-reader\/)\\n[![Langchain](https:\/\/www.firecrawl.dev\/integrations\/langchain.png)](https:\/\/python.langchain.com\/v0.2\/docs\/integrations\/document_loaders\/firecrawl\/)\\n[![Dify](https:\/\/www.firecrawl.dev\/logos\/dify.png)](https:\/\/dify.ai\/blog\/dify-ai-blog-integrated-with-firecrawl\/)\\n[![Dify](https:\/\/www.firecrawl.dev\/integrations\/langflow_2.png)](https:\/\/www.langflow.org\/)\\n[![Flowise](https:\/\/www.firecrawl.dev\/integrations\/flowise.png)](https:\/\/flowiseai.com\/)\\n[![CrewAI](https:\/\/www.firecrawl.dev\/integrations\/crewai.png)](https:\/\/crewai.com\/)\\n\\n#### Start for free, scale easily\\n\\nKick off your journey for free and scale seamlessly as your project expands.\\n\\n[Try it out](\/signin\/signup)\\n\\n#### Open-source\\n\\nDeveloped transparently and collaboratively. Join our community of contributors.\\n\\n[Check out our repo](https:\/\/github.com\/mendableai\/firecrawl)\\n\\nWe handle the hard stuff\\n------------------------\\n\\nRotating proxies, orchestration, rate limits, js-blocked content and more\\n\\n#### Crawling\\n\\nFirecrawl crawls all accessible subpages, even without a sitemap.\\n\\n#### Dynamic content\\n\\nFirecrawl gathers data even if a website uses javascript to render content.\\n\\n#### To Markdown\\n\\nFirecrawl returns clean, well formatted markdown - ready for use in LLM applications\\n\\n#### Reliability first\\n\\nReliability is our core focus. Firecrawl is designed to ensure you get all the data you need.\\n\\n#### No Caching\\n\\nFirecrawl doesn't cache content by default. You always get the latest data.\\n\\n#### Built for AI\\n\\nBuilt by LLM engineers, for LLM engineers. Giving you clean data the way you want it.\\n\\n#### Smart Wait\\n\\nFirecrawl can intelligently wait for content to load, making scraping faster and more reliable.\\n\\n#### Actions\\n\\nClick, scroll, write, wait, press and more before extracting content.\\n\\n#### Media Parsing\\n\\nFirecrawl can parse and output clean content from web hosted pdfs, docx, images and more.\\n\\nOur wall of love\\n\\nDon't take our word for it\\n--------------------------\\n\\n![Greg Kamradt](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-02.0afeb750.jpg&w=96&q=75)\\n\\nGreg Kamradt\\n\\n[@GregKamradt](https:\/\/twitter.com\/GregKamradt\/status\/1780300642197840307)\\n\\nLLM structured data via API, handling requests, cleaning, and crawling. Enjoyed the early preview.\\n\\n![Amit Naik](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-03.ff5dbe11.jpg&w=96&q=75)\\n\\nAmit Naik\\n\\n[@suprgeek](https:\/\/twitter.com\/suprgeek\/status\/1780338213351035254)\\n\\n#llm success with RAG relies on Retrieval. Firecrawl by @mendableai structures web content for processing. \ud83d\udc4f\\n\\n![Jerry Liu](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-04.76bef0df.jpg&w=96&q=75)\\n\\nJerry Liu\\n\\n[@jerryjliu0](https:\/\/twitter.com\/jerryjliu0\/status\/1781122933349572772)\\n\\nFirecrawl is awesome \ud83d\udd25 Turns web pages into structured markdown for LLM apps, thanks to @mendableai.\\n\\n![Bardia Pourvakil](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-01.025350bc.jpeg&w=96&q=75)\\n\\nBardia Pourvakil\\n\\n[@thepericulum](https:\/\/twitter.com\/thepericulum\/status\/1781397799487078874)\\n\\nThese guys ship. I wanted types for their node SDK, and less than an hour later, I got them. Can't recommend them enough.\\n\\n![latentsauce \ud83e\uddd8\ud83c\udffd](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-07.c2285d35.jpeg&w=96&q=75)\\n\\nlatentsauce \ud83e\uddd8\ud83c\udffd\\n\\n[@latentsauce](https:\/\/twitter.com\/latentsauce\/status\/1781738253927735331)\\n\\nFirecrawl simplifies data preparation significantly, exactly what I was hoping for. Thank you for creating Firecrawl \u2764\ufe0f\u2764\ufe0f\u2764\ufe0f\\n\\n![Greg Kamradt](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-02.0afeb750.jpg&w=96&q=75)\\n\\nGreg Kamradt\\n\\n[@GregKamradt](https:\/\/twitter.com\/GregKamradt\/status\/1780300642197840307)\\n\\nLLM structured data via API, handling requests, cleaning, and crawling. Enjoyed the early preview.\\n\\n![Amit Naik](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-03.ff5dbe11.jpg&w=96&q=75)\\n\\nAmit Naik\\n\\n[@suprgeek](https:\/\/twitter.com\/suprgeek\/status\/1780338213351035254)\\n\\n#llm success with RAG relies on Retrieval. Firecrawl by @mendableai structures web content for processing. \ud83d\udc4f\\n\\n![Jerry Liu](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-04.76bef0df.jpg&w=96&q=75)\\n\\nJerry Liu\\n\\n[@jerryjliu0](https:\/\/twitter.com\/jerryjliu0\/status\/1781122933349572772)\\n\\nFirecrawl is awesome \ud83d\udd25 Turns web pages into structured markdown for LLM apps, thanks to @mendableai.\\n\\n![Bardia Pourvakil](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-01.025350bc.jpeg&w=96&q=75)\\n\\nBardia Pourvakil\\n\\n[@thepericulum](https:\/\/twitter.com\/thepericulum\/status\/1781397799487078874)\\n\\nThese guys ship. I wanted types for their node SDK, and less than an hour later, I got them. Can't recommend them enough.\\n\\n![latentsauce \ud83e\uddd8\ud83c\udffd](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-07.c2285d35.jpeg&w=96&q=75)\\n\\nlatentsauce \ud83e\uddd8\ud83c\udffd\\n\\n[@latentsauce](https:\/\/twitter.com\/latentsauce\/status\/1781738253927735331)\\n\\nFirecrawl simplifies data preparation significantly, exactly what I was hoping for. Thank you for creating Firecrawl \u2764\ufe0f\u2764\ufe0f\u2764\ufe0f\\n\\n![Michael Ning](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-05.76d7cd3e.png&w=96&q=75)\\n\\nMichael Ning\\n\\n[](#)\\n\\nFirecrawl is impressive, saving us 2\/3 the tokens and allowing gpt3.5turbo use over gpt4. Major savings in time and money.\\n\\n![Alex Reibman \ud83d\udd87\ufe0f](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-06.4ee7cf5a.jpeg&w=96&q=75)\\n\\nAlex Reibman \ud83d\udd87\ufe0f\\n\\n[@AlexReibman](https:\/\/twitter.com\/AlexReibman\/status\/1780299595484131836)\\n\\nMoved our internal agent's web scraping tool from Apify to Firecrawl because it benchmarked 50x faster with AgentOps.\\n\\n![Michael](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-08.0bed40be.jpeg&w=96&q=75)\\n\\nMichael\\n\\n[@michael\\\\_chomsky](#)\\n\\nI really like some of the design decisions Firecrawl made, so I really want to share with others.\\n\\n![Paul Scott](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-09.d303b5b4.png&w=96&q=75)\\n\\nPaul Scott\\n\\n[@palebluepaul](https:\/\/twitter.com\/palebluepaul)\\n\\nAppreciating your lean approach, Firecrawl ticks off everything on our list without the cost prohibitive overkill.\\n\\n![Michael Ning](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-05.76d7cd3e.png&w=96&q=75)\\n\\nMichael Ning\\n\\n[](#)\\n\\nFirecrawl is impressive, saving us 2\/3 the tokens and allowing gpt3.5turbo use over gpt4. Major savings in time and money.\\n\\n![Alex Reibman \ud83d\udd87\ufe0f](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-06.4ee7cf5a.jpeg&w=96&q=75)\\n\\nAlex Reibman \ud83d\udd87\ufe0f\\n\\n[@AlexReibman](https:\/\/twitter.com\/AlexReibman\/status\/1780299595484131836)\\n\\nMoved our internal agent's web scraping tool from Apify to Firecrawl because it benchmarked 50x faster with AgentOps.\\n\\n![Michael](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-08.0bed40be.jpeg&w=96&q=75)\\n\\nMichael\\n\\n[@michael\\\\_chomsky](#)\\n\\nI really like some of the design decisions Firecrawl made, so I really want to share with others.\\n\\n![Paul Scott](https:\/\/www.firecrawl.dev\/_next\/image?url=%2F_next%2Fstatic%2Fmedia%2Ftestimonial-09.d303b5b4.png&w=96&q=75)\\n\\nPaul Scott\\n\\n[@palebluepaul](https:\/\/twitter.com\/palebluepaul)\\n\\nAppreciating your lean approach, Firecrawl ticks off everything on our list without the cost prohibitive overkill.\\n\\nFlexible Pricing\\n----------------\\n\\nStart for free, then scale as you grow\\n\\nYearly (17% off)Yearly (2 months free)Monthly\\n\\nFree Plan\\n---------\\n\\n500 credits\\n\\n$0 one-time\\n\\nNo credit card requiredGet Started\\n\\n* Scrape 500 pages\\n* 10 \/scrape per min\\n* 1 \/crawl per min\\n\\nHobby\\n-----\\n\\n3,000 credits per month\\n\\n$16\/month\\n\\n$228\/yr$190\/yr (Billed annually)\\n\\nSubscribe$158\/yr\\n\\n* Scrape 3,000 pages\\\\*\\n* 20 \/scrape per min\\n* 3 \/crawl per min\\n\\nStandardMost Popular\\n--------------------\\n\\n100,000 credits per month\\n\\n$83\/month\\n\\n$1188\/yr$990\/yr (Billed annually)\\n\\nSubscribe$822\/yr\\n\\n* Scrape 100,000 pages\\\\*\\n* 100 \/scrape per min\\n* 10 \/crawl per min\\n* 2 seats\\n\\nGrowth\\n------\\n\\n500,000 credits per month\\n\\n$333\/month\\n\\n$4788\/yr$3990\/yr (Billed annually)\\n\\nSubscribe$3312\/yr\\n\\n* Scrape 500,000 pages\\\\*\\n* 1000 \/scrape per min\\n* 50 \/crawl per min\\n* 4 seats\\n* Priority Support\\n\\nAdd-ons\\n-------\\n\\n### Auto Recharge Credits\\n\\nAutomatically recharge your credits when you run low.\\n\\n$11per 1000 credits\\n\\nEnable Auto Recharge\\n\\nSubscribe to a plan to enable auto recharge\\n\\n### Credit Pack\\n\\nPurchase a pack of additional monthly credits.\\n\\n$9\/mo for 1000 credits\\n\\nPurchase Credit Pack\\n\\nSubscribe to a plan to purchase credit packs\\n\\nEnterprise Plan\\n---------------\\n\\nUnlimited credits. Custom RPMs.\\n\\nTalk to us\\n\\n* Top priority support\\n* Feature Acceleration\\n* SLAs\\n* Account Manager\\n* Custom rate limits volume\\n* Custom concurrency limits\\n* Custom seats\\n* CEO's number\\n\\n\\\\* a \/scrape refers to the [scrape](https:\/\/docs.firecrawl.dev\/api-reference\/endpoint\/scrape)\\n API endpoint. Structured extraction costs vary. See [credits table](\/pricing#credits)\\n.\\n\\n\\\\* a \/crawl refers to the [crawl](https:\/\/docs.firecrawl.dev\/api-reference\/endpoint\/crawl)\\n API endpoint.\\n\\nAPI Credits\\n-----------\\n\\nCredits are consumed for each API request, varying by endpoint and feature.\\n\\n| Features | Credits |\\n| --- | --- |\\n| Scrape(\/scrape) | 1 \/ page |\\n| Crawl(\/crawl) | 1 \/ page |\\n| Map (\/map) | 1 \/ call |\\n| Search(\/search) | 1 \/ page |\\n| Scrape + LLM extraction (\/scrape) | 5 \/ page |\\n\\n[\ud83d\udd25](\/)\\n\\nReady to _Build?_\\n-----------------\\n\\nStart scraping web data for your AI apps today. \\nNo credit card needed.\\n\\n[Get Started](\/signin)\\n\\n[Talk to us](https:\/\/calendly.com\/d\/cj83-ngq-knk\/meet-firecrawl)\\n\\nFAQ\\n---\\n\\nFrequently asked questions about Firecrawl\\n\\n#### General\\n\\nWhat is Firecrawl?\\n\\nFirecrawl turns entire websites into clean, LLM-ready markdown or structured data. Scrape, crawl and extract the web with a single API. Ideal for AI companies looking to empower their LLM applications with web data.\\n\\nWhat sites work?\\n\\nFirecrawl is best suited for business websites, docs and help centers. We currently don't support social media platforms.\\n\\nWho can benefit from using Firecrawl?\\n\\nFirecrawl is tailored for LLM engineers, data scientists, AI researchers, and developers looking to harness web data for training machine learning models, market research, content aggregation, and more. It simplifies the data preparation process, allowing professionals to focus on insights and model development.\\n\\nIs Firecrawl open-source?\\n\\nYes, it is. You can check out the repository on GitHub. Keep in mind that this repository is currently in its early stages of development. We are in the process of merging custom modules into this mono repository.\\n\\nWhat is the difference between Firecrawl and other web scrapers?\\n\\nFirecrawl is designed with reliability and AI-ready data in mind. We focus on delivering data reliably and in a LLM-ready format - so you can spend less tokens and build better AI applications.\\n\\nWhat is the difference between the open-source version and the hosted version?\\n\\nFirecrawl's hosted version features Fire-engine which is our proprietary scraper that takes care of proxies, anti-bot mechanisms and more. It is an intelligent scraper designed to get the data you need - reliably. The hosted version also allows for actions (interacting with the page before scraping), a dashboard for analytics, and it is 1 API call away.\\n\\n#### Scraping & Crawling\\n\\nHow does Firecrawl handle dynamic content on websites?\\n\\nUnlike traditional web scrapers, Firecrawl is equipped to handle dynamic content rendered with JavaScript. It ensures comprehensive data collection from all accessible subpages, making it a reliable tool for scraping websites that rely heavily on JS for content delivery.\\n\\nWhy is it not crawling all the pages?\\n\\nThere are a few reasons why Firecrawl may not be able to crawl all the pages of a website. Some common reasons include rate limiting, and anti-scraping mechanisms, disallowing the crawler from accessing certain pages. If you're experiencing issues with the crawler, please reach out to our support team at help@firecrawl.com.\\n\\nCan Firecrawl crawl websites without a sitemap?\\n\\nYes, Firecrawl can access and crawl all accessible subpages of a website, even in the absence of a sitemap. This feature enables users to gather data from a wide array of web sources with minimal setup.\\n\\nWhat formats can Firecrawl convert web data into?\\n\\nFirecrawl specializes in converting web data into clean, well-formatted markdown. This format is particularly suited for LLM applications, offering a structured yet flexible way to represent web content.\\n\\nHow does Firecrawl ensure the cleanliness of the data?\\n\\nFirecrawl employs advanced algorithms to clean and structure the scraped data, removing unnecessary elements and formatting the content into readable markdown. This process ensures that the data is ready for use in LLM applications without further preprocessing.\\n\\nIs Firecrawl suitable for large-scale data scraping projects?\\n\\nAbsolutely. Firecrawl offers various pricing plans, including a Scale plan that supports scraping of millions of pages. With features like caching and scheduled syncs, it's designed to efficiently handle large-scale data scraping and continuous updates, making it ideal for enterprises and large projects.\\n\\nDoes it respect robots.txt?\\n\\nYes, Firecrawl crawler respects the rules set in a website's robots.txt file. If you notice any issues with the way Firecrawl interacts with your website, you can adjust the robots.txt file to control the crawler's behavior. Firecrawl user agent name is 'FirecrawlAgent'. If you notice any behavior that is not expected, please let us know at help@firecrawl.com.\\n\\nWhat measures does Firecrawl take to handle web scraping challenges like rate limits and caching?\\n\\nFirecrawl is built to navigate common web scraping challenges, including stealth proxies, rate limits, and smart wait. It smartly manages requests and employs techniques to minimize bandwidth usage and avoid triggering anti-scraping mechanisms, ensuring reliable data collection.\\n\\nDoes Firecrawl handle captcha or authentication?\\n\\nFirecrawl avoids captcha by using stealth proxies. When it encounters captcha, it attempts to solve it automatically, but this is not always possible. We are working to add support for more captcha solving methods. Firecrawl can handle authentication by providing auth headers to the API.\\n\\n#### API Related\\n\\nWhere can I find my API key?\\n\\nClick on the dashboard button on the top navigation menu when logged in and you will find your API key in the main screen and under API Keys.\\n\\n#### Billing\\n\\nIs Firecrawl free?\\n\\nFirecrawl is free for the first 500 scraped pages (500 free credits). After that, you can upgrade to our Standard or Growth plans for more credits and higher rate limits.\\n\\nIs there a pay per use plan instead of monthly?\\n\\nWe currently do notoffer a pay per use plan, instead you can upgrade to our Standard or Growth plans for more credits and higher rate limits.\\n\\nHow many credit does scraping, crawling, and extraction cost?\\n\\nScraping costs 1 credit per page. Crawling costs 1 credit per page. Check out the credits table in the pricing page for more details.\\n\\nDo you charge for failed requests (scrape, crawl, extract)?\\n\\nWe do not charge for any failed requests (scrape, crawl, extract). Please contact support at help@firecrawl.com if you have notice something wrong.\\n\\nWhat payment methods do you accept?\\n\\nWe accept payments through Stripe which accepts most major credit cards, debit cards, and PayPal.\",\"metadata\":{\"title\":\"Home - Firecrawl\",\"description\":\"Firecrawl crawls and converts any website into clean markdown.\",\"language\":\"en\",\"keywords\":\"Firecrawl,Markdown,Data,Mendable,Langchain\",\"robots\":\"follow, index\",\"ogTitle\":\"Firecrawl\",\"ogDescription\":\"Turn any website into LLM-ready data.\",\"ogUrl\":\"https:\/\/www.firecrawl.dev\",\"ogImage\":\"https:\/\/www.firecrawl.dev\/og.png?123\",\"ogLocaleAlternate\":[],\"ogSiteName\":\"Firecrawl\",\"viewport\":\"width=device-width, initial-scale=1\",\"author\":\"Firecrawl\",\"referrer\":\"origin-when-cross-origin\",\"creator\":\"Firecrawl\",\"publisher\":\"Firecrawl\",\"og:title\":\"Firecrawl\",\"og:description\":\"Turn any website into LLM-ready data.\",\"og:url\":\"https:\/\/www.firecrawl.dev\",\"og:site_name\":\"Firecrawl\",\"og:image\":\"https:\/\/www.firecrawl.dev\/og.png?123\",\"og:type\":\"website\",\"twitter:card\":\"summary_large_image\",\"twitter:site\":\"@vercel\",\"twitter:title\":\"Home - Firecrawl\",\"twitter:description\":\"Firecrawl crawls and converts any website into clean markdown.\",\"twitter:image\":\"https:\/\/www.firecrawl.dev\/og.png?123\",\"sourceURL\":\"https:\/\/www.firecrawl.dev\/\",\"sitemap\":{\"changefreq\":\"weekly\",\"lastmod\":\"2024-10-25T20:17:46.663Z\"},\"statusCode\":200}}}" } diff --git a/tests/Fixtures/Saloon/Tools/FirecrawlTool-ab05a60a52727034e24aa4e6cf67e965.json b/tests/Fixtures/Saloon/Tools/FirecrawlTool-ab05a60a52727034e24aa4e6cf67e965.json deleted file mode 100644 index 9e6c062..0000000 --- a/tests/Fixtures/Saloon/Tools/FirecrawlTool-ab05a60a52727034e24aa4e6cf67e965.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:19 GMT", - "Content-Type": "application/json", - "Content-Length": "1243", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "3743", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999501", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "14ms", - "x-request-id": "req_6c49e6f9afc19e947109dfc9ef9ce202", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=nOMULEv5yuI9xFkS7CdqwA5I2RT1MMrui697RxR7lWY-1729560559-1.0.1.1-NXx07yOPtkm_wBncy6piWMBpcgvkwy91py7vKafSkCI_q1_gUkDtFCM43IPnJRPsPmZqGnbt0zUW3mTjLMw_tQ; path=/; expires=Tue, 22-Oct-24 01:59:19 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=nB4vf77ERmsCEGV.YXAeeJg8hzi4jzIRjmwLmxIeJt4-1729560559792-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b722892b1982-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKxzwFiarb6UIp1MHNP6ix6pjESmk\",\n \"object\": \"chat.completion\",\n \"created\": 1729560556,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"The website 'https://www.firecrawl.dev/' is about Firecrawl, a web scraping tool designed for extracting, cleaning, and converting web data into formats suitable for AI applications, particularly Large Language Models (LLMs). It offers features like crawling web subpages without needing a sitemap, handling JavaScript-rendered content, and providing clean markdown or structured data for AI training. The target audience includes LLM engineers, data scientists, and AI researchers. Firecrawl is open-source and offers various pricing plans to accommodate different user needs.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 497,\n \"completion_tokens\": 118,\n \"total_tokens\": 615,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-16ade5c7afd2bc82237a2c2c38ac43da.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-16ade5c7afd2bc82237a2c2c38ac43da.json deleted file mode 100644 index ae6c277..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-16ade5c7afd2bc82237a2c2c38ac43da.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sat, 12 Oct 2024 15:46:24 GMT", - "Content-Type": "application\/json", - "Content-Length": "1044", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHYbvg2Z022Dp9J1lKpW8A7JyNBqe\",\n \"object\": \"chat.completion\",\n \"created\": 1728747983,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_C9LE4B5gWbExU1y747Hgs2wZ\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS Total_Organizations, AVG(funding_rounds) AS Average_Funding_Rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 298,\n \"completion_tokens\": 48,\n \"total_tokens\": 346,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-17f20fbcbd7ad04b632e81d68f84cf54.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-17f20fbcbd7ad04b632e81d68f84cf54.json deleted file mode 100644 index 46a05cf..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-17f20fbcbd7ad04b632e81d68f84cf54.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sat, 12 Oct 2024 15:46:31 GMT", - "Content-Type": "application\/json", - "Content-Length": "786", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHYc1C2fumsoLczurFDZ8Kuns7CRP\",\n \"object\": \"chat.completion\",\n \"created\": 1728747989,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There are 100 organizations currently operating, and the average number of funding rounds for these organizations is 5.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1214,\n \"completion_tokens\": 34,\n \"total_tokens\": 1248,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-32010a33b3c9a74d727fd084d741b723.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-32010a33b3c9a74d727fd084d741b723.json new file mode 100644 index 0000000..4386aac --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SQLTestAgent-32010a33b3c9a74d727fd084d741b723.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:35:05 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2Tg9OLCnafZfBrfPZPvwzYx1eii\",\n \"object\": \"chat.completion\",\n \"created\": 1741732504,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_vn9gNVjXQhe8mgPko9D5s4sA\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS organization_count, AVG(num_funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1182,\n \"completion_tokens\": 48,\n \"total_tokens\": 1230,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-3e0f0fd702de589714e68a3b90a2ac15.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-3e0f0fd702de589714e68a3b90a2ac15.json deleted file mode 100644 index 1c09674..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-3e0f0fd702de589714e68a3b90a2ac15.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:23 GMT", - "Content-Type": "application\/json", - "Content-Length": "1044", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1526", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999814", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "5ms", - "x-request-id": "req_2059b123e21a9db863f680b770278918", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=guVqR.qKuJyrWAcltjsK8jsZ16EItRlFsXa.ROQ3oUg-1729560563-1.0.1.1-q_oavJ0x_uuIj1MxntLxATA1dU3Dkzg7HzLm2Ndg4vOTnNyfPv1V8ZwEmF1mBPLDibmeuQAYLdbiXEN2M16FXQ; path=\/; expires=Tue, 22-Oct-24 01:59:23 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=xYJXGfv7beSxp_v.6fPQ4UGWnSZ86A3455lGlRorIw0-1729560563398-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b746f90d0ce1-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy01tp4VAvOrPo24egK0NiQxcao6\",\n \"object\": \"chat.completion\",\n \"created\": 1729560561,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_TTyOgEachMKRBCv1QZhbOeaj\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS total_organizations, AVG(funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 345,\n \"completion_tokens\": 47,\n \"total_tokens\": 392,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-4bee15d63dcfd3b54ef6f5e689b0d57e.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-4bee15d63dcfd3b54ef6f5e689b0d57e.json deleted file mode 100644 index c65be21..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-4bee15d63dcfd3b54ef6f5e689b0d57e.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 22:30:08 GMT", - "Content-Type": "application\/json", - "Content-Length": "746", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ6omhwtFZhgwTJ9ymAXfWsCD8Ovh\",\n \"object\": \"chat.completion\",\n \"created\": 1729117804,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There are 100 organizations operating with an average of 5 funding rounds each.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1214,\n \"completion_tokens\": 28,\n \"total_tokens\": 1242,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-4c3078626dcfa6950ae2eb9ae69d71d9.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-4c3078626dcfa6950ae2eb9ae69d71d9.json deleted file mode 100644 index 72e9b88..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-4c3078626dcfa6950ae2eb9ae69d71d9.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sat, 12 Oct 2024 15:46:26 GMT", - "Content-Type": "application/json", - "Content-Length": "925", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHYbyju4ZTcAQag0iGgiU4S6DD3gd\",\n \"object\": \"chat.completion\",\n \"created\": 1728747986,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_9ABiqHRAVvqiks60jaHYI9L7\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 414,\n \"completion_tokens\": 18,\n \"total_tokens\": 432,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_4dba7dd7b3\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-5c0d5e203062af04810663fcedb6fcee.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-5c0d5e203062af04810663fcedb6fcee.json deleted file mode 100644 index 6035bb7..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-5c0d5e203062af04810663fcedb6fcee.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sat, 12 Oct 2024 15:46:22 GMT", - "Content-Type": "application/json", - "Content-Length": "897", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHYbuZGSMw35f3TwaP1nMvPUvhNmK\",\n \"object\": \"chat.completion\",\n \"created\": 1728747982,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_3UbiicoV2jrxS6qtWp2H2X3X\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"list_s_q_l_database_tool\",\n \"arguments\": \"{}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 241,\n \"completion_tokens\": 14,\n \"total_tokens\": 255,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-61990bddb088570835ac9679ebff1a34.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-61990bddb088570835ac9679ebff1a34.json deleted file mode 100644 index ebf94bc..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-61990bddb088570835ac9679ebff1a34.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 22:29:59 GMT", - "Content-Type": "application/json", - "Content-Length": "925", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ6ofbbJHNhxqlO8izo8PsfwQ2Dq5\",\n \"object\": \"chat.completion\",\n \"created\": 1729117797,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_jbH2d8t80nQjfpCQoeyPvbST\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 416,\n \"completion_tokens\": 18,\n \"total_tokens\": 434,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-66d1e5c81c777310402eeedcac4d9854.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-66d1e5c81c777310402eeedcac4d9854.json new file mode 100644 index 0000000..d43f3c2 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SQLTestAgent-66d1e5c81c777310402eeedcac4d9854.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:35:02 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2TWQ0fWQ14cPG8xAvRbVnEE2fMr\",\n \"object\": \"chat.completion\",\n \"created\": 1741732494,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_0yhH0Zokg7KeawPgHLsR5XFK\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS organization_count, AVG(funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 349,\n \"completion_tokens\": 47,\n \"total_tokens\": 396,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-69088b2ddcf517d967507def8d0bc9e9.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-69088b2ddcf517d967507def8d0bc9e9.json deleted file mode 100644 index b584899..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-69088b2ddcf517d967507def8d0bc9e9.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:29 GMT", - "Content-Type": "application\/json", - "Content-Length": "757", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1176", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999094", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "27ms", - "x-request-id": "req_37a09ee5507aa155d015a29878bb4078", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=A9yzFLnE6kVi6.wlRB9qaJ1V41Qi1YGJ4SoCXQH6HNo-1729560569-1.0.1.1-YvvQydpUUtNfxrFAgbAu1DUjbuRuAkFOfkAyjIw1aWfv0Q0u6PtAN_tmYm5npzzDdEdqw97d1OHKTa_sZDn3jg; path=\/; expires=Tue, 22-Oct-24 01:59:29 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=Y83CCP2u_w9zGbMZ3ZZ6LiAbyxzaEMMhrzE6R2VLEgQ-1729560569590-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b76fcec017e9-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy08fPRRCPOJll5zCiC9Tf9RgIvy\",\n \"object\": \"chat.completion\",\n \"created\": 1729560568,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There are 100 organizations currently operating, with an average of 5 funding rounds each.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1257,\n \"completion_tokens\": 30,\n \"total_tokens\": 1287,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-6c936275667473da519c385ffd4d808c.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-6c936275667473da519c385ffd4d808c.json deleted file mode 100644 index 04bfffb..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-6c936275667473da519c385ffd4d808c.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sat, 12 Oct 2024 15:46:29 GMT", - "Content-Type": "application/json", - "Content-Length": "1050", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AHYbzWAqcQdUtpiRgQCj91a8MxLsO\",\n \"object\": \"chat.completion\",\n \"created\": 1728747987,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_HRfBVryYOnQu8uYZPZ6dePje\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS Total_Organizations, AVG(num_funding_rounds) AS Average_Funding_Rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1135,\n \"completion_tokens\": 49,\n \"total_tokens\": 1184,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-78ec69527dda312ef75dea8aa1f07271.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-78ec69527dda312ef75dea8aa1f07271.json deleted file mode 100644 index 0506f31..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-78ec69527dda312ef75dea8aa1f07271.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 22:30:03 GMT", - "Content-Type": "application\/json", - "Content-Length": "1050", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AJ6ohb7t1RSh7SvJ80DTNFg1LmOEf\",\n \"object\": \"chat.completion\",\n \"created\": 1729117799,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_AK5VFPZ98VbxrxdUF054HRAs\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) as total_organizations, AVG(num_funding_rounds) as average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1137,\n \"completion_tokens\": 48,\n \"total_tokens\": 1185,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-abf1d4c9a9f535c0fbcb9eff86e94f08.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-abf1d4c9a9f535c0fbcb9eff86e94f08.json index d6fd204..323d1ff 100644 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-abf1d4c9a9f535c0fbcb9eff86e94f08.json +++ b/tests/Fixtures/Saloon/Tools/SQLTestAgent-abf1d4c9a9f535c0fbcb9eff86e94f08.json @@ -1,31 +1,10 @@ { - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:21 GMT", - "Content-Type": "application/json", - "Content-Length": "897", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "632", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999856", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "4ms", - "x-request-id": "req_56d8781ddcde5a717472de7255a7991f", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=yScYbZHL_Rd7LMBdTpqIYLccKSzl1rlP5zEzZgjGq3Y-1729560561-1.0.1.1-ZFJrMkEq2vNiXa5YjLYUMEEAmr72W7Gj2ujOu4699wkYYbI5scdPcP0grtI10lvMPQJWdM5FxH.0YyFeWrAtew; path=/; expires=Tue, 22-Oct-24 01:59:21 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=yDuONGmF_ychELOKioHUiji5lE8KMuWVkYMzCG979FM-1729560561339-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b73f89834326-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy001GD1R3IFY492fC5V4tIRqf04\",\n \"object\": \"chat.completion\",\n \"created\": 1729560560,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_fOZCSDVshke9wStxQAoXXOE2\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"list_s_q_l_database_tool\",\n \"arguments\": \"{}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 284,\n \"completion_tokens\": 14,\n \"total_tokens\": 298,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:34:11 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2SoKLA4Fk9GT1H380nK7p2sRkQo\",\n \"object\": \"chat.completion\",\n \"created\": 1741732450,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_8jaJA5AbElrJ7SKdxKJkMy65\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"list_s_q_l_database_tool\",\n \"arguments\": \"{}\"\n }\n }\n ],\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 284,\n \"completion_tokens\": 15,\n \"total_tokens\": 299,\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_7c63087da1\"\n}\n" } diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-c3e01ea6bb2c55897054959716fc7d4b.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-c3e01ea6bb2c55897054959716fc7d4b.json new file mode 100644 index 0000000..6af27c7 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SQLTestAgent-c3e01ea6bb2c55897054959716fc7d4b.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:35:07 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2TiLIXLUOzFXZ4nUDp8QzpR81z8\",\n \"object\": \"chat.completion\",\n \"created\": 1741732506,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"There are 100 organizations operating and the average number of funding rounds for them is 5.\\\"\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1257,\n \"completion_tokens\": 32,\n \"total_tokens\": 1289,\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_bf9cb2c77f\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-c739a365fead056b4056318d93427f1f.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-c739a365fead056b4056318d93427f1f.json new file mode 100644 index 0000000..323ee15 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SQLTestAgent-c739a365fead056b4056318d93427f1f.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 22:35:04 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA2TfKj2B2Z19l5WKdvUJ9KYbKAcS\",\n \"object\": \"chat.completion\",\n \"created\": 1741732503,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_hjalJcC4sp9LDGdg3ugzOX6W\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 461,\n \"completion_tokens\": 19,\n \"total_tokens\": 480,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-e3b7bce01bc7df21e79bf8c5c7fbf744.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-e3b7bce01bc7df21e79bf8c5c7fbf744.json deleted file mode 100644 index af5e86a..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-e3b7bce01bc7df21e79bf8c5c7fbf744.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:28 GMT", - "Content-Type": "application/json", - "Content-Length": "1050", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "2142", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999110", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "26ms", - "x-request-id": "req_50e972e2d459ebad8d8b2efc671b393d", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=09n047pzK1ARvDHZPk2f0N5N_VdzPp0t7ZvFNdA1.mo-1729560568-1.0.1.1-ZNsGq9Vnotn9x1yolzrlh4y1tEpKaNzhtfv9Oq_p5_gBcm_AXnlYCF.3Yak2kBu_upwxALCausj4oCiw7fjZKQ; path=/; expires=Tue, 22-Oct-24 01:59:28 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=dAOMJBz_uESCqPJqSTnOfjZDmF8LDId7aGFeu4CLfWI-1729560568037-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b7601da68cc8-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy053cRiePzZPxxhOhoBpyz1t7R4\",\n \"object\": \"chat.completion\",\n \"created\": 1729560565,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_Yx8Chp7MvDVisrQT9QKYL1na\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) AS total_organizations, AVG(num_funding_rounds) AS average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1180,\n \"completion_tokens\": 48,\n \"total_tokens\": 1228,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-e8159268c7e07a723f5966bd56d71812.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-e8159268c7e07a723f5966bd56d71812.json deleted file mode 100644 index 3669707..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-e8159268c7e07a723f5966bd56d71812.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:25 GMT", - "Content-Type": "application\/json", - "Content-Length": "925", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1688", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999756", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "7ms", - "x-request-id": "req_1d896cac3b2f36a11d63050f0744a671", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=kjd46MXC4gZrZJbsCCK3en9OCtrGlZMIV3P7UO7fLWk-1729560565-1.0.1.1-sB5B.Ax3jmsAzGtlT_ZYH27YHwwnL96egOpsOQ2wc8SaGD2cmW.OGSEpUop_jNshPIl5oR_iWRI9al66DrukrQ; path=\/; expires=Tue, 22-Oct-24 01:59:25 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=fXHmS2G3edYEejtHbzQySiss4wDMDKvYOgfnUiaXn6Q-1729560565521-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b7533d0272c2-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy03kK87akDyLYbbJuDqrhHSx0R4\",\n \"object\": \"chat.completion\",\n \"created\": 1729560563,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_5Hxryd7lM0K79EMz6cTdEKC9\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"info_s_q_l_database_tool\",\n \"arguments\": \"{\\\"tables\\\":\\\"organizations\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 459,\n \"completion_tokens\": 18,\n \"total_tokens\": 477,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Tools/SQLTestAgent-fd2cd6d73785dc8bae6e230fd57c4dd7.json b/tests/Fixtures/Saloon/Tools/SQLTestAgent-fd2cd6d73785dc8bae6e230fd57c4dd7.json deleted file mode 100644 index b6ac2d6..0000000 --- a/tests/Fixtures/Saloon/Tools/SQLTestAgent-fd2cd6d73785dc8bae6e230fd57c4dd7.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Wed, 16 Oct 2024 22:29:54 GMT", - "Content-Type": "application\/json", - "Content-Length": "1044", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "3660", - "openai-version": "2020-10-01" - }, - "data": "{\n \"id\": \"chatcmpl-AJ6oYLoBB7TZNFedUf9dVYg1tU6ZT\",\n \"object\": \"chat.completion\",\n \"created\": 1729117790,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_hJZqVBM0g5QzyroXcz8asyfv\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"query_s_q_l_data_base_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"SELECT COUNT(*) as total_organizations, AVG(funding_rounds) as average_funding_rounds FROM organizations WHERE status = 'operating'\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 302,\n \"completion_tokens\": 47,\n \"total_tokens\": 349,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-3ca51b450f65fd56079ce1db68405384.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-3ca51b450f65fd56079ce1db68405384.json deleted file mode 100644 index 81c1c9e..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-3ca51b450f65fd56079ce1db68405384.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:47 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "15503", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1993944", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "181ms", - "x-request-id": "req_b28823223838ac9fe8e69d5305c1b36a", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=aCCfAOS5xf0lUlwFIpj6oIBEMZ7u5UklTIjGKX4VWLc-1729560587-1.0.1.1-WXF.mGTeHhf3ncnnaWPM9RAVkcEUMBNQZ0KY238Dy1COFW3AKLs0Rs8OGWh5PlZEI0EHGfN1anPU66RyyI9ULg; path=/; expires=Tue, 22-Oct-24 01:59:47 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=I7wUOmNBlQg7QrAzXx24GwbiCEBKJtdobXTPllfKYPg-1729560587513-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b7860d318c54-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy0CIR6qrXS1HLjvd7OsRNZlio4S\",\n \"object\": \"chat.completion\",\n \"created\": 1729560572,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": [\\n {\\n \\\"title\\\": \\\"Apple MacBook Air M4: news, rumors, and everything we know\\\",\\n \\\"date\\\": \\\"10/04/2024\\\",\\n \\\"link\\\": \\\"https://www.techradar.com/computing/macbooks/macbook-air-m4\\\"\\n },\\n {\\n \\\"title\\\": \\\"Apple Intelligence to boost iPhone 16 series sales: Analysts\\\",\\n \\\"date\\\": \\\"10/04/2024\\\",\\n \\\"link\\\": \\\"https://www.androidheadlines.com/2024/10/apple-intelligence-to-boost-iphone-16-series-sales-analysts.html\\\"\\n },\\n {\\n \\\"title\\\": \\\"Thursday\u2019s Headlines: Apples and Honey and Game 3 Edition\\\",\\n \\\"date\\\": \\\"10/03/2024\\\",\\n \\\"link\\\": \\\"https://nyc.streetsblog.org/2024/10/03/thursdays-headlines-apples-and-honey-and-game-3-edition\\\"\\n },\\n {\\n \\\"title\\\": \\\"NYC buses tout Big Flavor in The Big Apple\\\",\\n \\\"date\\\": \\\"10/03/2024\\\",\\n \\\"link\\\": \\\"https://theproducenews.com/headlines/nyc-buses-tout-big-flavor-big-apple\\\"\\n },\\n {\\n \\\"title\\\": \\\"First iOS 18 and iPadOS 18 patches fix serious bugs\\\",\\n \\\"date\\\": \\\"10/03/2024\\\",\\n \\\"link\\\": \\\"https://www.cultofmac.com/news/ios-18-0-1-ipados-macos-sequoia-15-0-1-patches-fix-serious-bugs\\\"\\n },\\n {\\n \\\"title\\\": \\\"'Tastes are changing so rapidly': Biting into the Western New York apple market\\\",\\n \\\"date\\\": \\\"10/01/2024\\\",\\n \\\"link\\\": \\\"https://www.wkbw.com/news/local-news/niagara-orleans/tastes-are-changing-rapidly-biting-into-the-wny-apple-market\\\"\\n },\\n {\\n \\\"title\\\": \\\"These five Apple products will likely be discontinued next month\\\",\\n \\\"date\\\": \\\"09/28/2024\\\",\\n \\\"link\\\": \\\"https://9to5mac.com/2024/09/28/apple-discontinuing-products-october/\\\"\\n },\\n {\\n \\\"title\\\": \\\"Apple possibly cuts Q4 iPhone 16 builds by 3M: Barclays\\\",\\n \\\"date\\\": \\\"10/01/2024\\\",\\n \\\"link\\\": \\\"https://seekingalpha.com/news/4154936-apple-possibly-cuts-q4-iphone-16-builds-by-3m-barclays\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 8015,\n \"completion_tokens\": 567,\n \"total_tokens\": 8582,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_83975a045a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-8b5a265c43dea6f4ed40a3d21bd13bf1.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-8b5a265c43dea6f4ed40a3d21bd13bf1.json index 819f2c6..9b224b8 100644 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-8b5a265c43dea6f4ed40a3d21bd13bf1.json +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-8b5a265c43dea6f4ed40a3d21bd13bf1.json @@ -1,31 +1,27 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:29:31 GMT", + "Date": "Sat, 26 Oct 2024 00:23:31 GMT", "Content-Type": "application\/json", - "Content-Length": "929", + "Content-Length": "959", "Connection": "keep-alive", "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1293", + "openai-organization": "REDACTED", + "openai-processing-ms": "1017", "openai-version": "2020-10-01", "x-ratelimit-limit-requests": "10000", "x-ratelimit-limit-tokens": "2000000", "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999869", + "x-ratelimit-remaining-tokens": "1999870", "x-ratelimit-reset-requests": "6ms", "x-ratelimit-reset-tokens": "3ms", - "x-request-id": "req_8923e9fd27fdf4c71c793871bb1e7728", + "x-request-id": "REDACTED", "strict-transport-security": "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=kpMEZlG9LXuUY7.KeKSdeRYEXv8A3zzF52Yawk0n9iY-1729560571-1.0.1.1-RpHwS3B6cX2zMPV6RXNAlm5SNYR6770etyc007R12TzIiVXrbvBqWOESUig3FoKxKHnWBPAVMv1sKrQtWfXUIA; path=\/; expires=Tue, 22-Oct-24 01:59:31 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=irhipbpfUKI6EJeYDSNkQG1M3ohGDv6GaASL3TO5pME-1729560571556-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], "X-Content-Type-Options": "nosniff", "Server": "cloudflare", - "CF-RAY": "8d65b77b6e5b43dc-EWR", + "CF-RAY": "REDACTED", "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKy0APamYmgS1VTadZJi7C5FrEqqP\",\n \"object\": \"chat.completion\",\n \"created\": 1729560570,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_V5KWoIiGuHXsVshlA3A7dNa7\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serp_a_p_i_google_news_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"Apple headlines\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 154,\n \"completion_tokens\": 21,\n \"total_tokens\": 175,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file + "data": "{\n \"id\": \"chatcmpl-AMOsUwBs6HPUh0gSOD743erZmBCyQ\",\n \"object\": \"chat.completion\",\n \"created\": 1729902210,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_FwpuiFgRrdAQKAVO5T8PoscY\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serp_a_p_i_google_news_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"Apple current headlines\\\",\\\"numberOfResults\\\":5}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 164,\n \"completion_tokens\": 27,\n \"total_tokens\": 191,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-931a8013da7ad77812c0c398303da8c6.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-931a8013da7ad77812c0c398303da8c6.json new file mode 100644 index 0000000..2508826 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-931a8013da7ad77812c0c398303da8c6.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 26 Oct 2024 00:23:45 GMT", + "Content-Type": "application/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "10313", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1993096", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "207ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOsZWlKyrYfeXmFNITBJVya111Ne\",\n \"object\": \"chat.completion\",\n \"created\": 1729902215,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": [\\n {\\n \\\"title\\\": \\\"Is Apple Stock A Buy Before September-Quarter Earnings?\\\",\\n \\\"date\\\": \\\"10/21/2024, 11:35 AM, +0000 UTC\\\",\\n \\\"link\\\": \\\"https://www.investors.com/news/technology/apple-stock-buy-now-aapl-stock/\\\"\\n },\\n {\\n \\\"title\\\": \\\"Apple Inc. (AAPL) Stock Price, News, Quote & History\\\",\\n \\\"date\\\": \\\"10/11/2024, 11:13 PM, +0000 UTC\\\",\\n \\\"link\\\": \\\"https://finance.yahoo.com/quote/AAPL/\\\"\\n },\\n {\\n \\\"title\\\": \\\"Apple Loop: iPhone 17 Pro Leaks, Surprise iPad Mini Launch, New MacBook Pro Specs\\\",\\n \\\"date\\\": \\\"10/18/2024, 10:57 PM, +0000 UTC\\\",\\n \\\"link\\\": \\\"https://www.forbes.com/sites/ewanspence/2024/10/18/apple-news-headliens-iphone-17-pro-ipad-mini-macbook-pro-macos-ai-iphone-se/\\\"\\n },\\n {\\n \\\"title\\\": \\\"Apple set to unveil iPhone 16 on Monday. Here's what to expect.\\\",\\n \\\"date\\\": \\\"09/09/2024, 07:00 AM, +0000 UTC\\\",\\n \\\"link\\\": \\\"https://www.cbsnews.com/news/apple-iphone-16-what-to-expect/\\\"\\n },\\n {\\n \\\"title\\\": \\\"Apple embraces the AI craze with its newly unleashed iPhone 16 lineup\\\",\\n \\\"date\\\": \\\"09/09/2024, 07:00 AM, +0000 UTC\\\",\\n \\\"link\\\": \\\"https://apnews.com/article/apple-iphone-16-artificial-intelligence-google-samsung-4f30bf40ad89793d80f8ac3a20f9e79c\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 8669,\n \"completion_tokens\": 411,\n \"total_tokens\": 9080,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-937c344a3cba8d7375b74873e978e987.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-937c344a3cba8d7375b74873e978e987.json deleted file mode 100644 index 0395e82..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-937c344a3cba8d7375b74873e978e987.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:28:33 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "4088", - "openai-version": "2020-10-01", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1993988", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "180ms", - "x-request-id": "req_ea42ec3d15659e1c1a94b84479735987", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=nRsufRrCFkJUU6rNZE.aPGWq4pGGJC_gR5Kgnxa6Z0s-1728048513-1.0.1.1-FwbSn2ZUlNEr617jDYTAh3SFbQADepnLXOPySrvAgjnaGp7voeN9KRuZdDXSr0MEaVYiZRmhlFSrIBWfv3gceQ; path=/; expires=Fri, 04-Oct-24 13:58:33 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=9PBmduC0guXvwA05WGlLVeA7n9UPCtlik5giG6TpWps-1728048513055-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8cd583eb291f72b1-EWR" - }, - "data": "{\n \"id\": \"chatcmpl-AEce5UHMf7CttxNj4cAUtUVtceBGU\",\n \"object\": \"chat.completion\",\n \"created\": 1728048509,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"answer\\\": \\\"Recent headlines about Apple include news on the expected discontinuation of some Apple products next month, the debut of macOS, iPadOS, and watchOS updates, and details on the newly unveiled iPhone 16 at the 'Glowtime' event. There are also updates on the rumored iPhone SE 4 with Apple A18 SoC, and speculations about Apple potentially cutting Q4 iPhone 16 builds.\\\"\\n}\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 7980,\n \"completion_tokens\": 89,\n \"total_tokens\": 8069,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_68a5bb159e\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-9aaf34285a5c2c42a794174131d55815.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-9aaf34285a5c2c42a794174131d55815.json deleted file mode 100644 index a1504cf..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-9aaf34285a5c2c42a794174131d55815.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:28:26 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "727", - "openai-version": "2020-10-01", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999914", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "2ms", - "x-request-id": "req_fb4ecdc6356f20e6a9f8b07cf25589ef", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=hNgbfiooKjFS8FEPIvnJTD9odY7xPbvQsLpTqbX_iFA-1728048506-1.0.1.1-kQfwQat5tvtn0Z4wzRsvziYS1iizhdxiWjieAjH9QQB.X7wQ0nrhNoxd6eGLb3Zlt7LH9hCfL3zWn_S2BLhWsQ; path=\/; expires=Fri, 04-Oct-24 13:58:26 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=UPyB9m5qEFghaS7msF4J0RqK5oDvaxDmZrFk58yk588-1728048506366-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8cd583d6db84426a-EWR" - }, - "data": "{\n \"id\": \"chatcmpl-AEce1yUvyLgLRPVxbG50zwZCm73vH\",\n \"object\": \"chat.completion\",\n \"created\": 1728048505,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_dW1jrvJFqLQayxfkIEwV5oZm\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serp_a_p_i_google_news_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"Apple headlines\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 119,\n \"completion_tokens\": 21,\n \"total_tokens\": 140,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_81dd8129df\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-Tool.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-Tool.json index e6654e1..7f3b208 100644 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-Tool.json +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-Tool.json @@ -1,26 +1,11 @@ { - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:28:28 GMT", - "Content-Type": "application\/json; charset=utf-8", - "Content-Length": "69743", - "Connection": "keep-alive", - "x-frame-options": "SAMEORIGIN", - "x-xss-protection": "1; mode=block", - "x-content-type-options": "nosniff", - "x-download-options": "noopen", - "x-permitted-cross-domain-policies": "none", - "referrer-policy": "strict-origin-when-cross-origin", - "x-robots-tag": "noindex, nofollow", - "serpapi-search-id": "66ffed7aa775f2cd03f714cb", - "cache-control": "max-age=3600, public", - "etag": "W\/\"7ac6bd4b1832494375f330d7a0320484\"", - "x-request-id": "3cf71008-7044-4c32-934a-f856fa0f5490", - "x-runtime": "1.960136", - "CF-Cache-Status": "MISS", - "Accept-Ranges": "bytes", - "Server": "cloudflare", - "CF-RAY": "8cd583ddaff70fa4-EWR" - }, - "data": "{\n \"search_metadata\": {\n \"id\": \"66ffed7aa775f2cd03f714cb\",\n \"status\": \"Success\",\n \"json_endpoint\": \"https:\/\/serpapi.com\/searches\/a2a0f682cef54f6c\/66ffed7aa775f2cd03f714cb.json\",\n \"created_at\": \"2024-10-04 13:28:26 UTC\",\n \"processed_at\": \"2024-10-04 13:28:26 UTC\",\n \"google_news_url\": \"https:\/\/news.google.com\/search?q=Apple+headlines\",\n \"raw_html_file\": \"https:\/\/serpapi.com\/searches\/a2a0f682cef54f6c\/66ffed7aa775f2cd03f714cb.html\",\n \"total_time_taken\": 1.88\n },\n \"search_parameters\": {\n \"engine\": \"google_news\",\n \"q\": \"Apple headlines\"\n },\n \"news_results\": [\n {\n \"position\": 1,\n \"title\": \"Apple MacBook Air M4: news, rumors, and everything we know\",\n \"source\": {\n \"name\": \"TechRadar\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/h3jba9VMZkFHG1QVakElUh94ugAfWEJfnBwg-v1YYuGEsB7Xo0Na9-1HSp2RTIvArgKT-D_A5g\",\n \"authors\": [\n \"Allisa James\"\n ]\n },\n \"link\": \"https:\/\/www.techradar.com\/computing\/macbooks\/macbook-air-m4\",\n \"thumbnail\": \"https:\/\/cdn.mos.cms.futurecdn.net\/YMV9guZan663h45mX9uAiW-1200-80.jpg\",\n \"date\": \"10\/04\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 2,\n \"title\": \"Apple Intelligence to boost iPhone 16 series sales: Analysts\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Kristijan Lucic\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/10\/apple-intelligence-to-boost-iphone-16-series-sales-analysts.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/09\/iPhone-16-Apple-Intelligence-videos-featured.webp\",\n \"date\": \"10\/04\/2024, 12:15 PM, +0000 UTC\"\n },\n {\n \"position\": 3,\n \"title\": \"Thursday\u2019s Headlines: Apples and Honey and Game 3 Edition\",\n \"source\": {\n \"name\": \"Streetsblog New York City\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/nyc.streetsblog.org&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Gersh Kuntzman\"\n ]\n },\n \"link\": \"https:\/\/nyc.streetsblog.org\/2024\/10\/03\/thursdays-headlines-apples-and-honey-and-game-3-edition\",\n \"thumbnail\": \"https:\/\/lede-admin.nyc.streetsblog.org\/wp-content\/uploads\/sites\/48\/2024\/10\/mets-apples-and-honey-copy.jpg\",\n \"date\": \"10\/03\/2024, 04:01 AM, +0000 UTC\"\n },\n {\n \"position\": 4,\n \"title\": \"NYC buses tout Big Flavor in The Big Apple\",\n \"source\": {\n \"name\": \"The Produce News\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/wuub-wDJCPPgnapHs_ugjjQqBJndZvj7tMby7GC68PvPfNHvKM8WzvOfU9H6X9NYAXEBG_L4\"\n },\n \"link\": \"https:\/\/theproducenews.com\/headlines\/nyc-buses-tout-big-flavor-big-apple\",\n \"thumbnail\": \"https:\/\/theproducenews.com\/sites\/default\/files\/2024-10\/big_0.jpg\",\n \"date\": \"10\/03\/2024, 05:22 PM, +0000 UTC\"\n },\n {\n \"position\": 5,\n \"title\": \"First iOS 18 and iPadOS 18 patches fix serious bugs\",\n \"source\": {\n \"name\": \"Cult of Mac\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.cultofmac.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Ed Hardy\"\n ]\n },\n \"link\": \"https:\/\/www.cultofmac.com\/news\/ios-18-0-1-ipados-macos-sequoia-15-0-1-patches-fix-serious-bugs\",\n \"thumbnail\": \"https:\/\/www.cultofmac.com\/wp-content\/uploads\/2024\/10\/iOS-18-0-1-iPhone-patch.jpg\",\n \"date\": \"10\/03\/2024, 10:22 PM, +0000 UTC\"\n },\n {\n \"position\": 6,\n \"title\": \"'Tastes are changing so rapidly': Biting into the Western New York apple market\",\n \"source\": {\n \"name\": \"WKBW 7 News Buffalo\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/HGPE25JOhbEj3RXOj_zPEIQ6Y3udEIZBbCxJXZkQ2OsnoRsjKdWthaCTKmAnnCJzn9DdvYBZ0_w\",\n \"authors\": [\n \"Jaurdyn Johnson\"\n ]\n },\n \"link\": \"https:\/\/www.wkbw.com\/news\/local-news\/niagara-orleans\/tastes-are-changing-rapidly-biting-into-the-wny-apple-market\",\n \"thumbnail\": \"https:\/\/x-default-stgec.uplynk.com\/ause\/slices\/7b3\/1020d6d1597347248f5d62c059a4c7e3\/7b38fc681f45437c8b22f0c4cf2a7c3e\/poster_395e44f0353149cdaa3360526cdaa2e4.png\",\n \"date\": \"10\/01\/2024, 10:22 PM, +0000 UTC\"\n },\n {\n \"position\": 7,\n \"title\": \"These five Apple products will likely be discontinued next month\",\n \"source\": {\n \"name\": \"9to5Mac\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/_yU7TVFBBY59lFTGF_gB-G6AZql5gRMNflxhEDwVjLtWfN6Xh6JPnPNqKAJO75h_BLghOkzYPw\",\n \"authors\": [\n \"Michael Burkhardt\"\n ]\n },\n \"link\": \"https:\/\/9to5mac.com\/2024\/09\/28\/apple-discontinuing-products-october\/\",\n \"thumbnail\": \"https:\/\/9to5mac.com\/wp-content\/uploads\/sites\/6\/2024\/07\/apple-device-lineup.jpg?quality=82&strip=all&w=1600\",\n \"date\": \"09\/28\/2024, 06:06 PM, +0000 UTC\"\n },\n {\n \"position\": 8,\n \"title\": \"Apple possibly cuts Q4 iPhone 16 builds by 3M: Barclays\",\n \"source\": {\n \"name\": \"Seeking Alpha\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/-AuHkF7hb4isLMc4bLhcnlm659w_XJ47Fpzr3Zllk7uXpuSuSOuj7f89tXfFkYLzol580OROWQ\",\n \"authors\": [\n \"Brandon Evans\"\n ]\n },\n \"link\": \"https:\/\/seekingalpha.com\/news\/4154936-apple-possibly-cuts-q4-iphone-16-builds-by-3m-barclays\",\n \"thumbnail\": \"https:\/\/static.seekingalpha.com\/cdn\/s3\/uploads\/getty_images\/1342200877\/image_1342200877.jpg?io=getty-c-w750\",\n \"date\": \"10\/01\/2024, 12:38 PM, +0000 UTC\"\n },\n {\n \"position\": 9,\n \"title\": \"Apple rolls out new macOS, iPadOS & watchOS updates\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Rishaj Upadhyay\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/10\/apple-macos-ipados-watchos-new-updates.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2023\/04\/best-apple-watch-bands-AM-AH-1420x1065.webp\",\n \"date\": \"10\/04\/2024, 11:25 AM, +0000 UTC\"\n },\n {\n \"position\": 10,\n \"title\": \"Apple Event Live Blog: All the iPhone 16 News as It Happens\",\n \"source\": {\n \"name\": \"WIRED\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/glGHGpbYzksKAWY0zPxk7YYJrqE5FF5dALI27SaNZaeqEoUhgEUH4vo_DX00DRdkEjcVJCQkmNA\"\n },\n \"link\": \"https:\/\/www.wired.com\/live\/apple-event-live-blog-iphone-16-apple-watch-series-10\/\",\n \"thumbnail\": \"https:\/\/media.wired.com\/photos\/66db72107aee34945bc8d711\/master\/w_1280%2Cc_limit\/AppleEvent-Sep2024-Live-Blog-GEAR-2156429444.jpg\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 11,\n \"title\": \"Apple Loop: Faster iPhone 17 Leaks, Disappointing iPhone 16 Pro Sales, Critical iOS Update\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/09\/27\/apple-news-headlines-iphone-17-leak-iphone-16-pro-sales-ios-18-problems\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/66f6f1e6e0a0a1e965def862\/Largest-Apple-Flagship-Store-in-Asia\/960x0.jpg?height=473&width=711&fit=bounds\",\n \"date\": \"09\/27\/2024, 08:15 PM, +0000 UTC\"\n },\n {\n \"position\": 12,\n \"title\": \"Apple's new iPhone 16 unveiled at \\\"Glowtime\\\" event\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Megan Cerullo\"\n ]\n },\n \"link\": \"https:\/\/www.cbsnews.com\/news\/apple-iphone-16-event-its-glowtime\/\",\n \"thumbnail\": \"https:\/\/assets2.cbsnewsstatic.com\/hub\/i\/r\/2024\/09\/09\/128cd6e9-3b69-4b35-92b7-5d129fd16427\/thumbnail\/1200x630\/487b1ef616f9f1845fc8c287c08d588b\/apple-iphone-16-pro-finish-lineup-240909.jpg?v=0736ad3ef1e9ddfe1218648fe91d6c9b\",\n \"date\": \"09\/23\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 13,\n \"title\": \"I\u2019m starting to get really worried about Apple Intelligence on the iPhone 16\",\n \"source\": {\n \"name\": \"BGR\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/4FsrisEYLJxNnxAnGn44Oy89qtkBbFouAm47vtzzczHq_8EwiA8EnrB6zBc5XvYkOBLjA35O0bI\",\n \"authors\": [\n \"Chris Smith\"\n ]\n },\n \"link\": \"https:\/\/bgr.com\/tech\/im-starting-to-get-really-worried-about-apple-intelligence-on-the-iphone-16\/\",\n \"thumbnail\": \"https:\/\/bgr.com\/wp-content\/uploads\/2024\/09\/Apple-iPhone-16-Apple-Intelligence-240909.jpg?quality=82&strip=all&w=1020&h=574&crop=1\",\n \"date\": \"09\/27\/2024, 01:02 PM, +0000 UTC\"\n },\n {\n \"position\": 14,\n \"title\": \"Apple launches iPhone 16 with Apple Intelligence\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Daniel Howley\"\n ]\n },\n \"link\": \"https:\/\/finance.yahoo.com\/news\/apple-launches-iphone-16-with-apple-intelligence-183724722.html\",\n \"thumbnail\": \"https:\/\/s.yimg.com\/ny\/api\/res\/1.2\/GZtaAoU8xOco42u2pBSQFA--\/YXBwaWQ9aGlnaGxhbmRlcjt3PTEyMDA7aD02NzU-\/https:\/\/s.yimg.com\/os\/creatr-uploaded-images\/2024-09\/6c3ede00-6eda-11ef-afc7-570d4cbe1e63\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 15,\n \"title\": \"Fix Apple News Not Working in macOS Sonoma 14\/14.7\",\n \"source\": {\n \"name\": \"The Mac Observer\",\n \"icon\": \"https:\/\/encrypted-tbn3.gstatic.com\/faviconV2?url=https:\/\/www.macobserver.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Danny Maiorca\"\n ]\n },\n \"link\": \"https:\/\/www.macobserver.com\/macos\/fix-apple-news-not-working-macos-sonoma\/\",\n \"thumbnail\": \"https:\/\/www.macobserver.com\/wp-content\/uploads\/2024\/08\/Apple-News-Not-Working-in-Sonoma-14.6.png\",\n \"date\": \"09\/19\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 16,\n \"title\": \"iPhone SE 4 to come with Apple's & Apple A18 SoC\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Kristijan Lucic\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/10\/iphone-se-4-apple-a18-soc-5g-modem.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/10\/Apple-iPhone-14-image-394389438-1420x798.webp\",\n \"date\": \"10\/04\/2024, 10:30 AM, +0000 UTC\"\n },\n {\n \"position\": 17,\n \"title\": \"Phone Comparisons: Apple iPhone 16 Plus vs Samsung Galaxy S24+\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Kristijan Lucic\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/phone-comparisons-apple-iphone-16-plus-vs-samsung-galaxy-s24-plus\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/10\/Apple-iPhone-16-Plus-vs-Samsung-Galaxy-S24-Plus-comparison-1-1420x799.webp\",\n \"date\": \"10\/04\/2024, 12:03 AM, +0000 UTC\"\n },\n {\n \"position\": 18,\n \"title\": \"Apple No Longer Investing in OpenAI Despite AI Integration\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Arthur Brown\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/09\/apple-wont-invest-openai.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/09\/Apple-and-OpenAI-BW-1420x799.webp\",\n \"date\": \"09\/30\/2024, 06:34 PM, +0000 UTC\"\n },\n {\n \"position\": 19,\n \"title\": \"Apple could FINALLY be breaking into the smart home market\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Alap Naik Desai\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/09\/apple-smart-home-display.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/05\/Apple-iPad-launch-event-promo-videos-jpg.webp\",\n \"date\": \"09\/29\/2024, 09:59 PM, +0000 UTC\"\n },\n {\n \"position\": 20,\n \"title\": \"Pebblebee Universal trackers support Google's & Apple's networks\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Jean Leon\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/10\/pebblebee-universal-trackers-support-googles-apples-networks.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/10\/Pebblebee-Tag-Universal-trackers-featured-1420x857.webp\",\n \"date\": \"10\/01\/2024, 11:43 PM, +0000 UTC\"\n },\n {\n \"position\": 21,\n \"title\": \"Apple's not done with AR devices!\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Alap Naik Desai\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/09\/apple-lighter-smart-glasses-ai.html\",\n \"date\": \"09\/30\/2024, 02:19 PM, +0000 UTC\"\n },\n {\n \"position\": 22,\n \"title\": \"'Sugar' Renewed for Season 2 at Apple \u2014 Colin Farrell Detective Drama\",\n \"source\": {\n \"name\": \"TVLine\",\n \"icon\": \"https:\/\/encrypted-tbn0.gstatic.com\/faviconV2?url=https:\/\/tvline.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Matt Webb Mitovich\"\n ]\n },\n \"link\": \"https:\/\/tvline.com\/news\/sugar-renewed-season-2-colin-farrell-1235345681\/\",\n \"thumbnail\": \"https:\/\/tvline.com\/wp-content\/uploads\/2024\/10\/sugar-renewed-season-2.jpg?w=600&h=400&crop=1\",\n \"date\": \"10\/02\/2024, 05:00 PM, +0000 UTC\"\n },\n {\n \"position\": 23,\n \"title\": \"iPhone 16 event news: 6 biggest Apple announcements\",\n \"source\": {\n \"name\": \"BGR\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/4FsrisEYLJxNnxAnGn44Oy89qtkBbFouAm47vtzzczHq_8EwiA8EnrB6zBc5XvYkOBLjA35O0bI\",\n \"authors\": [\n \"Jose Adorno\"\n ]\n },\n \"link\": \"https:\/\/bgr.com\/tech\/iphone-16-event-announcements\/\",\n \"thumbnail\": \"https:\/\/bgr.com\/wp-content\/uploads\/2024\/08\/apple-event-iphone-16-its-glowtime-bgr.jpg?quality=82&strip=all&w=1020&h=574&crop=1\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 24,\n \"title\": \"Phone Comparisons: Apple iPhone 15 Pro Max vs Apple iPhone 16 Pro Max\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Kristijan Lucic\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/phone-comparisons-apple-iphone-15-pro-max-vs-apple-iphone-16-pro-max\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/09\/Apple-iPhone-15-Pro-Max-vs-Apple-iPhone-16-Pro-Max-comparison-1420x799.webp\",\n \"date\": \"10\/01\/2024, 12:15 AM, +0000 UTC\"\n },\n {\n \"position\": 25,\n \"title\": \"Apple News+ introduces Quartiles, a new original spelling game, and Offline Mode for subscribers\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/05\/apple-news-plus-introduces-quartiles-a-new-game-and-offline-mode-for-subscribers\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/05\/apple-news-plus-introduces-quartiles-a-new-game-and-offline-mode-for-subscribers\/article\/Apple-News-Plus-updates_big.jpg.large.jpg\",\n \"date\": \"05\/13\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 26,\n \"title\": \"Apple Loop: Apple Confirms iPhone 16 Details, Ted Lasso\u2019s Surprise Return, Final iPhone Design Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/09\/01\/apple-news-headlines-iphone-16-pro-launch-date-glow-time-ipad-mini-macbook-m4-ted-lasso\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/6133b1d73f00df9fdccf31db\/Apple-Holds-Press-Event-To-Introduce-New-iPhone\/960x0.jpg?height=474&width=711&fit=bounds\",\n \"date\": \"09\/01\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 27,\n \"title\": \"As clicks dry up for news sites, could Apple\u2019s news app be a lifeline?\",\n \"source\": {\n \"name\": \"Semafor\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/AbSzSdrdQUkZJn_qrAwfEK1kmdBsfgLZLMoABj-SujOJMwaEez-tWO1eccFXrV-SmdFQsqT6aA\",\n \"authors\": [\n \"Maxwell Tani\"\n ]\n },\n \"link\": \"https:\/\/www.semafor.com\/article\/05\/19\/2024\/as-clicks-dry-up-for-news-sites-could-apples-news-app-be-a-lifeline\",\n \"thumbnail\": \"https:\/\/img.semafor.com\/c2462871f6cdaa0cc014ab883b662fc895228f28-1280x961.png?w=1920&q=75&auto=format\",\n \"date\": \"05\/19\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 28,\n \"title\": \"iPhone 16 event live blog: all the news from Apple\u2019s keynote\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\"\n },\n \"link\": \"https:\/\/www.theverge.com\/2024\/9\/9\/24236176\/apple-iphone-16-liveblog-apple-watch-x-airpods-keynote\",\n \"thumbnail\": \"https:\/\/cdn.vox-cdn.com\/thumbor\/D2Qsyy66kdl2lrFkyytmB9EpbmM=\/0x0:2774x1508\/1200x628\/filters:focal(1387x754:1388x755)\/cdn.vox-cdn.com\/uploads\/chorus_asset\/file\/25612454\/iphone_16_colors.png\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 29,\n \"title\": \"Apple Loop: iPhone 16 Pro Design Leaks, Goodbye Apple ID, Confusion Over iPhone 16 Launch Date\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/08\/25\/apple-news-headlines-iphone-16-pro-launch-date-iphone-16-specs-ios18-apple-id\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/66c8e269af3f2a30f86abb0c\/Street-Style---Dusseldorf---October-2023\/0x0.jpg?crop=1557,876,x0,y402,safe&height=400&width=711&fit=bounds\",\n \"date\": \"08\/25\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 30,\n \"title\": \"Apple\u2019s Worldwide Developers Conference to kick off June 10 with Keynote address\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/05\/apples-worldwide-developers-conference-to-kick-off-june-10-with-keynote-address\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/05\/apples-worldwide-developers-conference-to-kick-off-june-10-with-keynote-address\/article\/Apple-WWDC24-event-details-hero_big.jpg.large.jpg\",\n \"date\": \"05\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 31,\n \"title\": \"Introducing Apple Sports, a new app for sports fans\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/02\/introducing-apple-sports-a-new-app-for-sports-fans\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/02\/introducing-apple-sports-a-new-app-for-sports-fans\/article\/Apple-Sports-welcome-screen_inline.jpg.large.jpg\",\n \"date\": \"02\/21\/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 32,\n \"title\": \"Apple set to unveil iPhone 16 on Monday. Here's what to expect.\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Megan Cerullo\"\n ]\n },\n \"link\": \"https:\/\/www.cbsnews.com\/news\/apple-iphone-16-what-to-expect\/\",\n \"thumbnail\": \"https:\/\/assets3.cbsnewsstatic.com\/hub\/i\/r\/2024\/09\/06\/54addc5f-0728-44c0-a6ed-82f9c280b1c2\/thumbnail\/1200x630\/7a24cbc0c2d97648057037008029eb18\/gettyimages-2156548093.jpg?v=0736ad3ef1e9ddfe1218648fe91d6c9b\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 33,\n \"title\": \"There may be 'good news' coming for Apple Watch users in the US\",\n \"source\": {\n \"name\": \"The Times of India\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/d9mz-OKghOQPsgxRv1BQzQAI44ifiA_6aAk-gRwo4_32mZXM-TSd5vIY1rL1P2LUH9mFQPnUSRE\"\n },\n \"link\": \"https:\/\/timesofindia.indiatimes.com\/technology\/wearables\/there-may-be-good-news-coming-for-apple-watch-users-in-the-us\/articleshow\/113854337.cms\",\n \"thumbnail\": \"https:\/\/static.toiimg.com\/thumb\/msid-113854293,width-1280,height-720,resizemode-4\/113854293.jpg\",\n \"date\": \"10\/01\/2024, 12:48 PM, +0000 UTC\"\n },\n {\n \"position\": 34,\n \"title\": \"iPhone 17 Pro to include new button which will merge two existing ones\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Rishaj Upadhyay\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/10\/iphone-17-pro-to-include-new-button-which-will-merge-two-existing-ones.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/09\/Apple-iPhone-16-Pro-AM-AH-01-1420x799.webp\",\n \"date\": \"10\/01\/2024, 10:09 AM, +0000 UTC\"\n },\n {\n \"position\": 35,\n \"title\": \"Apple Loop: Apple Intelligence Delayed, Cellbrite Locked Out Of iOS, Apple TV\u2019s Emmy Nominations\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/07\/21\/apple-news-headlines-iphone-16-pro-leaks-release-launch-ai-ipad-pro-cellbrite\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/6545a83115c6278c1465a3de\/0x0.jpg?format=jpg&height=600&width=1200&fit=bounds\",\n \"date\": \"07\/21\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 36,\n \"title\": \"This is how much iPhone storage Apple Intelligence will require\",\n \"source\": {\n \"name\": \"9to5Mac\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/_yU7TVFBBY59lFTGF_gB-G6AZql5gRMNflxhEDwVjLtWfN6Xh6JPnPNqKAJO75h_BLghOkzYPw\",\n \"authors\": [\n \"Ryan Christoffel\"\n ]\n },\n \"link\": \"https:\/\/9to5mac.com\/2024\/09\/23\/this-is-how-much-iphone-storage-apple-intelligence-will-require\/\",\n \"thumbnail\": \"https:\/\/9to5mac.com\/wp-content\/uploads\/sites\/6\/2024\/09\/iphone16-pro-ai-logo.jpg?quality=82&strip=all&w=1600\",\n \"date\": \"09\/23\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 37,\n \"title\": \"\u2018It\u2019s Glowtime\u2019: all the news from Apple\u2019s iPhone 16 event\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Alex Cranz\"\n ]\n },\n \"link\": \"https:\/\/www.theverge.com\/2024\/9\/9\/24237601\/apple-iphone-16-event-announcements-products\",\n \"thumbnail\": \"https:\/\/i.ytimg.com\/vi\/dIJVwG4Glg8\/maxresdefault.jpg\",\n \"date\": \"09\/14\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 38,\n \"title\": \"Inflation back in focus, Apple's iPhone event: What to know this week\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Josh Schafer\"\n ]\n },\n \"link\": \"https:\/\/finance.yahoo.com\/news\/inflation-back-in-focus-apples-iphone-event-what-to-know-this-week-113136249.html\",\n \"thumbnail\": \"https:\/\/s.yimg.com\/ny\/api\/res\/1.2\/1Bz7SGEABqvB5QOtTIiwkQ--\/YXBwaWQ9aGlnaGxhbmRlcjt3PTEyMDA7aD04MDU-\/https:\/\/s.yimg.com\/os\/creatr-uploaded-images\/2024-06\/2278c9e0-276b-11ef-b97e-8b95714806bd\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 39,\n \"title\": \"Apple embraces the AI craze with its newly unleashed iPhone 16 lineup\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\"\n ]\n },\n \"link\": \"https:\/\/apnews.com\/article\/apple-iphone-16-artificial-intelligence-google-samsung-4f30bf40ad89793d80f8ac3a20f9e79c\",\n \"thumbnail\": \"https:\/\/dims.apnews.com\/dims4\/default\/2d71fbe\/2147483647\/strip\/true\/crop\/5472x3648+0+0\/resize\/599x399!\/quality\/90\/?url=https%3A%2F%2Fassets.apnews.com%2Ffc%2F6e%2Fc692a752e1669335caca2261fe74%2F6e07d6ee606d4711b4abe9e152e3a309\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 40,\n \"title\": \"Apple to expand repair options with support for used genuine parts\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/04\/apple-to-expand-repair-options-with-support-for-used-genuine-parts\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/04\/apple-to-expand-repair-options-with-support-for-used-genuine-parts\/article\/Apple-Self-Service-Repair-iPhone_big.jpg.large.jpg\",\n \"date\": \"04\/11\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 41,\n \"title\": \"Apple Loop: Apple iPhone 16 Pro Details, MacBook Pro\u2019s Glass Design, iPhone SE Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/09\/06\/apple-news-headlines-iphone-16-pro-specs-iphone-se-leak-ipad-mini-glowtime\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/668869a8069becf14d815a6d\/Apple-Holds-Launch-Event-For-New-Products-At-Its-Headquarters\/960x0.jpg?height=489&width=711&fit=bounds\",\n \"date\": \"09\/06\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 42,\n \"title\": \"Apple is cutting jobs across its Books and News apps\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Jess Weatherbed\"\n ]\n },\n \"link\": \"https:\/\/www.theverge.com\/2024\/8\/28\/24230344\/apple-job-layoffs-books-news-apps-digital-services\",\n \"thumbnail\": \"https:\/\/cdn.vox-cdn.com\/thumbor\/2iMntRc0KnWhZnUHElCrbbTAbUA=\/0x0:2040x1360\/1400x1050\/filters:focal(1020x680:1021x681)\/cdn.vox-cdn.com\/uploads\/chorus_asset\/file\/23598986\/VRG_Illo_5258_K_Radtke_WWDC.jpg\",\n \"date\": \"08\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 43,\n \"title\": \"Apple unveils the new 13- and 15-inch MacBook Air with the powerful M3 chip\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/03\/apple-unveils-the-new-13-and-15-inch-macbook-air-with-the-powerful-m3-chip\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/03\/apple-unveils-the-new-13-and-15-inch-macbook-air-with-the-powerful-m3-chip\/article\/Apple-MacBook-Air-2-up-hero-240304_big.jpg.large.jpg\",\n \"date\": \"03\/04\/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 44,\n \"title\": \"Good news for iPhone users, more Apple stores coming to THESE Indian cities soon\",\n \"source\": {\n \"name\": \"DNA India\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/G2KZIntNftmv-PAdzkbpVtP9klOT7CEsOzEu2Ke7HVC0FZXHw2U4SVJZl-xac-wfAeFe05LJZQ\",\n \"authors\": [\n \"Shivam Verma\"\n ]\n },\n \"link\": \"https:\/\/www.dnaindia.com\/viral\/report-good-news-for-iphone-users-more-apple-stores-coming-to-these-indian-cities-soon-3111366\",\n \"thumbnail\": \"https:\/\/cdn.dnaindia.com\/sites\/default\/files\/styles\/full\/public\/2024\/10\/04\/2655811-image-66.jpg\",\n \"date\": \"10\/04\/2024, 08:28 AM, +0000 UTC\"\n },\n {\n \"position\": 45,\n \"title\": \"Apple lays off 100 workers from its Apple News and Apple Books apps\",\n \"source\": {\n \"name\": \"New York Post \",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/FBmNEg55AyjS01UGglfHSug5fD4qJyNNZ6QXqwDhQczAmw6zPz5fUoWm9AfOtz7Ty70Gg41A\"\n },\n \"link\": \"https:\/\/nypost.com\/2024\/08\/28\/business\/apple-lays-off-100-workers-from-its-apple-news-and-apple-books-apps\/\",\n \"thumbnail\": \"https:\/\/nypost.com\/wp-content\/uploads\/sites\/2\/2024\/08\/apple-ceo-tim-cook-delivers-17743748.jpg?w=1024\",\n \"date\": \"08\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 46,\n \"title\": \"Apple iPhone 16 event: What to expect from the AI-packed 'Glowtime' show\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Daniel Howley\"\n ]\n },\n \"link\": \"https:\/\/finance.yahoo.com\/news\/apple-iphone-16-event-what-to-expect-from-the-ai-packed-glowtime-show-181750139.html\",\n \"thumbnail\": \"https:\/\/s.yimg.com\/ny\/api\/res\/1.2\/FUpP8OzTu4hsXjNvTWFFTw--\/YXBwaWQ9aGlnaGxhbmRlcjt3PTY0MDtoPTQyNw--\/https:\/\/s.yimg.com\/os\/creatr-uploaded-images\/2024-07\/a5f8edd0-4ee0-11ef-b3d7-42acff46b782\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 47,\n \"title\": \"The Athletic joins Apple News+\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2023\/12\/the-athletic-joins-apple-news-plus\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2023\/12\/the-athletic-joins-apple-news-plus\/article\/Apple-News-Plus-The-Athletic_inline.jpg.large.jpg\",\n \"date\": \"12\/19\/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 48,\n \"title\": \"Apple News Widget Disappeared After Updating to iOS 17.4.1\",\n \"source\": {\n \"name\": \"The Mac Observer\",\n \"icon\": \"https:\/\/encrypted-tbn3.gstatic.com\/faviconV2?url=https:\/\/www.macobserver.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Danny Maiorca\"\n ]\n },\n \"link\": \"https:\/\/www.macobserver.com\/iphone\/apple-news-widget-disappeared-after-updating-to-ios-17-4-1\/\",\n \"thumbnail\": \"https:\/\/www.macobserver.com\/wp-content\/uploads\/2024\/05\/Apple-News-Widget-Disappeared-iOS-17.4.png\",\n \"date\": \"05\/07\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 49,\n \"title\": \"Apple Arcade launches three new games in September, including NFL Retro Bowl \u201925\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/08\/apple-arcade-launches-three-new-games-in-september-including-nfl-retro-bowl-25\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/08\/apple-arcade-launches-three-new-games-in-september-including-nfl-retro-bowl-25\/article\/Apple-Arcade-hero_big.jpg.large.jpg\",\n \"date\": \"08\/06\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 50,\n \"title\": \"Apple 'Glowtime' event sees iPhone 16, iPhone 16 Pro, Apple Watch unveilings: Recap\",\n \"source\": {\n \"name\": \"USA TODAY\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/-azIrtjYWp_uW0mZr2EgCuDyyZ9WpFOIWNx3qM1wwCzV37NgmqATpNZGn9R0y8XklFku6Hhwz6w\",\n \"authors\": [\n \"Jonathan Limehouse\",\n \"James C. Powel\",\n \"Felecia Wellington Radel\"\n ]\n },\n \"link\": \"https:\/\/www.usatoday.com\/story\/tech\/news\/2024\/09\/09\/apple-event-2024-live-updates-iphone-watch-airpod\/75104890007\/\",\n \"thumbnail\": \"https:\/\/www.usatoday.com\/gcdn\/authoring\/authoring-images\/2024\/09\/04\/USAT\/75072775007-apple-glowtime-event.png?crop=1004,564,x14,y0&width=660&height=371&format=pjpg&auto=webp\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 51,\n \"title\": \"Apple Loop: iPhone 16 Pro Details, iOS 18\u2019s AI Plans, iPhone 14 Pro Special Offer\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/06\/02\/apple-news-headlines-iphone-16-pro-ios-18-ai-ipad-pro-logo-macbook-pro-oled\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/6622e32e24ecc74de9e50e06\/Apple-Unveils-iPhone-15-And-Other-New-Products\/0x0.jpg?crop=2880,1621,x420,y192,safe&height=400&width=711&fit=bounds\",\n \"date\": \"06\/02\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 52,\n \"title\": \"Apple Lays Off Staff Across Books, News App Divisions\",\n \"source\": {\n \"name\": \"PCMag\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/ayu6HNJcgzsC2c6JZnG6pEUI7oJ_DbiHoRxecNd8OUpY7r9r8hY4ZIDk2y765p5W50H_J8jkooM\",\n \"authors\": [\n \"Kate Irwin\"\n ]\n },\n \"link\": \"https:\/\/www.pcmag.com\/news\/apple-lays-off-staff-across-books-news-app-services-divisions\",\n \"thumbnail\": \"https:\/\/i.pcmag.com\/imagery\/articles\/03eZIlXKJeNJVlrbo07QM51-1.fit_lim.v1724850338.png\",\n \"date\": \"08\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 53,\n \"title\": \"Apple Loop: iPhone 16 Pro Details Leak, Hidden iPad Hardware, Android\u2019s Latest Win Over Apple\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/06\/08\/apple-news-headlines-iphone-16-pro-leak-ipad-pro-wwdc-ai-security\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/66636d86089e3fb303da0303\/New-Apple-iPads-Go-On-Sale-At-Fifth-Avenue-Store\/960x0.jpg?height=474&width=711&fit=bounds\",\n \"date\": \"06\/08\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 54,\n \"title\": \"California IDs coming soon in Apple Wallet and Google Wallet\",\n \"source\": {\n \"name\": \"Office of Governor Gavin Newsom\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.gov.ca.gov&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Gavin Newsom\"\n ]\n },\n \"link\": \"https:\/\/www.gov.ca.gov\/2024\/08\/15\/california-ids-coming-soon-in-apple-wallet-and-google-wallet\/\",\n \"thumbnail\": \"https:\/\/www.gov.ca.gov\/wp-content\/uploads\/2024\/08\/California-IDs-SEO-Graphic-1080x675.png\",\n \"date\": \"08\/15\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 55,\n \"title\": \"iPhone 16 Pro: release date, new cameras, A18 Pro, Camera Control and more \u2013 here's what you need to know\",\n \"source\": {\n \"name\": \"TechRadar\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/h3jba9VMZkFHG1QVakElUh94ugAfWEJfnBwg-v1YYuGEsB7Xo0Na9-1HSp2RTIvArgKT-D_A5g\",\n \"authors\": [\n \"Roland Moore-Colyer\"\n ]\n },\n \"link\": \"https:\/\/www.techradar.com\/phones\/iphone\/iphone-16-pro\",\n \"thumbnail\": \"https:\/\/cdn.mos.cms.futurecdn.net\/DDqGSRPV45EJvNtvRwHxPd-320-80.png\",\n \"date\": \"09\/18\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 56,\n \"title\": \"Apple's new AirPods Pro double as a hearing aid. Experts call it a game changer.\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Megan Cerullo\"\n ]\n },\n \"link\": \"https:\/\/www.cbsnews.com\/news\/apples-new-airpods-pro-double-hearing-aid\/\",\n \"thumbnail\": \"https:\/\/assets3.cbsnewsstatic.com\/hub\/i\/r\/2024\/09\/10\/b796220b-1f31-4d4a-9b1d-a383f333a4d5\/thumbnail\/1200x630\/e046aad944f476d4f71065b59e8dafb7\/gettyimages-2171047193.jpg?v=fa529222a2be3543711c1a879b51e860\",\n \"date\": \"09\/13\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 57,\n \"title\": \"Apple\u2019s iPhone 16 launch is a big test for consumer AI\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Daniel Howley\"\n ]\n },\n \"link\": \"https:\/\/finance.yahoo.com\/news\/apples-iphone-16-launch-is-a-big-test-for-consumer-ai-181548603.html\",\n \"thumbnail\": \"https:\/\/s.yimg.com\/ny\/api\/res\/1.2\/ZweYEdjcJM2rCmkSGG4npA--\/YXBwaWQ9aGlnaGxhbmRlcjt3PTY0MDtoPTQyNw--\/https:\/\/s.yimg.com\/os\/creatr-uploaded-images\/2024-08\/86b0bc10-6ae1-11ef-9fd4-62b5910b12bb\",\n \"date\": \"09\/04\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 58,\n \"title\": \"Apple Loop: New iPhone 16 Features Confirmed, MacBook Pro Delay, iPhone AAA Games Have Bombed\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/06\/28\/apple-news-headlines-iphone-16-leak-macbook-pro-m4-ipad-pro-sales\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/664940ea417cea3021099a6a\/Apple-Unveils-iPhone-15-And-Other-New-Products\/960x0.jpg?height=449&width=711&fit=bounds\",\n \"date\": \"06\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 59,\n \"title\": \"Exclusive: Taboola to sell ads for Apple\",\n \"source\": {\n \"name\": \"Axios\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/l85lUZ33FMIg2XGtWUFSQsRjWkxTQE_JPUVzDezzc7JDHPJO0PZgRCyNWe67UZZCQaNx6K97\",\n \"authors\": [\n \"Sara Fischer\"\n ]\n },\n \"link\": \"https:\/\/www.axios.com\/2024\/07\/16\/taboola-apple-news-deal\",\n \"thumbnail\": \"https:\/\/images.axios.com\/7PMjzI4dv5YV1_XhTqQOAU1jL3k=\/0x0:1952x1098\/1920x1080\/2024\/07\/16\/1721135329623.png\",\n \"date\": \"07\/16\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 60,\n \"title\": \"Apple News+ replaced my newsletter habit\",\n \"source\": {\n \"name\": \"Reviewed\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/wz3EnDKTmLVwIuKKV2kZTly3UaroVuW34yC_gQ_w4Bt--ifr3Z-HKSu0KgRXPAi8Y64V9ObsVQ\",\n \"authors\": [\n \"Courtney Campbell\"\n ]\n },\n \"link\": \"https:\/\/reviewed.usatoday.com\/tech\/features\/apple-news-review-news-subscription-worth\",\n \"thumbnail\": \"https:\/\/reviewed-com-res.cloudinary.com\/image\/fetch\/s--y3RbFqUl--\/b_white,c_limit,cs_srgb,f_auto,fl_progressive.strip_profile,g_center,q_auto,w_972\/https:\/\/reviewed-production.s3.amazonaws.com\/1616530543524\/apple-news-hero.jpg\",\n \"date\": \"05\/27\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 61,\n \"title\": \"Apple Maps Just Announced a Big Change. It\u2019s Very Bad News for Google\",\n \"source\": {\n \"name\": \"Inc.\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/6LaSJ44XANPmwl4MsjUF0lNmdjX0X_KWzn4GqBuQqjrOoaIURNh4U4ukcGIV2EOX3xYtAX0s\",\n \"authors\": [\n \"Jason Aten\"\n ]\n },\n \"link\": \"https:\/\/www.inc.com\/jason-aten\/apple-maps-just-announced-a-big-change-its-very-bad-news-for-google.html\",\n \"thumbnail\": \"https:\/\/img-cdn.inc.com\/image\/upload\/f_webp,c_fit,w_1920,q_auto\/images\/panoramic\/getty_533705614_wih2oe.jpg\",\n \"date\": \"07\/25\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 62,\n \"title\": \"Apple Loop: iPhone 16 Pro Release Date, Apple Intelligence Delay, iPhone Air Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/08\/09\/apple-news-headlines-iphone-16-pro-release-date-iphone-air-macbook-pro-m4\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/66b66f2ee8af9409d28bb6db\/Apple-iPhone-15-And-Apple-Watch-Series-9-Launches-In-Australia\/960x0.jpg?height=474&width=711&fit=bounds\",\n \"date\": \"08\/10\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 63,\n \"title\": \"Apple's artificial intelligence features to be delayed, Bloomberg News reports\",\n \"source\": {\n \"name\": \"Reuters\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/OzNZmYwP-Zl3sTWa8dzzyws9hou0ZihOGJ_-qanon-1iB5KwyqcHOwPxYZj54cGMZwD5qXui\",\n \"authors\": [\n \"Gursimran Kaur\",\n \"Chris Reese\"\n ]\n },\n \"link\": \"https:\/\/www.reuters.com\/technology\/apples-artificial-intelligence-features-be-delayed-bloomberg-news-reports-2024-07-28\/\",\n \"thumbnail\": \"https:\/\/cloudfront-us-east-2.images.arcpublishing.com\/reuters\/QH6Z7UBVIFPPDD2PADPC4E4U4E.jpg\",\n \"date\": \"07\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 64,\n \"title\": \"Apple cuts about 100 digital services jobs, Bloomberg News reports\",\n \"source\": {\n \"name\": \"Reuters\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/OzNZmYwP-Zl3sTWa8dzzyws9hou0ZihOGJ_-qanon-1iB5KwyqcHOwPxYZj54cGMZwD5qXui\",\n \"authors\": [\n \"Kanjyik Ghosh\",\n \"Savio D'souza\",\n \"Nivedita Bhattacharjee\"\n ]\n },\n \"link\": \"https:\/\/www.reuters.com\/technology\/apple-cuts-about-100-jobs-its-services-division-bloomberg-news-reports-2024-08-28\/\",\n \"thumbnail\": \"https:\/\/cloudfront-us-east-2.images.arcpublishing.com\/reuters\/LHKVZ4VZPNM4JB242TX3YWNCSU.jpg\",\n \"date\": \"08\/27\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 65,\n \"title\": \"Here\u2019s everything new in Apple Notes for iOS 18\",\n \"source\": {\n \"name\": \"9to5Mac\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/_yU7TVFBBY59lFTGF_gB-G6AZql5gRMNflxhEDwVjLtWfN6Xh6JPnPNqKAJO75h_BLghOkzYPw\",\n \"authors\": [\n \"Ryan Christoffel\"\n ]\n },\n \"link\": \"https:\/\/9to5mac.com\/whats-new-in-apple-notes-for-ios-18\/\",\n \"thumbnail\": \"https:\/\/9to5mac.com\/wp-content\/uploads\/sites\/6\/2024\/06\/notes-app-icon.jpg?quality=82&strip=all&w=1024\",\n \"date\": \"09\/25\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 66,\n \"title\": \"Live updates: Apple event; iPhone 16 debuts, designed for AI\",\n \"source\": {\n \"name\": \"CNN\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/8zdvTbISHUn-4iHkauW-_yQSGPD9BMrx9EWfqTIhiVm2YMYqhHC1HJWNDQoSOkMk0MRPYKxjIg\",\n \"authors\": [\n \"Samantha Delouya\",\n \"Elise Hammond\",\n \"Samantha Murphy Kelly\"\n ]\n },\n \"link\": \"https:\/\/www.cnn.com\/business\/live-news\/apple-event-iphone-16-09-09-24\/index.html\",\n \"thumbnail\": \"https:\/\/media.cnn.com\/api\/v1\/images\/stellar\/prod\/iphone16editv2-00-00-09-03-still001.jpg?c=16x9&q=w_1280,c_fill\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 67,\n \"title\": \"Apple Lays Off Around 100 Services Staff Across Apple Books and News\",\n \"source\": {\n \"name\": \"MacRumors\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/3SBMAEqsqmKgiDfi4ZLKs_-e-bKbdb5T-EPgbxAFN1kr6_qPClz_Nd2RP3ja9ZqITXLDV58QzQ\",\n \"authors\": [\n \"Tim Hardwick\"\n ]\n },\n \"link\": \"https:\/\/www.macrumors.com\/2024\/08\/28\/apple-lays-off-services-staff-apple-books\/\",\n \"thumbnail\": \"https:\/\/images.macrumors.com\/t\/SyF1yecoV1ebd0nfLMHycKhAGiw=\/400x0\/article-new\/2024\/08\/apple-books.jpg?lossy\",\n \"date\": \"08\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 68,\n \"title\": \"Apple iPad event: all the news from Apple\u2019s \u201cLet Loose\u201d reveal\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Wes Davis\"\n ]\n },\n \"link\": \"https:\/\/www.theverge.com\/2024\/5\/7\/24150047\/apple-ipad-let-loose-event-news-announcements\",\n \"thumbnail\": \"https:\/\/i.ytimg.com\/vi\/bMdhx5ijGN8\/maxresdefault.jpg\",\n \"date\": \"05\/14\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 69,\n \"title\": \"Apple Loop: iPhone 16 Pro Expectations, iPhone Air Details, Apple Watch SE Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/08\/16\/apple-news-headlines-iphone-16-pro-iphone-air-epic-app-store\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/6622e32e24ecc74de9e50e06\/Apple-Unveils-iPhone-15-And-Other-New-Products\/960x0.jpg?height=473&width=711&fit=bounds\",\n \"date\": \"08\/16\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 70,\n \"title\": \"Five new games, including Ubisoft\u2019s Rabbids: Legends of the Multiverse, arrive on Apple Arcade\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/05\/new-games-including-rabbids-legends-of-the-multiverse-arrive-on-apple-arcade\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/05\/new-games-including-rabbids-legends-of-the-multiverse-arrive-on-apple-arcade\/article\/Apple-Arcade-hero_big.jpg.large.jpg\",\n \"date\": \"05\/06\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 71,\n \"title\": \"Apple Vision Pro unlocks new opportunities for health app developers\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/03\/apple-vision-pro-unlocks-new-opportunities-for-health-app-developers\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/videos\/apple-vision-pro-health-apps-visage-ease-vp\/posters\/Apple-Vision-Pro-health-apps-Visage-Ease-VP.jpg.large_2x.jpg\",\n \"date\": \"03\/11\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 72,\n \"title\": \"Apple Arcade launches five fun titles in April\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/03\/apple-arcade-launches-five-fun-titles-in-april\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/03\/apple-arcade-launches-five-fun-titles-in-april\/article\/Apple-Arcade-hero_big.jpg.large.jpg\",\n \"date\": \"03\/12\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 73,\n \"title\": \"Apple leaps into AI with an array of upcoming iPhone features and a ChatGPT deal to smarten up\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\"\n ]\n },\n \"link\": \"https:\/\/apnews.com\/article\/apple-artificial-intelligence-siri-iphone-software-conference-4217d67977f95ead880835a71ecce098\",\n \"thumbnail\": \"https:\/\/dims.apnews.com\/dims4\/default\/62f02a8\/2147483647\/strip\/true\/crop\/5074x3383+0+0\/resize\/599x399!\/quality\/90\/?url=https%3A%2F%2Fassets.apnews.com%2Fd3%2Fa2%2F94c981c15091dd9b14acc4c09dbd%2Fa8e81e844947478d9bee864d6b8d9ff5\",\n \"date\": \"06\/10\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 74,\n \"title\": \"New Apple iPhone: What to know ahead of the company's September 9 event\",\n \"source\": {\n \"name\": \"FOX 10 News Phoenix\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/JmHj21m-BM-E2qu1_FWvXaYLuPmdD-I8DcEPNAKPcLNpRHE0bJrzqpdKwLmDjLfQETQM6pVM\",\n \"authors\": [\n \"Kenneth Wong\"\n ]\n },\n \"link\": \"https:\/\/www.fox10phoenix.com\/news\/new-apple-iphone-what-know-ahead-companys-september-9-event\",\n \"thumbnail\": \"https:\/\/images.foxtv.com\/static.fox10phoenix.com\/www.fox10phoenix.com\/content\/uploads\/2024\/09\/764\/432\/GETTY-Apple-Event-090324-scaled.jpg?ve=1&tl=1\",\n \"date\": \"09\/03\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 75,\n \"title\": \"iPhone 16 is here: Apple event live blog and news hub\",\n \"source\": {\n \"name\": \"9to5Mac\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/_yU7TVFBBY59lFTGF_gB-G6AZql5gRMNflxhEDwVjLtWfN6Xh6JPnPNqKAJO75h_BLghOkzYPw\",\n \"authors\": [\n \"Chance Miller\"\n ]\n },\n \"link\": \"https:\/\/9to5mac.com\/2024\/09\/09\/iphone-16-event-live-news-blog\/\",\n \"thumbnail\": \"https:\/\/9to5mac.com\/wp-content\/uploads\/sites\/6\/2024\/09\/9to5Glowtime.jpg?quality=82&strip=all&w=1600\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 76,\n \"title\": \"Apple renews \u201cFor All Mankind\u201d and announces new spinoff series \u201cStar City\u201d\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/tv-pr\/news\/2024\/04\/apple-renews-globally-acclaimed-hit-space-drama-for-all-mankind-for-season-five-and-announces-new-spinoff-series-star-city\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/tv-pr\/articles\/2024\/04\/apple-renews-globally-acclaimed-hit-space-drama-for-all-mankind-for-season-five-and-announces-new-spinoff-series-star-city\/images\/big-image\/big-image-01\/041724_For_All_Mankind_Big_Image_01_big_image_post.jpg.large.jpg\",\n \"date\": \"04\/17\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 77,\n \"title\": \"Apple Loop: Apple\u2019s AI Partners, Cheaper Apple Vision Plans, DoJ Launches Anti-Trust Suit\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/03\/22\/apple-news-headlines-iphone-16-leak-camera-bezels-ipad-pro-apple-vision-pro\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/650e0fd40135e3d2db5a330f\/Apple-s-New-iPhone-15-Goes-On-Sale\/0x0.jpg?crop=2905,1635,x0,y150,safe&height=400&width=711&fit=bounds\",\n \"date\": \"03\/22\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 78,\n \"title\": \"Apple\u2019s hit, global phenomenon workplace thriller \u201cSeverance\u201d to return for season two on Friday, January 17, 2025\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/tv-pr\/news\/2024\/07\/apples-hit-global-phenomenon-workplace-thriller-severance-to-return-for-season-two-on-friday-january-17-2025\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/tv-pr\/articles\/2024\/07\/apples-hit-global-phenomenon-workplace-thriller-severance-to-return-for-season-two-on-friday-january-17-2025\/images\/big-image\/big-image-01\/07102024_Severence_Season_Two_Premiere_Date_big_image_post.jpg.large.jpg\",\n \"date\": \"07\/10\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 79,\n \"title\": \"Apple must pay Ireland more than $14 billion in back taxes, court rules\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\"\n },\n \"link\": \"https:\/\/www.cbsnews.com\/news\/apple-to-pay-ireland-14-billion-tim-cook-back-taxes\/\",\n \"thumbnail\": \"https:\/\/assets3.cbsnewsstatic.com\/hub\/i\/r\/2024\/07\/27\/b6d2ce56-c8c4-47d1-8f68-118186c02f1c\/thumbnail\/1200x630\/b21fdf40da120196a841d7e360ba786e\/gettyimages-2152534755.jpg?v=159d4576ec63c034c87559bf5085176a\",\n \"date\": \"09\/10\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 80,\n \"title\": \"Apple Event 2024: All the iPhone 16, Apple Watch and AirPods news expected today\",\n \"source\": {\n \"name\": \"Engadget\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/w1hw-XN8YegN8sGKZCmPe7kI0pLiUti33nZ-iKgN0SIOp0KGL_lwI6vgitklgkgrI1yBw28R8A\",\n \"authors\": [\n \"Lawrence Bonk\"\n ]\n },\n \"link\": \"https:\/\/www.engadget.com\/mobile\/smartphones\/apple-event-2024-all-the-iphone-16-apple-watch-and-airpods-news-expected-today-192347434.html\",\n \"thumbnail\": \"https:\/\/s.yimg.com\/os\/creatr-uploaded-images\/2024-08\/34a59ca0-5e53-11ef-ba7b-af5588b97577\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 81,\n \"title\": \"Apple to open 4 more stores, sell \u2019Made in India\u2019 iPhone 16 series\",\n \"source\": {\n \"name\": \"Mangalore Today\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.mangaloretoday.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.mangaloretoday.com\/headlines\/Apple-to-open-4-more-stores-sell-rsquo-Made-in-India-rsquo-iPhone-16-series.html\",\n \"thumbnail\": \"https:\/\/www.mangaloretoday.com\/contentfiles\/2024\/oct\/I%20phone%204oct24.JPG\",\n \"date\": \"10\/04\/2024, 05:28 AM, +0000 UTC\"\n },\n {\n \"position\": 82,\n \"title\": \"Bad news: two of the best Apple Intelligence features might be delayed until iOS 18.2\",\n \"source\": {\n \"name\": \"TechRadar\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/h3jba9VMZkFHG1QVakElUh94ugAfWEJfnBwg-v1YYuGEsB7Xo0Na9-1HSp2RTIvArgKT-D_A5g\",\n \"authors\": [\n \"Axel Metz\"\n ]\n },\n \"link\": \"https:\/\/www.techradar.com\/phones\/ios\/bad-news-two-of-the-best-apple-intelligence-features-might-be-delayed-until-ios-182\",\n \"thumbnail\": \"https:\/\/cdn.mos.cms.futurecdn.net\/it2Cd3ZKp4aSzuu8ERSXdA-320-80.jpg\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 83,\n \"title\": \"Apple iPhone 16 is the least popular iPhone series in years\",\n \"source\": {\n \"name\": \"Android Headlines\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/eEXS3spaZZb8YklkgzyzVCR6F1Kz1HP46ATKcfjCJju06flKjiA8oekf5a_0yMkGz5r45Zv1GQ\",\n \"authors\": [\n \"Priya Ahluwalia\"\n ]\n },\n \"link\": \"https:\/\/www.androidheadlines.com\/2024\/09\/iphone-16-least-popular-iphone-series-in-years.html\",\n \"thumbnail\": \"https:\/\/www.androidheadlines.com\/wp-content\/uploads\/2024\/09\/Apple-iPhone-16-Pro-AH-1420x799.webp\",\n \"date\": \"09\/26\/2024, 12:35 PM, +0000 UTC\"\n },\n {\n \"position\": 84,\n \"title\": \"Apple 'Glowtime' event latest news \u2014 iPhone 16, Apple Watch 10, AirPods 4 and more\",\n \"source\": {\n \"name\": \"Tom's Guide\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/YwroNBJq4UKY_6hH7n50b5Fnc3YEroWUN9CgsQG7p4WAvyJpTsXRG6taE0Te0iJafGqtei-zG_E\",\n \"authors\": [\n \"Mark Spoonauer\",\n \"Philip Michaels\"\n ]\n },\n \"link\": \"https:\/\/www.tomsguide.com\/phones\/live\/apple-glowtime-event-iphone-16\",\n \"thumbnail\": \"https:\/\/cdn.mos.cms.futurecdn.net\/s2znttdiicQPAfCNSmVwcZ-320-80.jpg\",\n \"date\": \"09\/12\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 85,\n \"title\": \"Apple Vision Pro available in the U.S. on February 2\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/01\/apple-vision-pro-available-in-the-us-on-february-2\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/images\/2024\/01\/apple-vision-pro-available-in-the-us-on-february-2\/article\/Apple-Vision-Pro-availability-hero_big.jpg.large.jpg\",\n \"date\": \"01\/08\/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 86,\n \"title\": \"Apple Loop: RCS Messaging Tested, Refreshed Apple Watch Design, New Apple TV Appears\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/07\/07\/apple-news-headlines-iphone-16-pro-a17-apple-watch-iphone-battery-replacement-ai-rcs\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/668869a8069becf14d815a6d\/Apple-Holds-Launch-Event-For-New-Products-At-Its-Headquarters\/960x0.jpg?height=489&width=711&fit=bounds\",\n \"date\": \"07\/07\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 87,\n \"title\": \"Apple announces more than 600 new apps built for Apple Vision Pro\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https:\/\/encrypted-tbn2.gstatic.com\/faviconV2?url=https:\/\/www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https:\/\/www.apple.com\/newsroom\/2024\/02\/apple-announces-more-than-600-new-apps-built-for-apple-vision-pro\/\",\n \"thumbnail\": \"https:\/\/www.apple.com\/newsroom\/videos\/app-experiences-visionos-home\/posters\/Apple-Vision-Pro-app-experiences-visionOS-home.jpg.large_2x.jpg\",\n \"date\": \"02\/01\/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 88,\n \"title\": \"Apple renews talks with OpenAI for iPhone generative AI features, Bloomberg News reports\",\n \"source\": {\n \"name\": \"Reuters\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/OzNZmYwP-Zl3sTWa8dzzyws9hou0ZihOGJ_-qanon-1iB5KwyqcHOwPxYZj54cGMZwD5qXui\",\n \"authors\": [\n \"Jyoti Narayan\",\n \"Leslie Adler\"\n ]\n },\n \"link\": \"https:\/\/www.reuters.com\/technology\/apple-renews-talks-with-openai-iphone-generative-ai-features-bloomberg-news-2024-04-26\/\",\n \"thumbnail\": \"https:\/\/cloudfront-us-east-2.images.arcpublishing.com\/reuters\/HYCXJR2ZKZKPLLNARTFDHTQSJA.jpg\",\n \"date\": \"04\/26\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 89,\n \"title\": \"Apple juice sold by retailers including Aldi and Walmart recalled due to arsenic concerns\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Kate Gibson\"\n ]\n },\n \"link\": \"https:\/\/www.cbsnews.com\/news\/apple-juice-recall-arsenic-walmart-aldis-bjs-walgreens\/\",\n \"thumbnail\": \"https:\/\/assets2.cbsnewsstatic.com\/hub\/i\/r\/2011\/12\/01\/7beebb29-1c4f-11e3-9918-005056850598\/thumbnail\/1200x630\/394b8672a02ac81fd818d4f0611327c4\/arsenicapple-AP110915069204.jpg?v=0736ad3ef1e9ddfe1218648fe91d6c9b\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 90,\n \"title\": \"Apple stock finishes flat following Q3 earnings despite a decline in iPhone sales\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Daniel Howley\"\n ]\n },\n \"link\": \"https:\/\/finance.yahoo.com\/news\/apple-stock-finishes-flat-following-q3-earnings-despite-a-decline-in-iphone-sales-203352033.html\",\n \"thumbnail\": \"https:\/\/s.yimg.com\/ny\/api\/res\/1.2\/UB2CE5r7wOqKYh6gOymUeg--\/YXBwaWQ9aGlnaGxhbmRlcjt3PTY0MDtoPTQ1Ng--\/https:\/\/s.yimg.com\/os\/creatr-uploaded-images\/2024-06\/99fd5420-275e-11ef-b769-0adc783842cf\",\n \"date\": \"08\/02\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 91,\n \"title\": \"Apple lays off about 100 services employees across Apple Books, News\",\n \"source\": {\n \"name\": \"AppleInsider\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/ebDrbQJlmlbWRl1n42d3GkGpbRxOgKsH56CZw6ewxtjMY8svmE6ikcnAPR6n_lVYEOkPB61O\",\n \"authors\": [\n \"Wesley Hilliard\"\n ]\n },\n \"link\": \"https:\/\/appleinsider.com\/articles\/24\/08\/28\/apple-lays-off-about-100-services-jobs-across-apple-books-news\",\n \"thumbnail\": \"https:\/\/photos5.appleinsider.com\/gallery\/60837-125270-Apple-Books-xl.jpg\",\n \"date\": \"08\/28\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 92,\n \"title\": \"US v. Apple: everything you need to know\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Victoria Song\"\n ]\n },\n \"link\": \"https:\/\/www.theverge.com\/24107581\/doj-v-apple-antitrust-monoply-news-updates\",\n \"thumbnail\": \"https:\/\/i.ytimg.com\/vi\/MI1TlBfPjQs\/maxresdefault.jpg\",\n \"date\": \"08\/01\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 93,\n \"title\": \"Apple Loop: iPhone 16 Pro Software Revealed, Tim Cook\u2019s AI Worries, Apple Blocks PC Emulation\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/06\/14\/apple-news-headlines-wwdc-iphone-16-pro-ios-18-apple-intelligence-ai\/\",\n \"thumbnail\": \"https:\/\/imageio.forbes.com\/specials-images\/imageserve\/666cdc3b3e6b870795caf100\/US-IT-COMPUTERS-TELECOMMUNICATION-APPLE\/960x0.jpg?height=472&width=711&fit=bounds\",\n \"date\": \"06\/14\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 94,\n \"title\": \"Apple iPhone sales plunge, as shares rise on dividend, stock buyback news\",\n \"source\": {\n \"name\": \"Al Jazeera English\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/l-Ps9rkWuApN8G3MB5uZC_a5G7iKCTITjMdpZFhm2rQf3U2M2Yr_KTYpzpmOPxDiUKgb9yN9ha8\"\n },\n \"link\": \"https:\/\/www.aljazeera.com\/economy\/2024\/5\/3\/apple-iphone-sales-plunge-as-shares-rise-on-dividend-stock-buyback-news\",\n \"thumbnail\": \"https:\/\/www.aljazeera.com\/wp-content\/uploads\/2024\/05\/AP24116703740413-1714696029_6af239-1714700322.jpg?resize=1200%2C630&quality=80\",\n \"date\": \"05\/03\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 95,\n \"title\": \"Apple WWDC 2024 Live Blog: All the News as It Happens\",\n \"source\": {\n \"name\": \"WIRED\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/glGHGpbYzksKAWY0zPxk7YYJrqE5FF5dALI27SaNZaeqEoUhgEUH4vo_DX00DRdkEjcVJCQkmNA\"\n },\n \"link\": \"https:\/\/www.wired.com\/live\/apple-wwdc-2024-live-blog\/\",\n \"thumbnail\": \"https:\/\/media.wired.com\/photos\/66638183805d7fd0338ae567\/master\/w_1280%2Cc_limit\/WWDC-Live-Blog-Gear-GettyImages-1258464919.jpg\",\n \"date\": \"06\/10\/2024, 10:01 AM, +0000 UTC\"\n },\n {\n \"position\": 96,\n \"title\": \"How to Turn Off Annoying Apple TV Sports Notifications\",\n \"source\": {\n \"name\": \"PCMag\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/ayu6HNJcgzsC2c6JZnG6pEUI7oJ_DbiHoRxecNd8OUpY7r9r8hY4ZIDk2y765p5W50H_J8jkooM\",\n \"authors\": [\n \"Tyler L Hayes\"\n ]\n },\n \"link\": \"https:\/\/www.pcmag.com\/how-to\/how-to-turn-off-annoying-apple-tv-sports-notifications\",\n \"thumbnail\": \"https:\/\/i.pcmag.com\/imagery\/articles\/00f32HhpjRdizD1JHL1iHkJ-2..v1724174129.png\",\n \"date\": \"09\/03\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 97,\n \"title\": \"Five changes to expect with Apple\u2019s new M4 Macs next month\",\n \"source\": {\n \"name\": \"9to5Mac\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/_yU7TVFBBY59lFTGF_gB-G6AZql5gRMNflxhEDwVjLtWfN6Xh6JPnPNqKAJO75h_BLghOkzYPw\",\n \"authors\": [\n \"Michael Burkhardt\"\n ]\n },\n \"link\": \"https:\/\/9to5mac.com\/m4-mac-upgrades\/\",\n \"thumbnail\": \"https:\/\/9to5mac.com\/wp-content\/uploads\/sites\/6\/2024\/08\/m4-macs-when.jpg?quality=82&strip=all&w=1600\",\n \"date\": \"09\/22\/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 98,\n \"title\": \"Apple Glowtime as it happened \u2013 iPhone 16, Apple Watch Series 10, an AirPods 4 ANC surprise, plus AI news and more\",\n \"source\": {\n \"name\": \"TechRadar\",\n \"icon\": \"https:\/\/lh3.googleusercontent.com\/h3jba9VMZkFHG1QVakElUh94ugAfWEJfnBwg-v1YYuGEsB7Xo0Na9-1HSp2RTIvArgKT-D_A5g\",\n \"authors\": [\n \"Philip Berne\"\n ]\n },\n \"link\": \"https:\/\/www.techradar.com\/news\/live\/apple-glowtime-iphone-16-launch-live-blog\",\n \"thumbnail\": \"https:\/\/cdn.mos.cms.futurecdn.net\/CJpUvbRSG5TzEPybPZqM4i-1200-80.jpg\",\n \"date\": \"09\/09\/2024, 07:00 AM, +0000 UTC\"\n }\n ],\n \"menu_links\": [\n {\n \"title\": \"U.S.\",\n \"topic_token\": \"CAAqIggKIhxDQkFTRHdvSkwyMHZNRGxqTjNjd0VnSmxiaWdBUAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqIggKIhxDQkFTRHdvSkwyMHZNRGxqTjNjd0VnSmxiaWdBUAE\"\n },\n {\n \"title\": \"World\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx1YlY4U0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx1YlY4U0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Your local news\",\n \"topic_token\": \"CAAqHAgKIhZDQklTQ2pvSWJHOWpZV3hmZGpJb0FBUAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqHAgKIhZDQklTQ2pvSWJHOWpZV3hmZGpJb0FBUAE\"\n },\n {\n \"title\": \"Business\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Technology\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Entertainment\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNREpxYW5RU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNREpxYW5RU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Sports\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp1ZEdvU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp1ZEdvU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Science\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp0Y1RjU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp0Y1RjU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Health\",\n \"topic_token\": \"CAAqIQgKIhtDQkFTRGdvSUwyMHZNR3QwTlRFU0FtVnVLQUFQAQ\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?engine=google_news&topic_token=CAAqIQgKIhtDQkFTRGdvSUwyMHZNR3QwTlRFU0FtVnVLQUFQAQ\"\n }\n ]\n}" -} \ No newline at end of file + "statusCode": 200, + "headers": { + "Date": "Sat, 26 Oct 2024 00:23:35 GMT", + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "69069", + "Connection": "keep-alive", + "x-frame-options": "SAMEORIGIN" + }, + "data": "{\n \"search_metadata\": {\n \"id\": \"671c3683bcd65201e4953d80\",\n \"status\": \"Success\",\n \"json_endpoint\": \"https://serpapi.com/searches/c2b683fdf6694524/671c3683bcd65201e4953d80.json\",\n \"created_at\": \"2024-10-26 00:23:31 UTC\",\n \"processed_at\": \"2024-10-26 00:23:31 UTC\",\n \"google_news_url\": \"https://news.google.com/search?q=Apple+current+headlines\",\n \"raw_html_file\": \"https://serpapi.com/searches/c2b683fdf6694524/671c3683bcd65201e4953d80.html\",\n \"total_time_taken\": 3.18\n },\n \"search_parameters\": {\n \"engine\": \"google_news\",\n \"q\": \"Apple current headlines\"\n },\n \"news_results\": [\n {\n \"position\": 1,\n \"title\": \"Is Apple Stock A Buy Before September-Quarter Earnings?\",\n \"source\": {\n \"name\": \"Investor's Business Daily\",\n \"icon\": \"https://lh3.googleusercontent.com/-m-56Z1d9ObiT3mixbg-CNUkjN8m9UWzzzJ6mm8jJULcnWYyxz5IBCYuZ5cQXy6MQceme7nYRQ\"\n },\n \"link\": \"https://www.investors.com/news/technology/apple-stock-buy-now-aapl-stock/\",\n \"thumbnail\": \"https://www.investors.com/wp-content/uploads/2018/06/stock-apple-35-ahutter-640x360.jpg\",\n \"date\": \"10/21/2024, 11:35 AM, +0000 UTC\"\n },\n {\n \"position\": 2,\n \"title\": \"Apple Inc. (AAPL) Stock Price, News, Quote & History\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https://lh3.googleusercontent.com/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\"\n },\n \"link\": \"https://finance.yahoo.com/quote/AAPL/\",\n \"date\": \"10/11/2024, 11:13 PM, +0000 UTC\"\n },\n {\n \"position\": 3,\n \"title\": \"Apple Loop: iPhone 17 Pro Leaks, Surprise iPad Mini Launch, New MacBook Pro Specs\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/ewanspence/2024/10/18/apple-news-headliens-iphone-17-pro-ipad-mini-macbook-pro-macos-ai-iphone-se/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/6712dac49e11953e8e4df3bf/Apple-Begins-Selling-New-iPhone-16-At-Stores-Across-The-Country/960x0.jpg?height=473&width=711&fit=bounds\",\n \"date\": \"10/18/2024, 10:57 PM, +0000 UTC\"\n },\n {\n \"position\": 4,\n \"title\": \"Apple set to unveil iPhone 16 on Monday. Here's what to expect.\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https://lh3.googleusercontent.com/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Megan Cerullo\"\n ]\n },\n \"link\": \"https://www.cbsnews.com/news/apple-iphone-16-what-to-expect/\",\n \"thumbnail\": \"https://assets3.cbsnewsstatic.com/hub/i/r/2024/09/06/54addc5f-0728-44c0-a6ed-82f9c280b1c2/thumbnail/1200x630/7a24cbc0c2d97648057037008029eb18/gettyimages-2156548093.jpg?v=b241b87adbbb7f0a227ed35b96d0cefa\",\n \"date\": \"09/09/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 5,\n \"title\": \"Apple embraces the AI craze with its newly unleashed iPhone 16 lineup\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\"\n ]\n },\n \"link\": \"https://apnews.com/article/apple-iphone-16-artificial-intelligence-google-samsung-4f30bf40ad89793d80f8ac3a20f9e79c\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/2d71fbe/2147483647/strip/true/crop/5472x3648+0+0/resize/599x399!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2Ffc%2F6e%2Fc692a752e1669335caca2261fe74%2F6e07d6ee606d4711b4abe9e152e3a309\",\n \"date\": \"09/09/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 6,\n \"title\": \"Apple picking at Mass. farm ends with racial profiling, scuffle, family says\",\n \"source\": {\n \"name\": \"NBC Boston\",\n \"icon\": \"https://encrypted-tbn0.gstatic.com/faviconV2?url=https://www.nbcboston.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Asher Klein\",\n \"Malcolm Johnson\"\n ]\n },\n \"link\": \"https://www.nbcboston.com/news/local/danvers-apple-picking-racial-profiling-claim/3520353/\",\n \"thumbnail\": \"https://media.nbcboston.com/2024/10/connors-farm-racial-profiling-accusation.png?resize=1200%2C675&quality=85&strip=all\",\n \"date\": \"10/15/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 7,\n \"title\": \"As clicks dry up for news sites, could Apple\u2019s news app be a lifeline?\",\n \"source\": {\n \"name\": \"Semafor\",\n \"icon\": \"https://lh3.googleusercontent.com/AbSzSdrdQUkZJn_qrAwfEK1kmdBsfgLZLMoABj-SujOJMwaEez-tWO1eccFXrV-SmdFQsqT6aA\",\n \"authors\": [\n \"Maxwell Tani\"\n ]\n },\n \"link\": \"https://www.semafor.com/article/05/19/2024/as-clicks-dry-up-for-news-sites-could-apples-news-app-be-a-lifeline\",\n \"thumbnail\": \"https://img.semafor.com/c2462871f6cdaa0cc014ab883b662fc895228f28-1280x961.png?w=1920&q=75&auto=format\",\n \"date\": \"05/19/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 8,\n \"title\": \"NYC buses tout Big Flavor in The Big Apple\",\n \"source\": {\n \"name\": \"The Produce News\",\n \"icon\": \"https://lh3.googleusercontent.com/wuub-wDJCPPgnapHs_ugjjQqBJndZvj7tMby7GC68PvPfNHvKM8WzvOfU9H6X9NYAXEBG_L4\"\n },\n \"link\": \"https://theproducenews.com/headlines/nyc-buses-tout-big-flavor-big-apple\",\n \"thumbnail\": \"https://theproducenews.com/sites/default/files/2024-10/big_0.jpg\",\n \"date\": \"10/03/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 9,\n \"title\": \"The Apple of One Business Reporter\u2019s Eye\",\n \"source\": {\n \"name\": \"The New York Times\",\n \"icon\": \"https://lh3.googleusercontent.com/tDFSwtr61ZReDD_jw6kEPWegHMSqGEHx-ZS_t-e10We-GfWEPVYkn0uLk_Vn8XQHg8wcnhMWmug\",\n \"authors\": [\n \"Josh Ocampo\"\n ]\n },\n \"link\": \"https://www.nytimes.com/2024/07/31/insider/apple-beat.html\",\n \"thumbnail\": \"https://static01.nyt.com/images/2024/08/01/pageoneplus/01a2_insider-Mickle-02/01a2_insider-Mickle-02-articleLarge.jpg?quality=75&auto=webp&disable=upscale\",\n \"date\": \"07/31/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 10,\n \"title\": \"The Athletic joins Apple News+\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.apple.com/newsroom/2023/12/the-athletic-joins-apple-news-plus/\",\n \"thumbnail\": \"https://www.apple.com/newsroom/images/2023/12/the-athletic-joins-apple-news-plus/article/Apple-News-Plus-The-Athletic_inline.jpg.large.jpg\",\n \"date\": \"12/19/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 11,\n \"title\": \"Live updates: Apple event; iPhone 16 debuts, designed for AI\",\n \"source\": {\n \"name\": \"CNN\",\n \"icon\": \"https://lh3.googleusercontent.com/8zdvTbISHUn-4iHkauW-_yQSGPD9BMrx9EWfqTIhiVm2YMYqhHC1HJWNDQoSOkMk0MRPYKxjIg\",\n \"authors\": [\n \"Samantha Delouya\",\n \"Elise Hammond\",\n \"Samantha Murphy Kelly\"\n ]\n },\n \"link\": \"https://www.cnn.com/business/live-news/apple-event-iphone-16-09-09-24/index.html\",\n \"thumbnail\": \"https://media.cnn.com/api/v1/images/stellar/prod/iphone16editv2-00-00-09-03-still001.jpg?c=16x9&q=w_1280,c_fill\",\n \"date\": \"09/09/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 12,\n \"title\": \"Apple Event: everything you need to know about the Glowtime launch and what could be next\",\n \"source\": {\n \"name\": \"TechRadar\",\n \"icon\": \"https://lh3.googleusercontent.com/h3jba9VMZkFHG1QVakElUh94ugAfWEJfnBwg-v1YYuGEsB7Xo0Na9-1HSp2RTIvArgKT-D_A5g\",\n \"authors\": [\n \"Jacob Krol\",\n \"Roland Moore-Colyer\"\n ]\n },\n \"link\": \"https://www.techradar.com/news/new-apple-event\",\n \"thumbnail\": \"https://cdn.mos.cms.futurecdn.net/WAPRYR7qjs7ppvRFvW6CVQ-320-80.jpg\",\n \"date\": \"10/07/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 13,\n \"title\": \"Apple News adds a new original game to boost News+ subscriptions\",\n \"source\": {\n \"name\": \"Nieman Journalism Lab at Harvard\",\n \"icon\": \"https://encrypted-tbn1.gstatic.com/faviconV2?url=https://www.niemanlab.org&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Sarah Scire\"\n ]\n },\n \"link\": \"https://www.niemanlab.org/2024/05/apple-news-adds-a-new-original-game-to-boost-news-subscriptions/\",\n \"thumbnail\": \"https://www.niemanlab.org/images/Screenshot-2024-05-14-at-1.55.30%E2%80%AFPM-700x397.png\",\n \"date\": \"05/14/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 14,\n \"title\": \"Get the all-new iPhone 16 Pro on us, when you trade in any phone. In any condition. Guaranteed.\",\n \"source\": {\n \"name\": \"Verizon\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.verizon.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.verizon.com/about/news/apple-iphone-16-pro-verizon-deals\",\n \"thumbnail\": \"https://www.verizon.com/about/sites/default/files/styles/hero_tablet/public/2024-09/Apple-16-Pro-1230x690.jpg\",\n \"date\": \"09/09/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 15,\n \"title\": \"Apple's artificial intelligence features to be delayed, Bloomberg News reports\",\n \"source\": {\n \"name\": \"Reuters\",\n \"icon\": \"https://lh3.googleusercontent.com/OzNZmYwP-Zl3sTWa8dzzyws9hou0ZihOGJ_-qanon-1iB5KwyqcHOwPxYZj54cGMZwD5qXui\"\n },\n \"link\": \"https://www.reuters.com/technology/apples-artificial-intelligence-features-be-delayed-bloomberg-news-reports-2024-07-28/\",\n \"thumbnail\": \"https://cloudfront-us-east-2.images.arcpublishing.com/reuters/QH6Z7UBVIFPPDD2PADPC4E4U4E.jpg\",\n \"date\": \"07/28/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 16,\n \"title\": \"Apple Loop: Apple Confirms iPhone 16 Details, Ted Lasso\u2019s Surprise Return, Final iPhone Design Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/ewanspence/2024/09/01/apple-news-headlines-iphone-16-pro-launch-date-glow-time-ipad-mini-macbook-m4-ted-lasso/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/6133b1d73f00df9fdccf31db/Apple-Holds-Press-Event-To-Introduce-New-iPhone/960x0.jpg?height=474&width=711&fit=bounds\",\n \"date\": \"09/01/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 17,\n \"title\": \"Apple's new iPhone 16 unveiled at \\\"Glowtime\\\" event\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https://lh3.googleusercontent.com/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Megan Cerullo\"\n ]\n },\n \"link\": \"https://www.cbsnews.com/news/apple-iphone-16-event-its-glowtime/\",\n \"thumbnail\": \"https://assets2.cbsnewsstatic.com/hub/i/r/2024/09/09/128cd6e9-3b69-4b35-92b7-5d129fd16427/thumbnail/1200x630/487b1ef616f9f1845fc8c287c08d588b/apple-iphone-16-pro-finish-lineup-240909.jpg?v=c72f52c71e431fd7dde1ba5ae2f69280\",\n \"date\": \"09/23/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 18,\n \"title\": \"Apple unveils the new 13- and 15-inch MacBook Air with the powerful M3 chip\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.apple.com/newsroom/2024/03/apple-unveils-the-new-13-and-15-inch-macbook-air-with-the-powerful-m3-chip/\",\n \"thumbnail\": \"https://www.apple.com/newsroom/images/2024/03/apple-unveils-the-new-13-and-15-inch-macbook-air-with-the-powerful-m3-chip/article/Apple-MacBook-Air-2-up-hero-240304_big.jpg.large.jpg\",\n \"date\": \"03/04/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 19,\n \"title\": \"Apple Loop: iPhone 16 Pro Design Leaks, Goodbye Apple ID, Confusion Over iPhone 16 Launch Date\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/ewanspence/2024/08/25/apple-news-headlines-iphone-16-pro-launch-date-iphone-16-specs-ios18-apple-id/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/66c8e269af3f2a30f86abb0c/Street-Style---Dusseldorf---October-2023/0x0.jpg?crop=1557,876,x0,y402,safe&height=400&width=711&fit=bounds\",\n \"date\": \"08/25/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 20,\n \"title\": \"Apple Loop: iPhone 16 Pro Expectations, iPhone Air Details, Apple Watch SE Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/ewanspence/2024/08/16/apple-news-headlines-iphone-16-pro-iphone-air-epic-app-store/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/6622e32e24ecc74de9e50e06/Apple-Unveils-iPhone-15-And-Other-New-Products/960x0.jpg?height=473&width=711&fit=bounds\",\n \"date\": \"08/16/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 21,\n \"title\": \"Apple 'Glowtime' event sees iPhone 16, iPhone 16 Pro, Apple Watch unveilings: Recap\",\n \"source\": {\n \"name\": \"USA TODAY\",\n \"icon\": \"https://lh3.googleusercontent.com/-azIrtjYWp_uW0mZr2EgCuDyyZ9WpFOIWNx3qM1wwCzV37NgmqATpNZGn9R0y8XklFku6Hhwz6w\",\n \"authors\": [\n \"James C. Powel\",\n \"Jonathan Limehouse\",\n \"Felecia Wellington Radel\"\n ]\n },\n \"link\": \"https://www.usatoday.com/story/tech/news/2024/09/09/apple-event-2024-live-updates-iphone-watch-airpod/75104890007/\",\n \"thumbnail\": \"https://www.usatoday.com/gcdn/authoring/authoring-images/2024/09/04/USAT/75072775007-apple-glowtime-event.png?crop=1004,564,x14,y0&width=660&height=371&format=pjpg&auto=webp\",\n \"date\": \"09/09/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 22,\n \"title\": \"Apple Loop: iPhone 16 Pro Release Date, Apple Intelligence Delay, iPhone Air Leaks\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/ewanspence/2024/08/09/apple-news-headlines-iphone-16-pro-release-date-iphone-air-macbook-pro-m4/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/66b66f2ee8af9409d28bb6db/Apple-iPhone-15-And-Apple-Watch-Series-9-Launches-In-Australia/960x0.jpg?height=474&width=711&fit=bounds\",\n \"date\": \"08/10/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 23,\n \"title\": \"Where is Apple headed after latest product event? Experts weigh in.\",\n \"source\": {\n \"name\": \"ABC News\",\n \"icon\": \"https://lh3.googleusercontent.com/X8gOYJVMpwt5Rdxa-TEs1Av4_oZNCCtQN-1abkvvfNdvy3JvVhT1mERLPhFXBI6xsCV4K_lQpJI\",\n \"authors\": [\n \"Max Zahn\"\n ]\n },\n \"link\": \"https://abcnews.go.com/Business/apple-headed-after-latest-product-event-experts-weigh/story?id=109987688\",\n \"thumbnail\": \"https://s.abcnews.com/images/Business/apple-1-gty-er-240507_1715102279684_hpMain_16x9_1600.jpg\",\n \"date\": \"05/07/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 24,\n \"title\": \"Apple stock might soar thanks to old iPhones\",\n \"source\": {\n \"name\": \"Fortune\",\n \"icon\": \"https://lh3.googleusercontent.com/tFLb6M9by7fEPdctsE-5e-YDl6ecYOdDGEYTTC5krR3yydg4uRHaSorz2f0hHNyMWSHq20XBMw\",\n \"authors\": [\n \"William Daniel\"\n ]\n },\n \"link\": \"https://fortune.com/2024/07/12/most-iphone-users-have-old-phones-good-news-for-apple-stock/\",\n \"thumbnail\": \"https://fortune.com/img-assets/wp-content/uploads/2024/07/GettyImages-2157035756-e1720805976209.jpg?w=1440&q=75\",\n \"date\": \"07/12/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 25,\n \"title\": \"The latest news, headlines, and business stories for January 9\",\n \"source\": {\n \"name\": \"Business Insider\",\n \"icon\": \"https://lh3.googleusercontent.com/MD0yHuvt1mX8YyHUcdTCsQqMKGubFCwbWmpxzkT1xnE5wZ4aDRmb2zvkgfgG_b0mHNhaSxqO2A\",\n \"authors\": [\n \"Dan DeFrancesco\"\n ]\n },\n \"link\": \"https://www.businessinsider.com/news-today-january-9-apple-vision-pro-2024-1\",\n \"thumbnail\": \"https://i.insider.com/659d7ba3dcdb354a9855ef06?width=1136&format=jpeg\",\n \"date\": \"01/09/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 26,\n \"title\": \"Apple iPhone sales plunge, as shares rise on dividend, stock buyback news\",\n \"source\": {\n \"name\": \"Al Jazeera English\",\n \"icon\": \"https://lh3.googleusercontent.com/l-Ps9rkWuApN8G3MB5uZC_a5G7iKCTITjMdpZFhm2rQf3U2M2Yr_KTYpzpmOPxDiUKgb9yN9ha8\"\n },\n \"link\": \"https://www.aljazeera.com/economy/2024/5/3/apple-iphone-sales-plunge-as-shares-rise-on-dividend-stock-buyback-news\",\n \"thumbnail\": \"https://www.aljazeera.com/wp-content/uploads/2024/05/AP24116703740413-1714696029.jpg?resize=770%2C513&quality=80\",\n \"date\": \"05/03/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 27,\n \"title\": \"Apple leaps into AI with an array of upcoming iPhone features and a ChatGPT deal to smarten up\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\"\n ]\n },\n \"link\": \"https://apnews.com/article/apple-artificial-intelligence-siri-iphone-software-conference-4217d67977f95ead880835a71ecce098\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/62f02a8/2147483647/strip/true/crop/5074x3383+0+0/resize/599x399!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2Fd3%2Fa2%2F94c981c15091dd9b14acc4c09dbd%2Fa8e81e844947478d9bee864d6b8d9ff5\",\n \"date\": \"06/10/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 28,\n \"title\": \"Apple introduces AI to its products at WWDC\",\n \"source\": {\n \"name\": \"CNN\",\n \"icon\": \"https://lh3.googleusercontent.com/8zdvTbISHUn-4iHkauW-_yQSGPD9BMrx9EWfqTIhiVm2YMYqhHC1HJWNDQoSOkMk0MRPYKxjIg\",\n \"authors\": [\n \"Brian Fung\",\n \"Michael Ballaban\",\n \"Aditi Sangal\"\n ]\n },\n \"link\": \"https://www.cnn.com/business/live-news/apple-wwdc-keynote-06-10-24/index.html\",\n \"thumbnail\": \"https://media.cnn.com/api/v1/images/stellar/prod/240305171738-exp-apple-iphone-china-duffy-live-030503pseg2-cnni-business-00003501.png?c=16x9&q=w_1280,c_fill\",\n \"date\": \"06/10/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 29,\n \"title\": \"US v. Apple: everything you need to know\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https://lh3.googleusercontent.com/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\"\n },\n \"link\": \"https://www.theverge.com/24107581/doj-v-apple-antitrust-monoply-news-updates\",\n \"thumbnail\": \"https://i.ytimg.com/vi/MI1TlBfPjQs/maxresdefault.jpg\",\n \"date\": \"08/01/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 30,\n \"title\": \"How Microsoft and Nvidia bet correctly to leapfrog Apple\",\n \"source\": {\n \"name\": \"BBC.com\",\n \"icon\": \"https://lh3.googleusercontent.com/_XS8V0jvDj-pe4NDxsc_8_YEk38hNH30ocGDk7oEwtRZNw-kUUuQouAYLFO0uIPFLX05QCKyoSo\",\n \"authors\": [\n \"Zoe Kleinman\"\n ]\n },\n \"link\": \"https://www.bbc.com/news/articles/c4nglq80w7eo\",\n \"thumbnail\": \"https://ichef.bbci.co.uk/news/1024/branded_news/4074/live/45927c90-3789-11ef-9bca-0db727f63d54.jpg\",\n \"date\": \"07/02/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 31,\n \"title\": \"Apple\u2019s RCS Update Confirms Critical Missing Features On Launch\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Zak Doffman\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/zakdoffman/2024/09/19/apples-ios-18-update-new-warning-for-millions-of-iphone-15-iphone-16-users/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/65744e9437fe0bbac67751bf/Pictured--iMessage-menu-screenshot/0x0.jpg?format=jpg&crop=2007,1116,x366,y602,safe&width=960\",\n \"date\": \"09/19/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 32,\n \"title\": \"Warren Buffett surprises by slashing Berkshire Hathaway's longtime Apple stake in second quarter\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Josh Funk\"\n ]\n },\n \"link\": \"https://apnews.com/article/warren-buffett-berkshire-hathaway-profit-earnings-7af22b7ad654ba012d8e8803ed694aea\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/1d5c533/2147483647/strip/true/crop/7722x5227+0+0/resize/599x405!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F75%2F8b%2Fa4bac8e23f215d62877fcf4e7775%2F565ec4c244934dc8b65d20253d8dfbf2\",\n \"date\": \"08/03/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 33,\n \"title\": \"Is Apple Stock A Buy Or Sell In Early August 2024?\",\n \"source\": {\n \"name\": \"Investor's Business Daily\",\n \"icon\": \"https://lh3.googleusercontent.com/-m-56Z1d9ObiT3mixbg-CNUkjN8m9UWzzzJ6mm8jJULcnWYyxz5IBCYuZ5cQXy6MQceme7nYRQ\"\n },\n \"link\": \"https://www.investors.com/research/apple-stock-buy-now/\",\n \"thumbnail\": \"https://www.investors.com/wp-content/uploads/2018/06/stock-apple-35-ahutter-640x360.jpg\",\n \"date\": \"08/05/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 34,\n \"title\": \"Apple iPhone 16 Pro: New Design Echoed In Latest Leak\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"David Phelan\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/davidphelan/2024/08/24/apple-iphone-16-pro-new-design-echoed-in-latest-leak/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/666440c4ace3cc022c2833b6/UK-Daily-Life-2024/960x0.jpg?height=472&width=711&fit=bounds\",\n \"date\": \"08/24/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 35,\n \"title\": \"Apple\u2019s first quarter has felt more like an entire (bad) year\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https://lh3.googleusercontent.com/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Daniel Howley\"\n ]\n },\n \"link\": \"https://finance.yahoo.com/news/apples-first-quarter-has-felt-more-like-an-entire-bad-year-201715880.html\",\n \"date\": \"03/31/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 36,\n \"title\": \"News updates from July 2: Biden to meet with Democratic governors; Apple to join OpenAI\u2019s board in observer role\",\n \"source\": {\n \"name\": \"Financial Times\",\n \"icon\": \"https://lh3.googleusercontent.com/281oPpXmEcGU9cV4N2LudyLEG2aBqbqG2iDoMoXUXKl-SWD4AUdO5652KVTGNmcduSWZB_7j\"\n },\n \"link\": \"https://www.ft.com/content/17cc7092-f653-4a74-b69e-b8d9a7d4c8bf\",\n \"thumbnail\": \"https://www.ft.com/__origami/service/image/v2/images/raw/https%3A%2F%2Fwww.ft.com%2F__origami%2Fservice%2Fimage%2Fv2%2Fimages%2Fraw%2Fhttps%253A%252F%252Fd1e00ek4ebabms.cloudfront.net%252Fproduction%252F6b591a33-a50e-4b56-becb-73c91efa51f3.jpg%3Fsource%3Dnext-article%26fit%3Dscale-down%26quality%3Dhighest%26width%3D700%26dpr%3D1?source=next&fit=scale-down&dpr=2&width=240\",\n \"date\": \"07/02/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 37,\n \"title\": \"US sues Apple in antitrust lawsuit: Live updates\",\n \"source\": {\n \"name\": \"CNN\",\n \"icon\": \"https://lh3.googleusercontent.com/8zdvTbISHUn-4iHkauW-_yQSGPD9BMrx9EWfqTIhiVm2YMYqhHC1HJWNDQoSOkMk0MRPYKxjIg\",\n \"authors\": [\n \"Matt Meyer\",\n \"Brian Fung\",\n \"Antoinette Radford\"\n ]\n },\n \"link\": \"https://www.cnn.com/business/live-news/doj-apple-antitrust-lawsuit-03-21-24/index.html\",\n \"thumbnail\": \"https://media.cnn.com/api/v1/images/stellar/prod/240321113841-garland-vpx.jpg?c=16x9&q=w_1280,c_fill\",\n \"date\": \"03/21/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 38,\n \"title\": \"Apple lawsuit: US accuses tech giant of monopolising smartphone market\",\n \"source\": {\n \"name\": \"BBC.com\",\n \"icon\": \"https://lh3.googleusercontent.com/_XS8V0jvDj-pe4NDxsc_8_YEk38hNH30ocGDk7oEwtRZNw-kUUuQouAYLFO0uIPFLX05QCKyoSo\",\n \"authors\": [\n \"Natalie Sherman\",\n \"Bernd Debusmann Jr.\",\n \"Bernd Debusmann\"\n ]\n },\n \"link\": \"https://www.bbc.com/news/world-us-canada-68628989\",\n \"date\": \"03/21/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 39,\n \"title\": \"Justice Department sues Apple, alleging it illegally monopolized the smartphone market\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\",\n \"Lindsay Whitehurst\",\n \"Mike Balsamo\"\n ]\n },\n \"link\": \"https://apnews.com/article/apple-antitrust-monopoly-app-store-justice-department-822d7e8f5cf53a2636795fcc33ee1fc3\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/bf96ead/2147483647/strip/true/crop/7165x4777+0+0/resize/599x399!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F56%2F53%2F579ce3eb65fa4639868218939002%2Fb596a087b8d2400d8150280062fa5341\",\n \"date\": \"03/21/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 40,\n \"title\": \"Apple iPad event: all the news from Apple\u2019s \u201cLet Loose\u201d reveal\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https://lh3.googleusercontent.com/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Wes Davis\"\n ]\n },\n \"link\": \"https://www.theverge.com/2024/5/7/24150047/apple-ipad-let-loose-event-news-announcements\",\n \"thumbnail\": \"https://i.ytimg.com/vi/bMdhx5ijGN8/maxresdefault.jpg\",\n \"date\": \"05/14/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 41,\n \"title\": \"Stock market today: S&P 500, Nasdaq notch fresh records with Apple as CPI, Fed decision loom\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https://lh3.googleusercontent.com/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Karen Friar\"\n ]\n },\n \"link\": \"https://finance.yahoo.com/news/live/stock-market-today-sp-500-nasdaq-notch-fresh-records-with-apple-as-cpi-fed-decision-loom-200037315.html\",\n \"date\": \"06/11/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 42,\n \"title\": \"Stock Market News, May 2, 2024: Nasdaq Closes Higher; Apple Delivers Latest Earnings\",\n \"source\": {\n \"name\": \"The Wall Street Journal\",\n \"icon\": \"https://lh3.googleusercontent.com/-Wo0rkJtT8uQ7BFow-YiRKzVlJNka-TbZM6_e2l3XQwNNqfPe1mR8Rc4_o_qAOJFb32YwQ4I1NM\",\n \"authors\": [\n \"George Stahl\",\n \"David Marino\",\n \"Caitlin McCabe\"\n ]\n },\n \"link\": \"https://www.wsj.com/livecoverage/stock-market-today-earnings-05-02-2024\",\n \"date\": \"05/02/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 43,\n \"title\": \"\u2018It\u2019s Glowtime\u2019: all the news from Apple\u2019s iPhone 16 event\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https://lh3.googleusercontent.com/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Alex Cranz\"\n ]\n },\n \"link\": \"https://www.theverge.com/2024/9/9/24237601/apple-iphone-16-event-announcements-products\",\n \"thumbnail\": \"https://i.ytimg.com/vi/dIJVwG4Glg8/maxresdefault.jpg\",\n \"date\": \"09/14/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 44,\n \"title\": \"Apple\u2019s iOS 18 brings major updates to CarPlay\",\n \"source\": {\n \"name\": \"CBT Automotive News\",\n \"icon\": \"https://lh3.googleusercontent.com/jelVjSP3PH3qJkCne7S-0E6p712_wSb7OyJRCXBmAP0D1mE_mIsmvGeK7lFdLBa1HS7uLJwAXek\"\n },\n \"link\": \"https://www.cbtnews.com/apples-ios-18-brings-major-updates-to-carplay/\",\n \"thumbnail\": \"https://d9s1543upwp3n.cloudfront.net/wp-content/uploads/2021/11/carplay.jpeg.optimal-324x160.jpeg\",\n \"date\": \"09/18/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 45,\n \"title\": \"Apple sued in a landmark iPhone monopoly lawsuit\",\n \"source\": {\n \"name\": \"CNN\",\n \"icon\": \"https://lh3.googleusercontent.com/8zdvTbISHUn-4iHkauW-_yQSGPD9BMrx9EWfqTIhiVm2YMYqhHC1HJWNDQoSOkMk0MRPYKxjIg\",\n \"authors\": [\n \"Evan Perez\",\n \"Hannah Rabinowitz\",\n \"Brian Fung\"\n ]\n },\n \"link\": \"https://www.cnn.com/2024/03/21/tech/apple-sued-antitrust-doj/index.html\",\n \"thumbnail\": \"https://media.cnn.com/api/v1/images/stellar/prod/gettyimages-1886193962-20240321113604017.jpg?c=16x9&q=h_833,w_1480,c_fill\",\n \"date\": \"03/21/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 46,\n \"title\": \"Warren Buffett Declares Shift: Selling Apple Stock To Invest In This 'Magnificent' Megacap \u2013 Here's Why\",\n \"source\": {\n \"name\": \"Yahoo Finance\",\n \"icon\": \"https://lh3.googleusercontent.com/L57n4HUzUS8lNXBPYNGQScsyxaqqx42Nym3-tUk8NzkTvMsa95NhzEqC8KMqVPFpAFpCuPFdlA\",\n \"authors\": [\n \"Latoya Scott\"\n ]\n },\n \"link\": \"https://finance.yahoo.com/news/warren-buffett-declares-shift-selling-144519364.html\",\n \"date\": \"08/12/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 47,\n \"title\": \"Apple launches Journal app, a new app for reflecting on everyday moments\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.apple.com/newsroom/2023/12/apple-launches-journal-app-a-new-app-for-reflecting-on-everyday-moments/\",\n \"thumbnail\": \"https://www.apple.com/newsroom/images/2023/12/apple-launches-journal-app-for-reflecting-on-everyday-moments/article/Apple-Journal-app-2-up_big.jpg.large.jpg\",\n \"date\": \"12/11/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 48,\n \"title\": \"Assessing Apple\u2019s Potential Can AAPL Reach $250 Before Q3\",\n \"source\": {\n \"name\": \"FinancialNews.co.uk\",\n \"icon\": \"https://encrypted-tbn1.gstatic.com/faviconV2?url=https://www.financial-news.co.uk&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Sam Allcock\"\n ]\n },\n \"link\": \"https://www.financial-news.co.uk/assessing-apples-potential-can-aapl-reach-250-before-q3/\",\n \"thumbnail\": \"https://www.financial-news.co.uk/wp-content/uploads/2024/10/Assessing-Apple-s-Potential-Can-AAPL-Reach-250-Before-Q3.jpeg\",\n \"date\": \"10/22/2024, 04:25 PM, +0000 UTC\"\n },\n {\n \"position\": 49,\n \"title\": \"Stock Market News for Monday, May 6, 2024: Dow Edges Higher\",\n \"source\": {\n \"name\": \"Barron's\",\n \"icon\": \"https://lh3.googleusercontent.com/m-X2HbycVv69bHaPPRLUQqHewFp6sKnZimopA8xL-eSV3xctI-mCZIEJex6XBinCC54ucwYS\"\n },\n \"link\": \"https://www.barrons.com/livecoverage/stock-market-today-050624\",\n \"date\": \"05/06/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 50,\n \"title\": \"Weekly Student News Quiz: Israel-Hamas War, Medical Breakthrough, Apple\",\n \"source\": {\n \"name\": \"The New York Times\",\n \"icon\": \"https://lh3.googleusercontent.com/tDFSwtr61ZReDD_jw6kEPWegHMSqGEHx-ZS_t-e10We-GfWEPVYkn0uLk_Vn8XQHg8wcnhMWmug\"\n },\n \"link\": \"https://www.nytimes.com/interactive/2024/03/26/learning/26StudentNewsQuiz.html\",\n \"thumbnail\": \"https://static01.nyt.com/images/2024/03/25/multimedia/SecurityCouncilVoteLN-gmjk/SecurityCouncilVoteLN-gmjk-master315.jpg\",\n \"date\": \"03/26/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 51,\n \"title\": \"Grab Them. Then Stump Them.\",\n \"source\": {\n \"name\": \"The New York Times\",\n \"icon\": \"https://lh3.googleusercontent.com/tDFSwtr61ZReDD_jw6kEPWegHMSqGEHx-ZS_t-e10We-GfWEPVYkn0uLk_Vn8XQHg8wcnhMWmug\",\n \"authors\": [\n \"Mike Isaac\"\n ]\n },\n \"link\": \"https://www.nytimes.com/2024/06/11/technology/news-tech-sites-games.html\",\n \"thumbnail\": \"https://static01.nyt.com/images/2024/06/14/business/00tech-games-3x2/00tech-games-square640.jpg\",\n \"date\": \"06/17/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 52,\n \"title\": \"Spot The Difference: The Subtle Changes To Apple's Latest iPhone Line-Up\",\n \"source\": {\n \"name\": \"NDTV\",\n \"icon\": \"https://lh3.googleusercontent.com/tdxgqIuMCdYXjnxBEi-22G1al2_n0slQR4vppoxUyB3fupq2sPqxL3okZNKW_QWJrymCWx6k_g\",\n \"authors\": [\n \"Edward Ludlow\",\n \"Ed Ludlow\"\n ]\n },\n \"link\": \"https://www.ndtv.com/world-news/spot-the-difference-the-subtle-changes-to-apples-latest-iphone-line-up-6530805\",\n \"thumbnail\": \"https://c.ndtvimg.com/2024-09/lnc5g2i_apple-iphone_625x300_10_September_24.jpeg\",\n \"date\": \"09/10/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 53,\n \"title\": \"Apple ends yearlong sales slump with slight revenue rise in holiday-season period but stock slips\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\"\n ]\n },\n \"link\": \"https://apnews.com/article/apple-earnings-quarter-iphone-stock-6cd106723879cc1dea891d81e257fbc8\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/d377ab8/2147483647/strip/true/crop/3602x2401+0+0/resize/599x399!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F2e%2F7f%2F64dbb35fdf8ed25eea6349ab2be0%2Ff8264a2d29d840819909419d9e2eb5db\",\n \"date\": \"02/01/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 54,\n \"title\": \"Apple App Store Chief Phil Schiller Is the Latest Big Tech Exec to Join OpenAI\u2019s Board\",\n \"source\": {\n \"name\": \"Observer\",\n \"icon\": \"https://lh3.googleusercontent.com/3lX4VZI87uWsEdj-ihdfYCJfHJBA_IlXljPfu2_ey4mjaozSvFUGFgPuVLQdlZTXj6BC5xaH\",\n \"authors\": [\n \"Alexandra Tremayne-Pengelly\"\n ]\n },\n \"link\": \"https://observer.com/2024/07/apple-phil-schiller-nonvoting-board-seat-openai/\",\n \"thumbnail\": \"https://observer.com/wp-content/uploads/sites/2/2024/07/GettyImages-1173663853.jpg?quality=80&w=970\",\n \"date\": \"07/03/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 55,\n \"title\": \"Apple 'Glowtime' event latest news \u2014 iPhone 16, Apple Watch 10, AirPods 4 and more\",\n \"source\": {\n \"name\": \"Tom's Guide\",\n \"icon\": \"https://lh3.googleusercontent.com/YwroNBJq4UKY_6hH7n50b5Fnc3YEroWUN9CgsQG7p4WAvyJpTsXRG6taE0Te0iJafGqtei-zG_E\",\n \"authors\": [\n \"Mark Spoonauer\",\n \"Philip Michaels\"\n ]\n },\n \"link\": \"https://www.tomsguide.com/phones/live/apple-glowtime-event-iphone-16\",\n \"thumbnail\": \"https://cdn.mos.cms.futurecdn.net/s2znttdiicQPAfCNSmVwcZ-320-80.jpg\",\n \"date\": \"09/12/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 56,\n \"title\": \"Apple Explores A.I. Deals With News Publishers\",\n \"source\": {\n \"name\": \"The New York Times\",\n \"icon\": \"https://lh3.googleusercontent.com/tDFSwtr61ZReDD_jw6kEPWegHMSqGEHx-ZS_t-e10We-GfWEPVYkn0uLk_Vn8XQHg8wcnhMWmug\",\n \"authors\": [\n \"Benjamin Mullin\",\n \"Tripp Mickle\"\n ]\n },\n \"link\": \"https://www.nytimes.com/2023/12/22/technology/apple-ai-news-publishers.html\",\n \"thumbnail\": \"https://static01.nyt.com/images/2023/12/22/multimedia/22APPLEAI-fhwk/22APPLEAI-fhwk-articleLarge.jpg?quality=75&auto=webp&disable=upscale\",\n \"date\": \"12/22/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 57,\n \"title\": \"Nvidia value hits $3tn, overtaking Apple\",\n \"source\": {\n \"name\": \"BBC.com\",\n \"icon\": \"https://lh3.googleusercontent.com/_XS8V0jvDj-pe4NDxsc_8_YEk38hNH30ocGDk7oEwtRZNw-kUUuQouAYLFO0uIPFLX05QCKyoSo\",\n \"authors\": [\n \"Natalie Sherman\"\n ]\n },\n \"link\": \"https://www.bbc.com/news/articles/c6ppqd3j621o\",\n \"thumbnail\": \"https://ichef.bbci.co.uk/news/1024/branded_news/fea4/live/415e2650-2380-11ef-bac3-438326d5ea25.jpg\",\n \"date\": \"06/05/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 58,\n \"title\": \"Apple News Widget Disappeared After Updating to iOS 17.4.1\",\n \"source\": {\n \"name\": \"The Mac Observer\",\n \"icon\": \"https://encrypted-tbn3.gstatic.com/faviconV2?url=https://www.macobserver.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Danny Maiorca\"\n ]\n },\n \"link\": \"https://www.macobserver.com/iphone/apple-news-widget-disappeared-after-updating-to-ios-17-4-1/\",\n \"thumbnail\": \"https://www.macobserver.com/wp-content/uploads/2024/05/Apple-News-Widget-Disappeared-iOS-17.4.png\",\n \"date\": \"05/07/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 59,\n \"title\": \"Markets News, June 11, 2024: Apple Lifts Nasdaq, S&P 500 to Records; Dow Lags Ahead of CPI\",\n \"source\": {\n \"name\": \"Investopedia\",\n \"icon\": \"https://lh3.googleusercontent.com/0hYGbsOZWCCeqnb_p_iGTScksgVWK0ScH8qbaFrwqvUvwJFITE7jf-1HQZzWLuFOrEkDZuq8Aao\",\n \"authors\": [\n \"Nisha Gopalan\",\n \"Colin Laidley\"\n ]\n },\n \"link\": \"https://www.investopedia.com/dow-jones-today-06112024-8661364\",\n \"thumbnail\": \"https://www.investopedia.com/thmb/TNTsdR0xPn0lQae59esdG8FGZQw=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/MarketBlogImage-final-6ac06c7b9250446a8e86c566b11e02e1.png\",\n \"date\": \"06/11/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 60,\n \"title\": \"iPhone 16 rumors: Everything we know, including release date, price, and more\",\n \"source\": {\n \"name\": \"Mashable\",\n \"icon\": \"https://lh3.googleusercontent.com/1u9P_MGTTeuasCGJhx6XwmWvLYJtP4-kQkbl0bIODWnRD5gWTQo3lXYP-jXL1dah51KY2ysa\",\n \"authors\": [\n \"Kimberly Gedeon\"\n ]\n },\n \"link\": \"https://mashable.com/article/iphone-16-rumors\",\n \"thumbnail\": \"https://helios-i.mashable.com/imagery/articles/05vjuq9JPoajn7319Fp37Tr/hero-image.fill.size_1248x702.v1715830916.jpg\",\n \"date\": \"09/07/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 61,\n \"title\": \"Apple Loop: iPhone 16 Design Leaks, New M4 MacBook Pro, Apple\u2019s Open-Source AI\",\n \"source\": {\n \"name\": \"Forbes\",\n \"icon\": \"https://lh3.googleusercontent.com/NIjzR9QHtZJllEvJIVkODXFQ7_rbx1BMBXx2rNUbttjuu9YWLIp2_juQaI9jJ2rDtzi6snbZ\",\n \"authors\": [\n \"Ewan Spence\"\n ]\n },\n \"link\": \"https://www.forbes.com/sites/ewanspence/2024/06/23/apple-news-headlines-iphone-16-macbook-pro-m4-apple-intelligence-open-source/\",\n \"thumbnail\": \"https://imageio.forbes.com/specials-images/imageserve/667617064cc1648d107f6ac7/Apple-WWDC23-Photo-Illustrations/960x0.jpg?height=473&width=711&fit=bounds\",\n \"date\": \"06/23/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 62,\n \"title\": \"Apple latest to make AI safety pledge\",\n \"source\": {\n \"name\": \"Mobile World Live\",\n \"icon\": \"https://encrypted-tbn0.gstatic.com/faviconV2?url=https://www.mobileworldlive.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Hana Anandira\"\n ]\n },\n \"link\": \"https://www.mobileworldlive.com/apple/apple-latest-to-make-ai-safety-pledge/\",\n \"thumbnail\": \"https://assets.mobileworldlive.com/wp-content/uploads/2020/05/16120247/Apple-store-Chicago-US-Shutterstock_650.png\",\n \"date\": \"07/26/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 63,\n \"title\": \"Is Apple News Worth It in 2024? A Quick Review\",\n \"source\": {\n \"name\": \"The Mac Observer\",\n \"icon\": \"https://encrypted-tbn3.gstatic.com/faviconV2?url=https://www.macobserver.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.macobserver.com/tips/deep-dive/apple-news-review/\",\n \"thumbnail\": \"https://www.macobserver.com/wp-content/uploads/2019/04/workfeatured-apple-news-text-logo.png\",\n \"date\": \"05/10/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 64,\n \"title\": \"Why Some of Apple\u2019s Biggest Fans Are Returning Their Vision Pros\",\n \"source\": {\n \"name\": \"Bloomberg\",\n \"icon\": \"https://lh3.googleusercontent.com/NGEszdY4BPKjXpMWL2fgAHQasyKjNgr-yPt6p2ELILT6x6SV6gjNxJgplAAFTRD6-UhwMebPlA\",\n \"authors\": [\n \"Mark Gurman\"\n ]\n },\n \"link\": \"https://www.bloomberg.com/news/newsletters/2024-02-18/apple-vision-pro-returning-3-500-device-over-comfort-lack-of-apps-and-price-lsrk88mq\",\n \"thumbnail\": \"https://assets.bwbx.io/images/users/iqjWHBFdfxIU/ioLp503X.ArA/v1/-1x-1.webp\",\n \"date\": \"02/18/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 65,\n \"title\": \"Apple in 2023: The Biggest News Stories and Surprises of the Year\",\n \"source\": {\n \"name\": \"MacRumors\",\n \"icon\": \"https://lh3.googleusercontent.com/3SBMAEqsqmKgiDfi4ZLKs_-e-bKbdb5T-EPgbxAFN1kr6_qPClz_Nd2RP3ja9ZqITXLDV58QzQ\",\n \"authors\": [\n \"Joe Rossignol\"\n ]\n },\n \"link\": \"https://www.macrumors.com/2023/12/27/the-biggest-apple-news-stories-of-2023/\",\n \"thumbnail\": \"https://images.macrumors.com/t/VWKIc80WQRkMG04WBMuhIoiSQNo=/1600x0/article-new/2023/12/Apple-in-2023-Feature.jpg\",\n \"date\": \"12/27/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 66,\n \"title\": \"Apple Stock: Legal Challenges and Uncertainty\",\n \"source\": {\n \"name\": \"TheStreet\",\n \"icon\": \"https://lh3.googleusercontent.com/br72SINUoS0KcWDp4e1QbcEo6wWuiQQCIR5KG8afEMNNBOCnFgs4V5muKBPImGHqzy3JMNAT\",\n \"authors\": [\n \"Kenio Fontes\"\n ]\n },\n \"link\": \"https://www.thestreet.com/apple/news/apple-stock-legal-challenges-and-uncertainty\",\n \"thumbnail\": \"https://www.thestreet.com/.image/ar_4:3%2Cc_fill%2Ccs_srgb%2Cfl_progressive%2Cq_auto:good%2Cw_1200/MTk1MjI0Mjk5NTEzMDYyNTk5/210128_timcook_privacy_applepark_bk136122.jpg\",\n \"date\": \"03/25/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 67,\n \"title\": \"U.S. hits Apple with landmark antitrust suit, accusing tech giant of stifling competition\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https://lh3.googleusercontent.com/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Robert Legare\"\n ]\n },\n \"link\": \"https://www.cbsnews.com/news/apple-antitrust-lawsuit-justice-department-iphone-apple-watch-imessage/\",\n \"thumbnail\": \"https://assets1.cbsnewsstatic.com/hub/i/r/2024/03/21/5bc2a11b-65ab-4dbe-836a-6b315e87e713/thumbnail/1200x630/a69f4ebbbad84c11eb2067c1b1c53ab4/gettyimages-2101984965.jpg?v=b241b87adbbb7f0a227ed35b96d0cefa\",\n \"date\": \"03/22/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 68,\n \"title\": \"News updates from May 2: Apple\u2019s revenue hit by falling China sales; Gazprom plunges to $7bn loss\",\n \"source\": {\n \"name\": \"Financial Times\",\n \"icon\": \"https://lh3.googleusercontent.com/281oPpXmEcGU9cV4N2LudyLEG2aBqbqG2iDoMoXUXKl-SWD4AUdO5652KVTGNmcduSWZB_7j\"\n },\n \"link\": \"https://www.ft.com/content/c2973eac-16c3-47b3-9e45-64d5da0e7e8a\",\n \"thumbnail\": \"https://www.ft.com/__origami/service/image/v2/images/raw/https%3A%2F%2Fd1e00ek4ebabms.cloudfront.net%2Fproduction%2Ff593a1f8-c0a7-48da-bb11-4a412d650db6.jpg?source=next-article&fit=scale-down&quality=highest&width=700&dpr=1\",\n \"date\": \"05/02/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 69,\n \"title\": \"Apple apologizes for latest-edition iPad 'Crush' ad on X after backlash\",\n \"source\": {\n \"name\": \"FRANCE 24 English\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.france24.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.france24.com/en/live-news/20240509-apple-apologizes-for-ipad-crush-ad-after-backlash\",\n \"thumbnail\": \"https://s.france24.com/media/display/130a4fd6-0e4f-11ef-9a6e-005056a97e36/w:480/p:16x9/Part-GTY-1445281667-1-1-0.jpg\",\n \"date\": \"05/09/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 70,\n \"title\": \"Apple becomes first target of EU\u2019s new digital competition rules aimed at big tech\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Kelvin Chan\"\n ]\n },\n \"link\": \"https://apnews.com/article/apple-european-union-digital-regulation-rules-app-store-07c34a80a5c98d0014e1c669a86af6a4\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/047021b/2147483647/strip/true/crop/2925x1947+0+2/resize/320x213!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2F0f%2F84%2Ff0208396f15211385a3c3cdc5dd3%2F1110cfb43bd84e2cbd0abd3c58ca5f94\",\n \"date\": \"06/24/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 71,\n \"title\": \"Today's top business headlines: Microsoft's Russian hackers, Apple's AI plans, and social media's very bad week\",\n \"source\": {\n \"name\": \"Fast Company\",\n \"icon\": \"https://lh3.googleusercontent.com/-e7e5mZOqWu-vrXLumST-06HPO9lPxaw16x6Bq2Nr_2tYSdyrHeA5mX_NzSC4x-Z3cadlQBnuA\",\n \"authors\": [\n \"Grace Snelling\"\n ]\n },\n \"link\": \"https://www.fastcompany.com/91054230/todays-top-business-headlines-microsofts-russian-hackers-apples-ai-plans-and-social-medias-very-bad-week\",\n \"thumbnail\": \"https://images.fastcompany.com/image/upload/f_webp,q_auto,c_fit/wp-cms/uploads/2024/03/p-1-91054230-business-headlines-microsoft-russian-hackers-apple-ai-social-media-bad-week.jpg\",\n \"date\": \"03/11/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 72,\n \"title\": \"Mass IT outage hits global airports, businesses and broadcasters\",\n \"source\": {\n \"name\": \"NBC News\",\n \"icon\": \"https://lh3.googleusercontent.com/qQgvCbPniYSaGbEdmp0fsD9Te7E2jE7TTCuy1h6h71QDEMnN-xVVrPE5xN5k5a6MF0XkOaNN-w\",\n \"authors\": [\n \"Kevin Collier\",\n \"Patrick Smith\"\n ]\n },\n \"link\": \"https://www.nbcnews.com/news/us-news/mass-cyber-outage-airports-businesses-broadcasters-crowdstrike-rcna162664\",\n \"thumbnail\": \"https://media-cldnry.s-nbcnews.com/image/upload/rockcms/2024-07/240719-global-network-outage-mb-1043-7abacc.jpg\",\n \"date\": \"07/19/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 73,\n \"title\": \"TikTok, Apple News and Instagram should be included in news media bargaining code, Greens say\",\n \"source\": {\n \"name\": \"The Guardian\",\n \"icon\": \"https://lh3.googleusercontent.com/SU8FywVNtcrG-wgjvZ_0D1-3JR_pN9LNSgjULFH74N748KVyEdkF1jdbvP4Lr7_ClbPZxL-iPw\",\n \"authors\": [\n \"Josh Taylor\"\n ]\n },\n \"link\": \"https://www.theguardian.com/media/2024/mar/05/meta-facebook-news-australia-changes-greens-tiktok-apple-news-instagram-included\",\n \"date\": \"03/05/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 74,\n \"title\": \"Apple stops selling latest Apple Watch after losing patent case\",\n \"source\": {\n \"name\": \"NPR\",\n \"icon\": \"https://lh3.googleusercontent.com/n1J5BgiRjTv0UA7P7ow6a4W1NsYEz8yc-Cbr539Q-le21-0uoqwGOIItzyalR8JOHXxwAL7eng\",\n \"authors\": [\n \"Bobby Allyn\"\n ]\n },\n \"link\": \"https://www.npr.org/2023/12/18/1220125508/apple-watch-series-9-ultra-2-masimo-patent\",\n \"thumbnail\": \"https://media.npr.org/assets/img/2023/12/18/ap23352759169639_custom-0c3844de01a10a066bceab3d71c74a35c3e8de10.jpg?s=1100&c=85&f=jpeg\",\n \"date\": \"12/18/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 75,\n \"title\": \"News updates from August 26: Apple\u2019s CFO to step down; Oil hits 2-week high after Libya halts exports\",\n \"source\": {\n \"name\": \"Financial Times\",\n \"icon\": \"https://lh3.googleusercontent.com/281oPpXmEcGU9cV4N2LudyLEG2aBqbqG2iDoMoXUXKl-SWD4AUdO5652KVTGNmcduSWZB_7j\"\n },\n \"link\": \"https://www.ft.com/content/c663038f-af84-468d-851c-dbf633d08f57\",\n \"thumbnail\": \"https://www.ft.com/__origami/service/image/v2/images/raw/https%3A%2F%2Fwww.ft.com%2F__origami%2Fservice%2Fimage%2Fv2%2Fimages%2Fraw%2Fhttps%253A%252F%252Fd1e00ek4ebabms.cloudfront.net%252Fproduction%252Ff1f3299d-3295-49b7-8e0a-56d2bf90d881.jpg%3Fsource%3Dnext-article%26fit%3Dscale-down%26quality%3Dhighest%26width%3D700%26dpr%3D1?source=next-opengraph&fit=scale-down&width=900\",\n \"date\": \"08/26/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 76,\n \"title\": \"Our 8 Favorite News Apps for iPhone in 2024\",\n \"source\": {\n \"name\": \"Lifewire\",\n \"icon\": \"https://lh3.googleusercontent.com/AO0mkVbn7LYlaW8aa9yJBiY5OHrRtFFFt9o0SSVE-8NQIerDpAX1Aju4kGdJqAik1aw3zVbMdw\",\n \"authors\": [\n \"Brenna Marie Miles\"\n ]\n },\n \"link\": \"https://www.lifewire.com/best-news-apps-for-iphone-4707728\",\n \"thumbnail\": \"https://www.lifewire.com/thmb/XtuvH5L8oDwRl5se7uw6zLJZ-yk=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/Apple-302171f9decd4539a553d65141040b2c.jpg\",\n \"date\": \"08/05/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 77,\n \"title\": \"Apple Glasses: Everything we've heard so far\",\n \"source\": {\n \"name\": \"Tom's Guide\",\n \"icon\": \"https://lh3.googleusercontent.com/YwroNBJq4UKY_6hH7n50b5Fnc3YEroWUN9CgsQG7p4WAvyJpTsXRG6taE0Te0iJafGqtei-zG_E\",\n \"authors\": [\n \"Kate Kozuch\",\n \"Roland Moore-Colyer\"\n ]\n },\n \"link\": \"https://www.tomsguide.com/news/apple-glasses\",\n \"thumbnail\": \"https://cdn.mos.cms.futurecdn.net/G9cxMFp4BXmPnuxJCxTAXV-320-80.jpeg\",\n \"date\": \"03/18/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 78,\n \"title\": \"Apple TV+ Is the Best Streamer Out There. So Why Is No One Watching?\",\n \"source\": {\n \"name\": \"Consequence\",\n \"icon\": \"https://lh3.googleusercontent.com/OLQ1dkGVXnklszXBGpSqHuW7yAetpOc-8ZPWc4WPTSAEYBW6duocXZ6-DAE2v0L8LKY8u-C5\",\n \"authors\": [\n \"Alex Young\"\n ]\n },\n \"link\": \"https://consequence.net/2024/03/apple-tv-best-streamer/\",\n \"thumbnail\": \"https://consequence.net/wp-content/uploads/2024/03/For-All-Mankind.jpeg\",\n \"date\": \"03/27/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 79,\n \"title\": \"US lifts ban on imports of latest Apple watch\",\n \"source\": {\n \"name\": \"BBC.com\",\n \"icon\": \"https://lh3.googleusercontent.com/_XS8V0jvDj-pe4NDxsc_8_YEk38hNH30ocGDk7oEwtRZNw-kUUuQouAYLFO0uIPFLX05QCKyoSo\",\n \"authors\": [\n \"Monica Miller\"\n ]\n },\n \"link\": \"https://www.bbc.com/news/business-67825553\",\n \"date\": \"12/27/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 80,\n \"title\": \"Apple\u2019s new Sports app offers scores, stats and interesting caveats\",\n \"source\": {\n \"name\": \"The Washington Post\",\n \"icon\": \"https://lh3.googleusercontent.com/o6yPxQMQu9ofTcfOYO51BWEv7jK44QjB14DqTK_cl1N3LsWVEF3GUHd1byHOQ3n8L6ySZluEhZQ\",\n \"authors\": [\n \"Chris Velazco\"\n ]\n },\n \"link\": \"https://www.washingtonpost.com/technology/2024/02/21/apple-sports-app-iphone/\",\n \"thumbnail\": \"https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/DAWCBTI23HXDZRJ7ODESUAYPVE.jpg&w=1200\",\n \"date\": \"02/21/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 81,\n \"title\": \"Apple News+ Adds New York Times\u2019 The Athletic Sports Content\",\n \"source\": {\n \"name\": \"Sportico\",\n \"icon\": \"https://lh3.googleusercontent.com/HnEKPXskEwaTgt3GXpyQSNC-hWFN3_ZdHCZP_tg_0SwQ5Y9avKJycVYFpEeOJ10yd_DaxcZgnQ\",\n \"authors\": [\n \"Todd Spangler\"\n ]\n },\n \"link\": \"https://www.sportico.com/business/media/2023/apple-news-adds-new-york-times-athletic-sports-content-1234758849/\",\n \"thumbnail\": \"https://www.sportico.com/wp-content/uploads/2023/12/New-York-Times.webp\",\n \"date\": \"12/19/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 82,\n \"title\": \"Spotify: Apple has 'defied' the EU by blocking latest update with pricing info [U: Apple response]\",\n \"source\": {\n \"name\": \"9to5Mac\",\n \"icon\": \"https://lh3.googleusercontent.com/_yU7TVFBBY59lFTGF_gB-G6AZql5gRMNflxhEDwVjLtWfN6Xh6JPnPNqKAJO75h_BLghOkzYPw\",\n \"authors\": [\n \"Michael Potuck\"\n ]\n },\n \"link\": \"https://9to5mac.com/2024/04/25/spotify-says-apple-defies-eu-again/\",\n \"thumbnail\": \"https://9to5mac.com/wp-content/uploads/sites/6/2023/03/apple-music-vs-spotify.jpg?quality=82&strip=all&w=1600\",\n \"date\": \"04/25/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 83,\n \"title\": \"Apple Vision Pro debuts Friday. Here's what you need to know.\",\n \"source\": {\n \"name\": \"CBS News\",\n \"icon\": \"https://lh3.googleusercontent.com/dXy0k7AMf-wXfnj2AtaLk3rZcPGjClkFvKSAQnjoLp9wa_ggxST_WSGqovh984zY8mf3vDmt\",\n \"authors\": [\n \"Elizabeth Napolitano\"\n ]\n },\n \"link\": \"https://www.cbsnews.com/news/apple-vision-pro-launch-virtual-reality-2024/\",\n \"thumbnail\": \"https://assets1.cbsnewsstatic.com/hub/i/r/2024/01/08/9ef5909b-8a3b-4187-9b96-ea5c83ebc027/thumbnail/1200x630g4/08a67d3e4eb80445aabf06b0bf075572/gettyimages-1496190481.jpg?v=c72f52c71e431fd7dde1ba5ae2f69280\",\n \"date\": \"02/02/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 84,\n \"title\": \"The iPhone 15 lineup has arrived, and here\u2019s everything you need to know\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https://lh3.googleusercontent.com/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"Jay Peters\"\n ]\n },\n \"link\": \"https://www.theverge.com/23885548/apple-iphone-15-everything-need-know-news-announcement\",\n \"thumbnail\": \"https://cdn.vox-cdn.com/thumbor/55tJEnalEYRrWue3H3_BBhkMNpo=/0x0:2040x1360/1200x628/filters:focal(1020x680:1021x681)/cdn.vox-cdn.com/uploads/chorus_asset/file/24931976/236794_iPhone_15_pro_pro_Max_VPavic_0020.jpg\",\n \"date\": \"04/28/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 85,\n \"title\": \"Good news for AirPods, bad news for Apple [The CultCast]\",\n \"source\": {\n \"name\": \"Cult of Mac\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.cultofmac.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Lewis Wallace\"\n ]\n },\n \"link\": \"https://www.cultofmac.com/news/airpods-and-apple-antitrust-the-cultcast-episode-639\",\n \"thumbnail\": \"https://video-meta.humix.com/poster/7KSQSZ2bBoTY/KPpKoid7QR2_FCtxiN.jpg\",\n \"date\": \"03/23/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 86,\n \"title\": \"Apple News exec on importance of publisher partnerships as The Athletic joins paid-for product\",\n \"source\": {\n \"name\": \"Press Gazette\",\n \"icon\": \"https://encrypted-tbn3.gstatic.com/faviconV2?url=https://pressgazette.co.uk&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Bron Maher\"\n ]\n },\n \"link\": \"https://pressgazette.co.uk/news/apple-news-the-athletic-eddy-cue/\",\n \"thumbnail\": \"https://pressgazette.co.uk/wp-content/uploads/sites/7/2023/06/shutterstock_1354353419-e1686587259217-464x348.jpg\",\n \"date\": \"12/19/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 87,\n \"title\": \"Apple is bringing ChatGPT to the iPhone in partnership with OpenAI\",\n \"source\": {\n \"name\": \"CBC News\",\n \"icon\": \"https://encrypted-tbn1.gstatic.com/faviconV2?url=https://www.cbc.ca&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.cbc.ca/news/business/apple-chatgpt-iphone-openai-1.7230465\",\n \"thumbnail\": \"https://i.cbc.ca/1.7230495.1718047636!/fileImage/httpImage/image.JPG_gen/derivatives/16x9_940/apple-conference.JPG\",\n \"date\": \"06/10/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 88,\n \"title\": \"Why Apple is urging \u2018all users\u2019 to update their iOS\",\n \"source\": {\n \"name\": \"The Hill\",\n \"icon\": \"https://lh3.googleusercontent.com/4GIV6VDGgeRBBo20kfZHEFjDrgPr1lxJmvxB32KUmZWsAU54y7SD2dfT385jXBnmdBoBMaM29A\",\n \"authors\": [\n \"Jeremy Tanner\"\n ]\n },\n \"link\": \"https://thehill.com/homenews/nexstar_media_wire/4341501-why-apple-is-urging-all-users-to-update-their-ios/\",\n \"thumbnail\": \"https://thehill.com/wp-content/uploads/sites/2/2023/12/GettyImages-1668909312-e1701721757890.jpg?strip=1\",\n \"date\": \"12/04/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 89,\n \"title\": \"Our 10 Favorite News Aggregators of 2024\",\n \"source\": {\n \"name\": \"Lifewire\",\n \"icon\": \"https://lh3.googleusercontent.com/AO0mkVbn7LYlaW8aa9yJBiY5OHrRtFFFt9o0SSVE-8NQIerDpAX1Aju4kGdJqAik1aw3zVbMdw\",\n \"authors\": [\n \"Stefanie Fogel\"\n ]\n },\n \"link\": \"https://www.lifewire.com/best-news-aggregators-4584410\",\n \"thumbnail\": \"https://www.lifewire.com/thmb/XhdDeNZWfaiFLtXmJH5voFiikMs=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/Flipboard-5c464aa846e0fb0001dd8746.jpg\",\n \"date\": \"07/17/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 90,\n \"title\": \"Apple Intelligence: ChatGPT coming to iPhones in AI overhaul\",\n \"source\": {\n \"name\": \"BBC\",\n \"icon\": \"https://encrypted-tbn3.gstatic.com/faviconV2?url=https://www.bbc.co.uk&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Zoe Kleinman\",\n \"Liv Mcmahon\"\n ]\n },\n \"link\": \"https://www.bbc.co.uk/news/articles/c4nn5mejl89o\",\n \"thumbnail\": \"https://ichef.bbci.co.uk/news/1024/branded_news/1b13/live/1589a5d0-2764-11ef-9d0a-ef8fa1b61375.jpg\",\n \"date\": \"06/11/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 91,\n \"title\": \"Apple\u2019s sales fall for the fourth straight quarter despite a strong start for latest iPhones\",\n \"source\": {\n \"name\": \"The Associated Press\",\n \"icon\": \"https://lh3.googleusercontent.com/M087pJgRw3PLf4gl-Y7U-tJn6uaN99AUbFIuX7fmMnhq5QeNylJQMq_UeYPPVaEPk-5jL9I3QA\",\n \"authors\": [\n \"Michael Liedtke\"\n ]\n },\n \"link\": \"https://apnews.com/article/apple-sales-slump-iphone-quarterly-earnings-a8e34afb6f6c04610cca638bda1c7443\",\n \"thumbnail\": \"https://dims.apnews.com/dims4/default/7a7007a/2147483647/strip/true/crop/8209x5473+0+0/resize/599x399!/quality/90/?url=https%3A%2F%2Fassets.apnews.com%2Fee%2Fe6%2Fee57c7ccf36d465f5acd1bef0167%2F1b154a879b004226a75814b66f708fb3\",\n \"date\": \"11/02/2023, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 92,\n \"title\": \"Tech News Today: Google search quality slips, Apple axes Watch Series 9 blood oxygen sensor, and more\",\n \"source\": {\n \"name\": \"The Indian Express\",\n \"icon\": \"https://lh3.googleusercontent.com/kkBP5GMG7WhGg_OaGvdoYp6jxPdIe5_HE4NLhmd8-80hpps2K2BcHM47_XxnxBo9ub0jbx1ZZQ\"\n },\n \"link\": \"https://indianexpress.com/article/technology/tech-news-technology/tech-news-today-19-january-2024-google-search-quality-apple-blood-oxygen-9117718/\",\n \"date\": \"01/19/2024, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 93,\n \"title\": \"Apple previews new features coming to Apple services this fall\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.apple.com/newsroom/2023/06/apple-previews-new-features-coming-to-apple-services-this-fall/\",\n \"thumbnail\": \"https://www.apple.com/newsroom/images/live-action/wwdc-2023/standard/services-roundup/Apple-WWDC23-Apple-services-new-features-3-up_big.jpg.large.jpg\",\n \"date\": \"06/07/2023, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 94,\n \"title\": \"Over 100 new podcasts from top apps and services launch on Apple Podcasts\",\n \"source\": {\n \"name\": \"Apple\",\n \"icon\": \"https://encrypted-tbn2.gstatic.com/faviconV2?url=https://www.apple.com&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\"\n },\n \"link\": \"https://www.apple.com/newsroom/2023/09/over-100-new-podcasts-from-top-apps-and-services-launch-on-apple-podcasts/\",\n \"thumbnail\": \"https://www.apple.com/newsroom/images/2023/09/over-100-new-podcasts-launched-on-apple-podcasts/article/Apple-Podcasts-hero_big.jpg.large.jpg\",\n \"date\": \"09/26/2023, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 95,\n \"title\": \"How latest iPhone OS update has 'dragged' Apple in Israel-Palestine conflict\",\n \"source\": {\n \"name\": \"The Times of India\",\n \"icon\": \"https://lh3.googleusercontent.com/d9mz-OKghOQPsgxRv1BQzQAI44ifiA_6aAk-gRwo4_32mZXM-TSd5vIY1rL1P2LUH9mFQPnUSRE\"\n },\n \"link\": \"https://timesofindia.indiatimes.com/technology/tech-news/how-latest-iphone-os-update-has-dragged-apple-in-israel-palestine-conflict/articleshow/109304999.cms\",\n \"thumbnail\": \"https://static.toiimg.com/thumb/msid-109304974,width-1280,height-720,resizemode-4/109304974.jpg\",\n \"date\": \"04/15/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 96,\n \"title\": \"Apple sales fall in nearly all markets\",\n \"source\": {\n \"name\": \"BBC\",\n \"icon\": \"https://encrypted-tbn3.gstatic.com/faviconV2?url=https://www.bbc.co.uk&client=NEWS_360&size=96&type=FAVICON&fallback_opts=TYPE,SIZE,URL\",\n \"authors\": [\n \"Natalie Sherman\"\n ]\n },\n \"link\": \"https://www.bbc.co.uk/news/articles/c99zxzjqw2ko\",\n \"thumbnail\": \"https://ichef.bbci.co.uk/news/1024/branded_news/7b27/live/fb16e820-0954-11ef-b6ce-2bc209dc2066.png\",\n \"date\": \"05/03/2024, 07:00 AM, +0000 UTC\"\n },\n {\n \"position\": 97,\n \"title\": \"Apple AI plans get clearer, company is looking to train its LLM on top news content\",\n \"source\": {\n \"name\": \"India Today\",\n \"icon\": \"https://lh3.googleusercontent.com/KWKtiaerfOnNxQfpRY5T_b-A6Fl2r2RDpTumesYVdF8wcgqQiBklPObMDBVQ4DBDDWeKKewE\",\n \"authors\": [\n \"Divya Bhati\"\n ]\n },\n \"link\": \"https://www.indiatoday.in/technology/news/story/apple-ai-plans-get-clearer-company-is-looking-to-train-its-llm-on-top-news-content-2479799-2023-12-24\",\n \"thumbnail\": \"https://akm-img-a-in.tosshub.com/indiatoday/images/story/202312/apple-23271361-16x9.jpg?VersionId=2Hc49LYxQGEt88izzcGY.0ITNvHgW3xO?size=1200:675\",\n \"date\": \"12/24/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 98,\n \"title\": \"Apple's value plunged nearly $1 trillion in 2022. Here's what that says about the economy\",\n \"source\": {\n \"name\": \"ABC News\",\n \"icon\": \"https://lh3.googleusercontent.com/X8gOYJVMpwt5Rdxa-TEs1Av4_oZNCCtQN-1abkvvfNdvy3JvVhT1mERLPhFXBI6xsCV4K_lQpJI\",\n \"authors\": [\n \"Max Zahn\"\n ]\n },\n \"link\": \"https://abcnews.go.com/Business/apples-plunged-1-trillion-2022-economy/story?id=95930467\",\n \"thumbnail\": \"https://s.abcnews.com/images/Business/apple-1-gty-er-221230_1672426670831_hpMain_16x9_1600.jpg\",\n \"date\": \"12/31/2022, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 99,\n \"title\": \"Tech News Today: Xiaomi\u2019s first electric car, Apple\u2019s endless beef with authorities, and more\",\n \"source\": {\n \"name\": \"The Indian Express\",\n \"icon\": \"https://lh3.googleusercontent.com/kkBP5GMG7WhGg_OaGvdoYp6jxPdIe5_HE4NLhmd8-80hpps2K2BcHM47_XxnxBo9ub0jbx1ZZQ\"\n },\n \"link\": \"https://indianexpress.com/article/technology/tech-news-technology/tech-news-today-29-december-2023-xiaomi-su7-ev-apple-watch-ban-faamng-9087377/\",\n \"date\": \"12/29/2023, 08:00 AM, +0000 UTC\"\n },\n {\n \"position\": 100,\n \"title\": \"All the news from Apple\u2019s \u201cScary Fast\u201d Mac event\",\n \"source\": {\n \"name\": \"The Verge\",\n \"icon\": \"https://lh3.googleusercontent.com/vkRH5gyHtLcKAoRSFHK1ATEgKtHDXoi9iRKKOdVhOng8g7qF2_QCVT1f11q_y_4y95_PY5VzWQ\",\n \"authors\": [\n \"\u02bfUmar Sh\u0101kir\"\n ]\n },\n \"link\": \"https://www.theverge.com/2023/10/30/23933672/apple-event-mac-october-news-updates-products-scary-fast\",\n \"thumbnail\": \"https://i.ytimg.com/vi/gN8oCWGeRtI/mqdefault.jpg\",\n \"date\": \"10/30/2023, 07:00 AM, +0000 UTC\"\n }\n ],\n \"menu_links\": [\n {\n \"title\": \"U.S.\",\n \"topic_token\": \"CAAqIggKIhxDQkFTRHdvSkwyMHZNRGxqTjNjd0VnSmxiaWdBUAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqIggKIhxDQkFTRHdvSkwyMHZNRGxqTjNjd0VnSmxiaWdBUAE\"\n },\n {\n \"title\": \"World\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx1YlY4U0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx1YlY4U0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Your local news\",\n \"topic_token\": \"CAAqHAgKIhZDQklTQ2pvSWJHOWpZV3hmZGpJb0FBUAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqHAgKIhZDQklTQ2pvSWJHOWpZV3hmZGpJb0FBUAE\"\n },\n {\n \"title\": \"Business\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRGx6TVdZU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Technology\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRGRqTVhZU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Entertainment\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNREpxYW5RU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNREpxYW5RU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Sports\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp1ZEdvU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp1ZEdvU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Science\",\n \"topic_token\": \"CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp0Y1RjU0FtVnVHZ0pWVXlnQVAB\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqJggKIiBDQkFTRWdvSUwyMHZNRFp0Y1RjU0FtVnVHZ0pWVXlnQVAB\"\n },\n {\n \"title\": \"Health\",\n \"topic_token\": \"CAAqIQgKIhtDQkFTRGdvSUwyMHZNR3QwTlRFU0FtVnVLQUFQAQ\",\n \"serpapi_link\": \"https://serpapi.com/search.json?engine=google_news&topic_token=CAAqIQgKIhtDQkFTRGdvSUwyMHZNR3QwTlRFU0FtVnVLQUFQAQ\"\n }\n ]\n}" +} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-cfec9d7d5277386c7e0255e1ca7e2d1e.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-cfec9d7d5277386c7e0255e1ca7e2d1e.json deleted file mode 100644 index 60b4e02..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-cfec9d7d5277386c7e0255e1ca7e2d1e.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:51 GMT", - "Content-Type": "application/json", - "Content-Length": "984", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "3500", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1993311", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "200ms", - "x-request-id": "req_3a530427f3fb5275abad4a947b50a520", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=P5A2Tt3SPQe09fylK18LXp_X18CSdW2W_K9CyW6az7k-1729560591-1.0.1.1-Tb0GsT0L08GV4n093qOD7l3f5XT4KeQX7Pg0.rH3yixQHdHyDCd_B91FEMVhUwiwOhMV20IVGOCBzIav9zdpfA; path=/; expires=Tue, 22-Oct-24 01:59:51 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=DrMJZMwqUov3e.Pph5RNGJuNyG3rxjlgJH7QhN3U51Y-1729560591407-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b7e95b5842c7-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy0SUHFvtoKtSXDzBPscbArm1BU6\",\n \"object\": \"chat.completion\",\n \"created\": 1729560588,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Current headlines about Apple include news about potential discontinuation of some products, sales predictions for the iPhone 16 series based on Apple Intelligence, and technical updates like iOS 18 patches. There is also speculation about an Apple event titled 'Glowtime' which could feature iPhone 16 announcements.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 8688,\n \"completion_tokens\": 70,\n \"total_tokens\": 8758,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-e92c14654ff46872c21a06df358fda88.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-e92c14654ff46872c21a06df358fda88.json new file mode 100644 index 0000000..1294b37 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleNewsTool-e92c14654ff46872c21a06df358fda88.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 26 Oct 2024 00:23:55 GMT", + "Content-Type": "application\/json", + "Content-Length": "1704", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "8733", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1992623", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "221ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOskNNzDHX3dNiuuylgFxGFwGfjZ\",\n \"object\": \"chat.completion\",\n \"created\": 1729902226,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"1. Is Apple Stock A Buy Before September-Quarter Earnings? Read more here: https:\/\/www.investors.com\/news\/technology\/apple-stock-buy-now-aapl-stock\/ (Published on 10\/21\/2024)\\\\n2. Apple Loop: iPhone 17 Pro Leaks, Surprise iPad Mini Launch, New MacBook Pro Specs. Full article here: https:\/\/www.forbes.com\/sites\/ewanspence\/2024\/10\/18\/apple-news-headliens-iphone-17-pro-ipad-mini-macbook-pro-macos-ai-iphone-se\/ (Published on 10\/18\/2024)\\\\n3. Apple set to unveil iPhone 16 on Monday. Here's what to expect: https:\/\/www.cbsnews.com\/news\/apple-iphone-16-what-to-expect\/ (Published on 09\/09\/2024)\\\\n4. Apple embraces the AI craze with its newly unleashed iPhone 16 lineup, full story at https:\/\/apnews.com\/article\/apple-iphone-16-artificial-intelligence-google-samsung-4f30bf40ad89793d80f8ac3a20f9e79c (Published on 09\/09\/2024)\\\\n5. Apple picking at Mass. farm ends with racial profiling, scuffle, family says. Details here: https:\/\/www.nbcboston.com\/news\/local\/danvers-apple-picking-racial-profiling-claim\/3520353\/ (Published on 10\/15\/2024)\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 9186,\n \"completion_tokens\": 323,\n \"total_tokens\": 9509,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-30b3c5e13ad916219ec1fbbc2983cb19.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-30b3c5e13ad916219ec1fbbc2983cb19.json deleted file mode 100644 index 9d95aa9..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-30b3c5e13ad916219ec1fbbc2983cb19.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:23:34 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AEcZIy3kcciUa0zUG7KuoFOodah0h\",\n \"object\": \"chat.completion\",\n \"created\": 1728048212,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden is the current President of the United States.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 990,\n \"completion_tokens\": 23,\n \"total_tokens\": 1013,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_68a5bb159e\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-4d9c37b83db9353afd0462b60417eb0e.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-4d9c37b83db9353afd0462b60417eb0e.json deleted file mode 100644 index eb8b89f..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-4d9c37b83db9353afd0462b60417eb0e.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:23:29 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked" - }, - "data": "{\n \"id\": \"chatcmpl-AEcZEh4VMlWjv13MdfSnmAgsuaqj4\",\n \"object\": \"chat.completion\",\n \"created\": 1728048208,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_C07gaoUOMhiHriWgmrS9fz0K\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serp_a_p_i_google_search_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 166,\n \"completion_tokens\": 25,\n \"total_tokens\": 191,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-600667e7881befb7566aabff802e23d8.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-600667e7881befb7566aabff802e23d8.json new file mode 100644 index 0000000..0abb0fb --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-600667e7881befb7566aabff802e23d8.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 26 Oct 2024 00:25:15 GMT", + "Content-Type": "application\/json", + "Content-Length": "676", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "885", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1998632", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "41ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOuBRqTO4zR0DQ15lvKhfDdlDiJB\",\n \"object\": \"chat.completion\",\n \"created\": 1729902315,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1460,\n \"completion_tokens\": 15,\n \"total_tokens\": 1475,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-8c4de06e2a7064e26c30dd1131e7c149.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-8c4de06e2a7064e26c30dd1131e7c149.json index f288fa6..54c6af3 100644 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-8c4de06e2a7064e26c30dd1131e7c149.json +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-8c4de06e2a7064e26c30dd1131e7c149.json @@ -1,13 +1,13 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:29:53 GMT", + "Date": "Sat, 26 Oct 2024 00:25:13 GMT", "Content-Type": "application\/json", "Content-Length": "954", "Connection": "keep-alive", "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1247", + "openai-organization": "REDACTED", + "openai-processing-ms": "959", "openai-version": "2020-10-01", "x-ratelimit-limit-requests": "10000", "x-ratelimit-limit-tokens": "2000000", @@ -15,17 +15,13 @@ "x-ratelimit-remaining-tokens": "1999865", "x-ratelimit-reset-requests": "6ms", "x-ratelimit-reset-tokens": "4ms", - "x-request-id": "req_70eaa38447b73c31413c67d7bbf1f47d", + "x-request-id": "REDACTED", "strict-transport-security": "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=7eHWmAyfGzR6juUCfyuBeN99c8KHPXfHWfyUvZuhKtI-1729560593-1.0.1.1-7ofygxNEZ0A2b0fgEQi0NLEWP5Lrr0ZmG1deBuyWXVMk_T0P8LrFJ_IKxo_aVGoqYSKHJSmHEg_t3r2mhXiBzQ; path=\/; expires=Tue, 22-Oct-24 01:59:53 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=9sZGvKFjmix0xrHzhPzBokXwrBJObGreU7eHjSjLYkw-1729560593486-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], "X-Content-Type-Options": "nosniff", "Server": "cloudflare", - "CF-RAY": "8d65b8049d5e4263-EWR", + "CF-RAY": "REDACTED", "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKy0WZlI3LQD1CiU5jqMS42NdRl5K\",\n \"object\": \"chat.completion\",\n \"created\": 1729560592,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_D1ZxYXnRzUQYd8s2Ax6NyYRY\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serp_a_p_i_google_search_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 201,\n \"completion_tokens\": 25,\n \"total_tokens\": 226,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ba97e70e7c\"\n}\n" -} \ No newline at end of file + "data": "{\n \"id\": \"chatcmpl-AMOu8oMwQGvFAiR5i7xnk8kEY6DbG\",\n \"object\": \"chat.completion\",\n \"created\": 1729902312,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_q6qWvWHnuWLdgKTsd8AKM58x\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serp_a_p_i_google_search_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 206,\n \"completion_tokens\": 25,\n \"total_tokens\": 231,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-Tool.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-Tool.json index 529d534..d48b73e 100644 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-Tool.json +++ b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-Tool.json @@ -1,10 +1,12 @@ { - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:23:32 GMT", - "Content-Type": "application\/json; charset=utf-8", - "Content-Length": "47290", - "Connection": "keep-alive" - }, - "data": "{\n \"search_metadata\": {\n \"id\": \"66ffec51a47167fa26c5db81\",\n \"status\": \"Success\",\n \"json_endpoint\": \"https:\/\/serpapi.com\/searches\/994a79c8b3a78975\/66ffec51a47167fa26c5db81.json\",\n \"created_at\": \"2024-10-04 13:23:29 UTC\",\n \"processed_at\": \"2024-10-04 13:23:29 UTC\",\n \"google_url\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&oq=current+president+of+the+United+States&num=10&sourceid=chrome&ie=UTF-8\",\n \"raw_html_file\": \"https:\/\/serpapi.com\/searches\/994a79c8b3a78975\/66ffec51a47167fa26c5db81.html\",\n \"total_time_taken\": 2.2\n },\n \"search_parameters\": {\n \"engine\": \"google\",\n \"q\": \"current president of the United States\",\n \"google_domain\": \"google.com\",\n \"num\": \"10\",\n \"device\": \"desktop\"\n },\n \"search_information\": {\n \"query_displayed\": \"current president of the United States\",\n \"total_results\": 933000000,\n \"time_taken_displayed\": 0.33,\n \"organic_results_state\": \"Results for exact spelling\"\n },\n \"knowledge_graph\": {\n \"title\": \"Joe Biden\",\n \"type\": \"46th U.S. President\",\n \"entity_type\": \"people, athlete\",\n \"kgmid\": \"\/m\/012gx2\",\n \"knowledge_graph_search_link\": \"https:\/\/www.google.com\/search?kgmid=\/m\/012gx2&hl=en-US&q=Joe+Biden\",\n \"serpapi_knowledge_graph_search_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&hl=en-US&kgmid=%2Fm%2F012gx2&num=10&q=Joe+Biden\",\n \"header_images\": [\n {\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72ff721367a6a963c1c33219bfea7e2189bb33f1d4aaa5d5d5d.webp\"\n },\n {\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72ff721367a6a963c1c022521bc1dc5865de85622dc2659e003.webp\"\n },\n {\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72ff721367a6a963c1c53016c9f19cd71f8e72ab813f5ca518b.webp\"\n }\n ],\n \"website\": \"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\n \"born\": \"November 20, 1942 (age 81 years), Scranton, PA\",\n \"born_links\": [\n {\n \"text\": \"Scranton, PA\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Scranton&si=ACC90nyvvWro6QmnyY1IfSdgk5wwjB1r8BGd_IWRjXqmKPQqm2EZLCY33SRJUwAbMyILe9ZYvWR48da73TEAYEa-DWofQ_zzM8YXtrrAuKdRdz8_jwERmQ54VngswC6NGdVm-Uw7JUkpoo9GjfXwDkQBXLO0pQ5R9L8mVAd4zGJqjD9EyBowzC_A1wzmYHlyoqdIwojtRD4S&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAHoECDQQAg\"\n }\n ],\n \"organizations_founded\": \"United States Department of Defense China Task Force\",\n \"organizations_founded_links\": [\n {\n \"text\": \"United States Department of Defense China Task Force\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=United+States+Department+of+Defense+China+Task+Force&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgE1g6nlV1psrsA6W4s4OrKxpg_xQ7PHcADkxSX4GwDRYKYLgPz-0tSPsvrY_Dfc3LU8IWO5gOEKWpnN-kQLDikUYyAc2w_nYLwFXC1q5zk_-yNZUDNcT2fp9NWpUng12JeSndTELHmXP2n34vehcNTydlSasILmb6mTRqAdsbdNlrt-ZePnRCBF1iEaEtYnGt_vvUFSkkM_d9Rmuf3vZnZzBXWwHy07j7gWRu-R2ACqA-bUj0vaporPDbMXGttRr_mYS7Ij8ly-O78dfB1Ok8QX79jYhoActb0qKcBMNAtnL8Dk_AkKqdoXpc8fkn1XgFxEgxl0%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAHoECC4QAg\"\n },\n {\n \"text\": \"See more\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=joe+biden+organizations+founded&stick=H4sIAAAAAAAAAOPgE-LUz9U3MDRKrzDSsswot9JPzs_JSU0uyczP088vSk_My6xKBHHi0_JL81JSi4qtIIwUBWTZRazyWfmpCkmZKal5KBLFClDlAN6zbvNqAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ44YBKAF6BAguEAM\"\n }\n ],\n \"grandchildren\": \"Navy Joan Roberts, Finnegan Biden, Maisy Biden, Natalie Biden, Naomi Biden, Robert Biden II\",\n \"grandchildren_links\": [\n {\n \"text\": \"Navy Joan Roberts\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Navy+Joan+Roberts&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgGBO1k0Fw9J7eiXIAluOC-h3x9kWnCEJLYw0la7WK3Omp0d2JsScWW1rQ8_czyUaObhJJ0A_Jn5HfPbr0fCcfno6x_j1bMCZqQO1y_Jd11erbDSEEFYImHvmpum7-D-aa6A_aSUDCVinnG6yFGURviXPRELfldPI7m1GsNkmX0lHQfiWFDw8GzcYQyT_vUrof8-zLFqxUPdWlsnky-eGa_4x30pTZwZsPkdqkWMzPNRR84_1xUrRMvuBL9Ah-EDa7gsVvg0%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAHoECCwQAg\"\n },\n {\n \"text\": \"Finnegan Biden\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Finnegan+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQauVu4G0hIQv7fc43FGsjhKZTj_XUbYWBwbsWuegUqJCbp21rtbRxSZB-CZ61IZpFGStoWH1WtSZfgBWTqBxZ1EN2MdUzCeNseI7lv_h85TY5-WL_LjYQSkdLOesnmfUCWEB96Ro53WQEzvUaa-fLt3V4jj9NjD4BNgWl9AxuYWv7awPnEGC7KlLgX1jHXIOMHnJc2T_8KvENhCN_UGb7z-dV_-6lys7vbLSRjpQbuNlixaCYg%3D%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAXoECCwQAw\"\n },\n {\n \"text\": \"Maisy Biden\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Maisy+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQUcR8mmtY-_S5_nyD-HJlhyanoVc___KFVbmfkFHDuBodfjyQW3Zb5nV0OXlHbmmrJfwE9n2Y-uNjTuygS7rl1VwBSenl4Rh0A1MeWwvacWXjeZPKFCe6AUeMf-5v6Y8Dd0fJzbdkXZy_38tpvivSyvIrWs5ANyFnpjvdyxDjC3AmGHrqqbAncI0YxpsMwQL2qC_djqi9AIRq7B6uY7O6TQf8fAVp1CrVAhbIGy7ycLbjyMpMw%3D%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAnoECCwQBA\"\n },\n {\n \"text\": \"Natalie Biden\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Natalie+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQeHc8_rzepqdBr3oHPWyn600qOsJHsKvQx4I2FIdKctMlaBfqNUTar5Y1BbcrM8jQv1G0257jwiJQzw5RK2u5qq6fP3ZXJP7gkPyeliAEMrOXISWutlszhADGKQfqsGd7Gq166w2f6UdHhazPDw5L0I43Uvk0oOmDNLHB5WY8HCm7AML__j7mCKwnZWi4_K2Jlp0gD3t0wCDnp-xNxUE__QFK_UrD9HTWfq_u5EIVwxx4Gfw2w%3D%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoA3oECCwQBQ\"\n },\n {\n \"text\": \"Naomi Biden\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Naomi+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQUCnqIBK-OChIi9DYVRUllksDLLsauXRg6UAPslNKKJV5A1Nlmur75Xh7A2L_FQvKE7HjKvg6qADyRybOZZE1y6CxbX83c7ejYOvWO4SuYqouenZkKCv05Men-Z-fb_kdHSx9Mw8HiyY7vkIKGBvYb28d8TR--R8hcU0oMcRMysKgC0r7Uo7BCHqmgRxWJ5R7wo8ncbrtMzR8z754Hg3h7z2qP90yf_YEkoc2pKPWY50nsEZlQ%3D%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoBHoECCwQBg\"\n },\n {\n \"text\": \"Robert Biden II\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Robert+Biden+II&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQREBJUEQ3-xrOz-cJiODYcOGvbRLeGq7VeV_FiFRquSupTOTNogbd_iqTwfJ-szApTTtfrIf7wbXHZhStwAtp5H8W7qxLG24SIWP_HwN35iwmMFNX8o6XxmJHbYAAOtGlCmZ1QfgD0o43kqV3NO9xjz87lBmkjL5lj0FUxzUVhxF_B3zVROgdHvWUXnRoLUJaIScCwhtiH60zsPEI2s5GfmGMVHeGi42bSgWIWjf75USq57MOg%3D%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoBXoECCwQBw\"\n }\n ],\n \"grandparents\": \"Mary Elizabeth Robinette Biden, Ambrose J. Finnegan, Joseph H. Biden, Geraldine C. Blewitt\",\n \"grandparents_links\": [\n {\n \"text\": \"Mary Elizabeth Robinette Biden\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Mary+Elizabeth+Robinette+Biden&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgBHJLIINkT9aYXgbtFPvgQd-kcQhwFRMti1rgpedDgJKsFFmZIBJtpsK-sYE2Ypi9dkqq-y1YEcgstxi8-N-JWFzPrfO3ROmGxU_42LMKOYTabKn84QGP3BNMA_fJxl9ffDCrf5yx_xa066sXUtXCwcbdah0krNAOvCST4CEgMvKZ5iT3a6a4EScH8o8x005cnbzQgi1IxBq3x619kFxh37tBxcNwobfpMHSeL2n3xjVGlbnjGyVh85H3Fr06k15-jKc-iKx3qfuvDtN6EzzfQyJel-L&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAHoECC0QAg\"\n },\n {\n \"text\": \"Ambrose J. Finnegan\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Ambrose+J.+Finnegan&si=ACC90nyByJNAHfkzzi7l4JA4fcQKXOYDCI7plJH6uVksGWg6XlUrE1PCCLclo11PpDvum35_ZMMXAUBFFECIbLX_us44wGRV1HqgapndcDM7WJwspW4isSVTTukZ21DYgWLvNIAZS0ygJ_YXzlk35rbYjSCYaVtwMVMC4nOzeY9E3jqW9oB_3cAnNAeyTDOYmgmUhUEp2LLXTGmIyZnBrNYh6Q7uTD0oSuqvQVXn4QziiBqKdK9i6LYxhXAr-RudIQHSgbYfiKf5SiL_PztJZCFpo_a1MV0obPIHixTCTPqSCEHGjNEbpA8%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAXoECC0QAw\"\n },\n {\n \"text\": \"Joseph H. Biden\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Joseph+H.+Biden&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgHbh__85qw2jT4PRA4VjIRAIQz1HP1CGkEXFqJAGVGnsWpApd7QnfucVtTnXdpXaxIclEZb2O8KTykrxITGnkKo9mxwKxNg09vKJQiWbz32dv2_GSqRxDAB0cn3Iq2lesx0jLEl8AGMjk5Alyt5Y95QOUnViTHc--51cqqSz4cxWoVwGNIpsoUj3kg60vPZOxGK8zqWeOlNDPbAmyaOyI5qQfgYiKVmRjozLhtYOPTWOjOUSBSnvVXmhHBtEtl3hSbPGsc4%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAnoECC0QBA\"\n },\n {\n \"text\": \"Geraldine C. Blewitt\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Geraldine+C.+Blewitt&si=ACC90nyByJNAHfkzzi7l4JA4fcQKXOYDCI7plJH6uVksGWg6XjCvpGreiIu5eQP4ovnI7FAryP2eZx77OnNzOoDThI4LaSMvhXSz-mFsaRUyIOcLrbOx234IktXZbSxPC5QWpQ-Cti1A5w4PS3jnPzU1kJX61vHhntzGr-ceNxcT3mXAihg0FYSmyLx3yFicxpeWeYwrjSBh06Om5VmIMfAd5tDJ7PClobwz02Mr0FwK5cC1RXPIkX-Yii5DD86Pivyc5Hg046eOeCtNMrNu7cSe9kfhIhz_-yYEnfNGwGVOKTgMvUjflFI%3D&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoA3oECC0QBQ\"\n }\n ],\n \"great_grandparents\": \"George Hamilton Robinette\",\n \"great_grandparents_links\": [\n {\n \"text\": \"George Hamilton Robinette\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=George+Hamilton+Robinette&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgMruhyMP5hzcLaEIFEatpTbCu8jln0IwloowvnNb9QsoKR39hk5KGsJhlpcyDxymTavyI7AcFFsYLjenfJa-f9tv0CH296bGxtreGcN8aiA0YZ3takCS1Uqq7pnedL3CpY1hVM7v8TzJPdU_c0lkl4QPLBGwdkcI5JuIjfB6mL83H0-C5-FbXpp_gged4Q-00B43Sd_xDr_ScZh8JfyK6ToHqp4irVTJuea9fUahKpMTntbBoKTq50hvcVl2ZOUyDjyHnFmLdS3JjxvkTBmW0-gvawyZ&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAHoECCsQAg\"\n },\n {\n \"text\": \"See more\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=joe+biden+great-grandparents&stick=H4sIAAAAAAAAAOPgE-LUz9U3MDRKrzDSUs8ot9JPzs_JSU0uyczP0y9IzS_ISbVKL0pNLFFIL0rMSylILErNK1nEKpOVn6qQlJmSmqcAltVFki0GACl-ijhVAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ44YBKAF6BAgrEAM\"\n }\n ],\n \"marriage_location\": \"New York, NY\",\n \"marriage_location_links\": [\n {\n \"text\": \"New York, NY\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=New+York&si=ACC90nzx_D3_zUKRnpAjmO0UBLNxnt7EyN4YYdru6U3bxLI-L1vhwciuTHTDerN_6A9Mag4Ax1n3X-zP0_QZjYVvvrpJ15Ktq4_1pqvgj5Xpqei9qJoPo_qejnOk72pQxO_HKknRkPql1r4TYoKbJM0oeVfdhnn_58a43Q9K7Ctns8OMb_-SITD6imX23QcSeJhXtmH7sjqA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQmxMoAHoECCoQAg\"\n }\n ],\n \"web_results\": [\n {\n \"snippet\": \"Joseph Robinette Biden Jr. is an American politician who has been the 46th and current president of the United States since 2021. A member of the Democratic Party, he served as the 47th vice president from 2009 to 2017 under President Barack Obama and represented Delaware in the U.S. Senate from 1973 to 2009.\",\n \"source\": \"Wikipedia\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\"\n },\n {\n \"title\": \"Edited works\",\n \"snippet\": \"Proceedings of the Senate Task Force on Economic Sanctions, Halting the Spread of HIV\/AIDS: Future Efforts in the U. S. Bilateral and Multilateral Response: Congressional Hearings, Anti-Terrorism Conventions: Committee on Foreign Relations, U. S. Senate, Executive Report, Dirty Bombs and Basement Nukes: The Terrorist Nuclear Threat - Congressional Hearing, The Threat of Bioterrorism and the Spread of Infectious Diseases: Congressional Hearing, U. S. Security Interests in Europe: Congressional Hearing, Strategies for Homeland Defense: A Compilation by the Committee Foreign Relations, United States Senate, Hearings to Examine Threats, Responses and Regional Considerations Surrounding Iraq: Congressional Hearings, Green Jobs: A Pathway to a Strong Middle Class, Examining the Theft of American Intellectual Property at Home and Abroad: Congressional Hearing, Reducing the Threat of Chemical and Biological Weapons: Congressional Hearing, The Administration's Missle Defense Program and the ABM Treaty: Congressional Hearing, Putin Administration's Policies Toward Non-Russian Regions of the Russian Federation, How Do We Promote Democratization, Poverty Alleviation, and Human Rights to Build a More Secure Future? Congressional Hearing\"\n },\n {\n \"title\": \"Age\",\n \"snippet\": \"81 years Nov 20, 1942\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=joe+biden+age&stick=H4sIAAAAAAAAAOPgE-LUz9U3MDRKrzDSEs1OttIvSM0vyEkFUkXF-XlWiempi1h5s_JTFZIyU1LzFIB8AMGaH2I0AAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ18AJegQIPRAB\"\n }\n ],\n \"profiles\": [\n {\n \"name\": \"Instagram\",\n \"link\": \"https:\/\/www.instagram.com\/potus\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72f54032021daa42b287c4a1aaa02e89e7bc44f088a3e6592f3.png\"\n },\n {\n \"name\": \"X (Twitter)\",\n \"link\": \"https:\/\/twitter.com\/JoeBiden\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72f54032021daa42b286cc2bfb7e8859a5bc5e3eb5e73f5f75f.png\"\n },\n {\n \"name\": \"YouTube\",\n \"link\": \"https:\/\/www.youtube.com\/joebiden\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72f54032021daa42b28f1d8a13206f8677a394413172e958b4e.png\"\n },\n {\n \"name\": \"Facebook\",\n \"link\": \"https:\/\/www.facebook.com\/joebiden\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72f54032021daa42b2843eafc655c93486be210b0f3168da841.png\"\n },\n {\n \"name\": \"TikTok\",\n \"link\": \"https:\/\/www.tiktok.com\/@bidenhq\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/f4afd08ef7d734dfde462b72c068d72f54032021daa42b28deedbe75b7f5cd0a310641b424dc5a3d.png\"\n }\n ]\n },\n \"related_questions\": [\n {\n \"question\": \"Who is the current president of US A?\",\n \"snippet\": \"President Joe Biden in the Oval Office.\",\n \"title\": \"Joe Biden: The President | The White House\",\n \"link\": \"https:\/\/www.whitehouse.gov\/administration\/president-biden\/#:~:text=President%20Joe%20Biden%20in%20the%20Oval%20Office.\",\n \"displayed_link\": \"https:\/\/www.whitehouse.gov \u203a administration \u203a presiden...\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyBpcyB0aGUgY3VycmVudCBwcmVzaWRlbnQgb2YgVVMgQT8iLCJsayI6ImM1TlNLY19JVjhnc1ZpakpTRlZJTGkwcVNzMHJVU2dvU2kzT1RBR3g4dE1VU29zVkVnRSIsImJzIjoiYy1NSzRsSU56OGhYeUN4V0tNbElWVWd1TFNwS3pTdFJLQ2hLTGM1TUFiSHkweFJDZ3hVYzdTWDJteG1wU2FtVUUxQmJXcXlReU9YRHBRUXlzendSb3JBeXZ6UXZQYlc0QkdRUVhMRzl4QkV0STJVcHhYSnNDb0dtd0JWeTJYQkpRVjJZVjVxYmxGcWtZSWhzU29lMWtiU1VaRGt1QlZ3V1hCSklfbE5HMGZzcDFVaFNTcndjdTdRQUl3QSIsImlkIjoiZmNfMSJ9\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyBpcyB0aGUgY3VycmVudCBwcmVzaWRlbnQgb2YgVVMgQT8iLCJsayI6ImM1TlNLY19JVjhnc1ZpakpTRlZJTGkwcVNzMHJVU2dvU2kzT1RBR3g4dE1VU29zVkVnRSIsImJzIjoiYy1NSzRsSU56OGhYeUN4V0tNbElWVWd1TFNwS3pTdFJLQ2hLTGM1TUFiSHkweFJDZ3hVYzdTWDJteG1wU2FtVUUxQmJXcXlReU9YRHBRUXlzendSb3JBeXZ6UXZQYlc0QkdRUVhMRzl4QkV0STJVcHhYSnNDb0dtd0JWeTJYQkpRVjJZVjVxYmxGcWtZSWhzU29lMWtiU1VaRGt1QlZ3V1hCSklfbE5HMGZzcDFVaFNTcndjdTdRQUl3QSIsImlkIjoiZmNfMSJ9\"\n },\n {\n \"question\": \"Who was the youngest US president?\",\n \"snippet\": \"Age of presidents The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley. The oldest person inaugurated president was Joe Biden, at the age of 78.\",\n \"title\": \"List of presidents of the United States by age - Wikipedia\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age#:~:text=Age%20of%20presidents,-Age%20of%20U.S.&text=The%20youngest%20person%20to%20become,at%20the%20age%20of%2078.\",\n \"displayed_link\": \"https:\/\/en.wikipedia.org \u203a wiki \u203a List_of_presidents_of_t...\",\n \"source_logo\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/ad7ee8145e566f1f362fbd875d8257e7aa6eaf65d1ed8283f19c117342d6d7cf.png\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyB3YXMgdGhlIHlvdW5nZXN0IFVTIHByZXNpZGVudD8iLCJsayI6IkdpRjNhRzhnZDJGeklIUm9aU0I1YjNWdVoyVnpkQ0IxY3lCd2NtVnphV1JsYm5RIiwiYnMiOiJjLU1LNGxJTno4aFh5Q3hXS01sSVZVZ3VMU3BLelN0UktDaEtMYzVNQWJIeTB4UkNneFVjN1NYMm14bXBTYW1VRTFCYldxeVF5T1hEcFFReXN6d1JvckF5dnpRdlBiVzRCR1FRWExHOXhCRXRJMlVweFhKc0NvR213QlZ5MlhCSlFWMllWNXFibEZxa1lJaHNTb2Uxa2JTVVpEa3VCVndXWEJKSV9sTkcwZnNwMVVoU1Nyd2N1N1FBSXdBIiwiaWQiOiJmY18xIn0=\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyB3YXMgdGhlIHlvdW5nZXN0IFVTIHByZXNpZGVudD8iLCJsayI6IkdpRjNhRzhnZDJGeklIUm9aU0I1YjNWdVoyVnpkQ0IxY3lCd2NtVnphV1JsYm5RIiwiYnMiOiJjLU1LNGxJTno4aFh5Q3hXS01sSVZVZ3VMU3BLelN0UktDaEtMYzVNQWJIeTB4UkNneFVjN1NYMm14bXBTYW1VRTFCYldxeVF5T1hEcFFReXN6d1JvckF5dnpRdlBiVzRCR1FRWExHOXhCRXRJMlVweFhKc0NvR213QlZ5MlhCSlFWMllWNXFibEZxa1lJaHNTb2Uxa2JTVVpEa3VCVndXWEJKSV9sTkcwZnNwMVVoU1Nyd2N1N1FBSXdBIiwiaWQiOiJmY18xIn0%3D\"\n },\n {\n \"question\": \"Who is number 1 president?\",\n \"snippet\": \"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\n \"title\": \"Historical rankings of presidents of the United States - Wikipedia\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Historical_rankings_of_presidents_of_the_United_States#:~:text=Abraham%20Lincoln%20has%20taken%20the,bottom%20of%20all%20four%20surveys.\",\n \"displayed_link\": \"https:\/\/en.wikipedia.org \u203a wiki \u203a Historical_rankings_of_...\",\n \"source_logo\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/ad7ee8145e566f1f362fbd875d8257e73c43d2b0f14d2e591b248ca6ebe30d32.png\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyBpcyBudW1iZXIgMSBwcmVzaWRlbnQ\/IiwibGsiOiJHaGwzYUc4Z2FYTWdiblZ0WW1WeUlERWdjSEpsYzJsa1pXNTAiLCJicyI6ImMtTUs0bElOejhoWHlDeFdLTWxJVlVndUxTcEt6U3RSS0NoS0xjNU1BYkh5MHhSQ2d4VWM3U1gybXhtcFNhbVVFMUJiV3F5UXlPWERwUVF5c3p3Um9yQXl2elF2UGJXNEJHUVFYTEc5eEJFdEkyVXB4WEpzQ29HbXdCVnkyWEJKUVYyWVY1cWJsRnFrWUloc1NvZTFrYlNVWkRrdUJWd1dYQkpJX2xORzBmc3AxVWhTU3J3Y3U3UUFJd0EiLCJpZCI6ImZjXzEifQ==\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyBpcyBudW1iZXIgMSBwcmVzaWRlbnQ%2FIiwibGsiOiJHaGwzYUc4Z2FYTWdiblZ0WW1WeUlERWdjSEpsYzJsa1pXNTAiLCJicyI6ImMtTUs0bElOejhoWHlDeFdLTWxJVlVndUxTcEt6U3RSS0NoS0xjNU1BYkh5MHhSQ2d4VWM3U1gybXhtcFNhbVVFMUJiV3F5UXlPWERwUVF5c3p3Um9yQXl2elF2UGJXNEJHUVFYTEc5eEJFdEkyVXB4WEpzQ29HbXdCVnkyWEJKUVYyWVY1cWJsRnFrWUloc1NvZTFrYlNVWkRrdUJWd1dYQkpJX2xORzBmc3AxVWhTU3J3Y3U3UUFJd0EiLCJpZCI6ImZjXzEifQ%3D%3D\"\n },\n {\n \"question\": \"Who is the #1 president?\",\n \"snippet\": \"George Washington (February 22, 1732 \u2013 December 14, 1799) was an American Founding Father, politician, military officer, and farmer who served as the first president of the United States from 1789 to 1797.\",\n \"title\": \"George Washington - Wikipedia\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/George_Washington#:~:text=George%20Washington%20(February%2022%2C%201732,States%20from%201789%20to%201797.\",\n \"displayed_link\": \"https:\/\/en.wikipedia.org \u203a wiki \u203a George_Washington\",\n \"source_logo\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/ad7ee8145e566f1f362fbd875d8257e7cbc15e4c5530eec7b29f28251e20a863.png\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyBpcyB0aGUgIzEgcHJlc2lkZW50PyIsImxrIjoiR2hkM2FHOGdhWE1nZEdobElDTXhJSEJ5WlhOcFpHVnVkQSIsImJzIjoiYy1NSzRsSU56OGhYeUN4V0tNbElWVWd1TFNwS3pTdFJLQ2hLTGM1TUFiSHkweFJDZ3hVYzdTWDJteG1wU2FtVUUxQmJXcXlReU9YRHBRUXlzendSb3JBeXZ6UXZQYlc0QkdRUVhMRzl4QkV0STJVcHhYSnNDb0dtd0JWeTJYQkpRVjJZVjVxYmxGcWtZSWhzU29lMWtiU1VaRGt1QlZ3V1hCSklfbE5HMGZzcDFVaFNTcndjdTdRQUl3QSIsImlkIjoiZmNfMSJ9\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T09FVk5kWEV0TFhsSGNGTnJNMEpWVTBGUU1VcENhM2xCTURoNlpWbDJUbEZIU1VGdGMzWllXbGsxYWtGaE5qRnRUM2RMWkhSQlNYcHhkSFpHUjJ4MWFYSlJWbUV6RWhkVkxYcGZXbll6TmtaaVpWbDNZbXRRZEVwbWNtbEJPQm9pUVVaWWNrVmpjRUp3V0hkNFNGZFZaSEEyYmtKRE5sZFpPV2MyVEVaUmNtWjBVUSIsImZjdiI6IjMiLCJlaSI6IlUtel9adjM2RmJlWXdia1B0SmZyaUE4IiwicWMiOiJDaVpqZFhKeVpXNTBJSEJ5WlhOcFpHVnVkQ0J2WmlCMGFHVWdkVzVwZEdWa0lITjBZWFJsY3hBQVlBRjlQZndzUHciLCJxdWVzdGlvbiI6IldobyBpcyB0aGUgIzEgcHJlc2lkZW50PyIsImxrIjoiR2hkM2FHOGdhWE1nZEdobElDTXhJSEJ5WlhOcFpHVnVkQSIsImJzIjoiYy1NSzRsSU56OGhYeUN4V0tNbElWVWd1TFNwS3pTdFJLQ2hLTGM1TUFiSHkweFJDZ3hVYzdTWDJteG1wU2FtVUUxQmJXcXlReU9YRHBRUXlzendSb3JBeXZ6UXZQYlc0QkdRUVhMRzl4QkV0STJVcHhYSnNDb0dtd0JWeTJYQkpRVjJZVjVxYmxGcWtZSWhzU29lMWtiU1VaRGt1QlZ3V1hCSklfbE5HMGZzcDFVaFNTcndjdTdRQUl3QSIsImlkIjoiZmNfMSJ9\"\n }\n ],\n \"answer_box\": {\n \"type\": \"organic_result\",\n \"title\": \"United States\/President\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Joe+Biden&stick=H4sIAAAAAAAAAONgVuLUz9U3MDRKrzB6xGjCLfDyxz1hKe1Ja05eY1Tl4grOyC93zSvJLKkUEudig7J4pbi5ELp4FrFyeuWnKjhlpqTmAQDFEJYBUAAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQzIcDKAB6BAg2EAE\",\n \"answer\": \"Joe Biden\",\n \"thumbnail\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf98cc81ed2a4d632003eaccf0b0c92b22d.jpeg\",\n \"people_also_search_for\": [\n {\n \"name\": \"Donald Trump\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c56ef55e461bde4fbc2daacf7c51f9cf404.jpeg\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Donald+Trump&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQAjOTC0ssDbT4AlKLivPzgjNTUssTK4sXsfK45Ocl5qQohBSV5hYAAPh9gPk3AAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEAQ\"\n },\n {\n \"name\": \"Melania Trump\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c56e2f1dbe7249ecefc882f9968ee8d4f83.jpeg\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Melania+Trump&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQAjNNMtLyyrT4AlKLivPzgjNTUssTK4sXsfL6puYk5mUmKoQUleYWAAA_LcJBOAAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEAY\"\n },\n {\n \"name\": \"Kamala Harris\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c56cd3bc7dcbb3bd12cfa70b1d5084adee6.png\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Kamala+Harris&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQAjMtiosqjbT4AlKLivPzgjNTUssTK4sXsfJ6J-Ym5iQqeCQWFWUWAwBayCUZOAAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEAg\"\n },\n {\n \"name\": \"Pete Buttigieg\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c565fa964a151e814f71bb6ce3e112e9262.jpeg\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Pete+Buttigieg&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQ4gIxMzIK043NtfgCUouK8_OCM1NSyxMrixexAgVKUhWcSktKMtMzU9MBaxYWRToAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEAo\"\n },\n {\n \"name\": \"Jill Biden\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c569caed0675e403023bfdaf6b2f55d6c60.jpeg\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Jill+Biden&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQ4gIxTbJSLMwztPgCUouK8_OCM1NSyxMrixexcnll5uQoOAH5eQBKFOGZNgAAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEAw\"\n },\n {\n \"name\": \"Barack Obama\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c56030aeb97d1b390967bb8364b883c467d.jpeg\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Barack+Obama&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQAjONcrNyi7T4AlKLivPzgjNTUssTK4sXsfI4JRYlJmcr-Ccl5iYCANsrw7U3AAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEA4\"\n },\n {\n \"name\": \"Neilia Hunter Biden\",\n \"image\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/fea807698ab0aaf9540daf91300be90e2ac8c9a7730921f8ffd3c5af42a14c564a60ca9f61937e99a2b1eeeb72eeceb2.jpeg\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Neilia+Hunter&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQ4gIxTTKqynMNtfgCUouK8_OCM1NSyxMrixex8vqlZuZkJip4lOaVpBYBAAOdVWM5AAAA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQxA16BAgzEBA\"\n }\n ]\n },\n \"organic_results\": [\n {\n \"position\": 1,\n \"title\": \"Joe Biden: The President\",\n \"link\": \"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/www.whitehouse.gov\/administration\/president-biden\/&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECBcQAQ\",\n \"displayed_link\": \"https:\/\/www.whitehouse.gov \u203a administration \u203a presiden...\",\n \"thumbnail\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d809123675ce52671276e6ec6771c150bee72.jpeg\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d80910f9b173b72e9eab1601615c1605938de.png\",\n \"snippet\": \"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"The White House (.gov)\"\n },\n {\n \"position\": 2,\n \"title\": \"President of the United States\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECE0QAQ\",\n \"displayed_link\": \"https:\/\/en.wikipedia.org \u203a wiki \u203a President_of_the_Unit...\",\n \"thumbnail\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d8091fc3a8227d2a2bfb02dc42ab2d1dbfcbe.jpeg\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d809158e8117e92dd1333a25421ce047e75a9.png\",\n \"snippet\": \"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\n \"snippet_highlighted_words\": [\n \"president of the United States\",\n \"United States\",\n \"president\"\n ],\n \"sitelinks\": {\n \"inline\": [\n {\n \"title\": \"List\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"\n },\n {\n \"title\": \"Powers of the president\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"\n },\n {\n \"title\": \"Executive Office\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"\n },\n {\n \"title\": \"Seal of the president\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Seal_of_the_president_of_the_United_States\"\n }\n ]\n },\n \"source\": \"Wikipedia\"\n },\n {\n \"position\": 3,\n \"title\": \"President of the United States\",\n \"link\": \"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECEsQAQ\",\n \"displayed_link\": \"https:\/\/usun.usmission.gov \u203a Our Leaders\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d8091121c5487a8779ef9f7acea7b19505bc8.png\",\n \"snippet\": \"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"United States Mission to the United Nations (.gov)\"\n },\n {\n \"position\": 4,\n \"title\": \"President Joe Biden (@potus)\",\n \"link\": \"https:\/\/www.instagram.com\/potus\/?hl=en\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/www.instagram.com\/potus\/%3Fhl%3Den&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECEoQAQ\",\n \"displayed_link\": \"19.1M+ followers\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d8091ad45f5dadf4a42654be2bc1d744225aa.png\",\n \"snippet\": \"19M Followers, 5 Following, 4403 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus, proud dad and ...\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"Instagram \u00b7 potus\"\n },\n {\n \"position\": 5,\n \"title\": \"Presidents, vice presidents, and first ladies\",\n \"link\": \"https:\/\/www.usa.gov\/presidents\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/www.usa.gov\/presidents&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECFwQAQ\",\n \"displayed_link\": \"https:\/\/www.usa.gov \u203a ... \u203a U.S. facts and figures\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d80918c36147c96afe6855fcd63f1ec9e9f13.png\",\n \"snippet\": \"Learn about the duties of president, vice president, and first lady of the United States. Find out how to contact and learn more about current and past leaders.\",\n \"snippet_highlighted_words\": [\n \"president\",\n \"president\",\n \"United States\",\n \"current\"\n ],\n \"source\": \"USA.gov\"\n },\n {\n \"position\": 6,\n \"title\": \"The Executive Branch\",\n \"link\": \"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECEkQAQ\",\n \"displayed_link\": \"https:\/\/www.whitehouse.gov \u203a ... \u203a Our Government\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d8091d2def812f73ab4a461c4ccb1a6f18154.png\",\n \"snippet\": \"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President\",\n \"United States\"\n ],\n \"source\": \"The White House (.gov)\"\n },\n {\n \"position\": 7,\n \"title\": \"President Joe Biden\",\n \"link\": \"https:\/\/www.facebook.com\/POTUS\/\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/www.facebook.com\/POTUS\/&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECEwQAQ\",\n \"displayed_link\": \"12M+ followers\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d8091707d8df4bff108102635656d2baac128.png\",\n \"snippet\": \"President Joe Biden. 10334178 likes \u00b7 175010 talking about this. 46th President of the United States, husband to @FLOTUS, proud father and pop. Text...\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"Facebook \u00b7 President Joe Biden\"\n },\n {\n \"position\": 8,\n \"title\": \"Joe Biden\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/en.wikipedia.org\/wiki\/Joe_Biden&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECEYQAQ\",\n \"displayed_link\": \"https:\/\/en.wikipedia.org \u203a wiki \u203a Joe_Biden\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d809144cacfc2f26d14a73b65e5227ec342ec.png\",\n \"snippet\": \"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\n \"snippet_highlighted_words\": [\n \"current president of the United States\"\n ],\n \"sitelinks\": {\n \"inline\": [\n {\n \"title\": \"Political positions\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Political_positions_of_Joe_Biden\"\n },\n {\n \"title\": \"Electoral history\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Electoral_history_of_Joe_Biden\"\n },\n {\n \"title\": \"2008 Presidential Campaign\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden_2008_presidential_campaign\"\n },\n {\n \"title\": \"Class president\",\n \"link\": \"https:\/\/en.wikipedia.org\/wiki\/Class_president\"\n }\n ]\n },\n \"source\": \"Wikipedia\"\n },\n {\n \"position\": 9,\n \"title\": \"Joe Biden's Path to the United States Presidency\",\n \"link\": \"https:\/\/www.britannica.com\/video\/226766\/who-is-President-Joe-Biden\",\n \"displayed_link\": \"https:\/\/www.britannica.com \u203a who-is-President-Joe-Biden\",\n \"thumbnail\": \"https:\/\/encrypted-tbn0.gstatic.com\/images?q=tbn:ANd9GcTBA5esZeOMzKNwtbAdAAGDKnIzwZu8OaAUEdHwYIqlx8lK&s\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d8091086f5f0710fc4ac6a767cc31b14513b3.png\",\n \"date\": \"Dec 22, 2010\",\n \"snippet\": \"Joe Biden is an American politician and the 46th president of the United States. He previously served as vice president under President Barack Obama.\",\n \"duration\": \"2:21\",\n \"rich_snippet\": {\n \"top\": {\n \"extensions\": [\n \"Britannica\",\n \"Dec 22, 2010\"\n ],\n \"detected_extensions\": {\n \"dec\": 22\n }\n }\n },\n \"video_link\": \"https:\/\/encrypted-vtbn0.gstatic.com\/video?q=tbn:ANd9GcROuAdejw5zIuel829Yg2a-WcElSEWdOPVjSg\",\n \"source\": \"Britannica\"\n },\n {\n \"position\": 10,\n \"title\": \"President of the United States\",\n \"link\": \"https:\/\/ballotpedia.org\/President_of_the_United_States\",\n \"redirect_link\": \"https:\/\/www.google.com\/url?sa=t&source=web&rct=j&opi=89978449&url=https:\/\/ballotpedia.org\/President_of_the_United_States&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQFnoECEcQAQ\",\n \"displayed_link\": \"https:\/\/ballotpedia.org \u203a President_of_the_United_States\",\n \"favicon\": \"https:\/\/serpapi.com\/searches\/66ffec51a47167fa26c5db81\/images\/0bfbecbf14e47c61b3258776da1d80916b88fa1cdd7b20092d43d06af230b264.png\",\n \"snippet\": \"Article II of the U.S. Constitution laid out the requirements and roles of the president. The current president is Joe Biden (D). Election requirements.\",\n \"snippet_highlighted_words\": [\n \"U.S.\",\n \"president\",\n \"current president\"\n ],\n \"source\": \"Ballotpedia\"\n }\n ],\n \"related_searches\": [\n {\n \"block_position\": 1,\n \"query\": \"Who is the Vice President of the United States\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Who+is+the+Vice+President+of+the+United+States&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhsEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Who+is+the+Vice+President+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Who is the 46th president\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Who+is+the+46th+president&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhrEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Who+is+the+46th+president\"\n },\n {\n \"block_position\": 1,\n \"query\": \"All Presidents in order\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=All+Presidents+in+order&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhqEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=All+Presidents+in+order\"\n },\n {\n \"block_position\": 1,\n \"query\": \"48th president of the United States\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=48th+president+of+the+United+States&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhnEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=48th+president+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Who is the New president of the United States\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Who+is+the+New+president+of+the+United+States&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhoEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Who+is+the+New+president+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Joe Biden age\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=Joe+Biden+age&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhpEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Joe+Biden+age\"\n },\n {\n \"block_position\": 1,\n \"query\": \"47th President of the United States\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=47th+President+of+the+United+States&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhmEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=47th+President+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"First president of USA\",\n \"link\": \"https:\/\/www.google.com\/search?sca_esv=36a5aede6ef96498&q=First+president+of+USA&sa=X&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ1QJ6BAhlEAE\",\n \"serpapi_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=First+president+of+USA\"\n }\n ],\n \"pagination\": {\n \"current\": 1,\n \"next\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=10&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8NMDegQIYhAW\",\n \"other_pages\": {\n \"2\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=10&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAE\",\n \"3\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=20&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAG\",\n \"4\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=30&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAI\",\n \"5\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=40&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAK\",\n \"6\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=50&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAM\",\n \"7\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=60&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAO\",\n \"8\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=70&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAQ\",\n \"9\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=80&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAS\",\n \"10\": \"https:\/\/www.google.com\/search?q=current+president+of+the+United+States&sca_esv=36a5aede6ef96498&ei=U-z_Zv36FbeYwbkPtJfriA8&start=90&sa=N&sstk=Aagrsuh2J88a0tO64r05qPt1czsFtLr9Gs-uZvWWlcNuJR1tUIWWrRk8sGPFipniZSWuihkhGvULTiNLp6j6Oj0L367Oks-NBYyaxg&ved=2ahUKEwi98Kue6fSIAxU3TDABHbTLGvEQ8tMDegQIYhAU\"\n }\n },\n \"serpapi_pagination\": {\n \"current\": 1,\n \"next_link\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=10\",\n \"next\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=10\",\n \"other_pages\": {\n \"2\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=10\",\n \"3\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=20\",\n \"4\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=30\",\n \"5\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=40\",\n \"6\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=50\",\n \"7\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=60\",\n \"8\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=70\",\n \"9\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=80\",\n \"10\": \"https:\/\/serpapi.com\/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=90\"\n }\n }\n}" + "statusCode": 200, + "headers": { + "Date": "Sat, 26 Oct 2024 00:25:14 GMT", + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "44092", + "Connection": "keep-alive", + "x-frame-options": "SAMEORIGIN", + "x-xss-protection": "1; mode=block" + }, + "data": "{\n \"search_metadata\": {\n \"id\": \"671c36e9c4bcf5bca3e80727\",\n \"status\": \"Success\",\n \"json_endpoint\": \"https://serpapi.com/searches/994a79c8b3a78975/671c36e9c4bcf5bca3e80727.json\",\n \"created_at\": \"2024-10-26 00:25:13 UTC\",\n \"processed_at\": \"2024-10-26 00:25:13 UTC\",\n \"google_url\": \"https://www.google.com/search?q=current+president+of+the+United+States&oq=current+president+of+the+United+States&num=10&sourceid=chrome&ie=UTF-8\",\n \"raw_html_file\": \"https://serpapi.com/searches/994a79c8b3a78975/671c36e9c4bcf5bca3e80727.html\",\n \"total_time_taken\": 1.22\n },\n \"search_parameters\": {\n \"engine\": \"google\",\n \"q\": \"current president of the United States\",\n \"google_domain\": \"google.com\",\n \"num\": \"10\",\n \"device\": \"desktop\"\n },\n \"search_information\": {\n \"query_displayed\": \"current president of the United States\",\n \"total_results\": 926000000,\n \"time_taken_displayed\": 0.4,\n \"organic_results_state\": \"Results for exact spelling\"\n },\n \"knowledge_graph\": {\n \"title\": \"Joe Biden\",\n \"type\": \"46th U.S. President\",\n \"entity_type\": \"people, athlete\",\n \"kgmid\": \"/m/012gx2\",\n \"knowledge_graph_search_link\": \"https://www.google.com/search?kgmid=/m/012gx2&hl=en-US&q=Joe+Biden\",\n \"serpapi_knowledge_graph_search_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&hl=en-US&kgmid=%2Fm%2F012gx2&num=10&q=Joe+Biden\",\n \"header_images\": [\n {\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72ff721367a6a963c1c33219bfea7e2189bb33f1d4aaa5d5d5d.webp\"\n },\n {\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72ff721367a6a963c1c022521bc1dc5865de85622dc2659e003.webp\"\n },\n {\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72ff721367a6a963c1c53016c9f19cd71f8e72ab813f5ca518b.webp\"\n }\n ],\n \"website\": \"https://www.whitehouse.gov/administration/president-biden/\",\n \"born\": \"November 20, 1942 (age 81 years), Scranton, PA\",\n \"born_links\": [\n {\n \"text\": \"Scranton, PA\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Scranton&si=ACC90nyvvWro6QmnyY1IfSdgk5wwjB1r8BGd_IWRjXqmKPQqm2EZLCY33SRJUwAbMyILe9ZYvWR48da73TEAYEa-DWofQ_zzM8YXtrrAuKdRdz8_jwERmQ54VngswC6NGdVm-Uw7JUkpoo9GjfXwDkQBXLO0pQ5R9L8mVAd4zGJqjD9EyBowzC_A1wzmYHlyoqdIwojtRD4S&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAHoECDIQAg\"\n }\n ],\n \"organizations_founded\": \"United States Department of Defense China Task Force\",\n \"organizations_founded_links\": [\n {\n \"text\": \"United States Department of Defense China Task Force\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=United+States+Department+of+Defense+China+Task+Force&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgE1g6nlV1psrsA6W4s4OrKxpg_xQ7PHcADkxSX4GwDRYKYLgPz-0tSPsvrY_Dfc3LU8IWO5gOEKWpnN-kQLDikUYyAc2w_nYLwFXC1q5zk_-yNZUDNcT2fp9NWpUng12JeSndTELHmXP2n34vehcNTydlSasILmb6mTRqAdsbdNlrt-ZePnRCBF1iEaEtYnGt_vvUFSkkM_d9Rmuf3vZnZzBXWwHy07j7gWRu-R2ACqA-bUj0vaporPDbMXGttRr_mYS7Ij8ly-O78dfB1Ok8QX79jYhoActb0qKcBMNAtnL8Dk_AkKqdoXpc8fkn1XgFxEgxl0%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAHoECDEQAg\"\n },\n {\n \"text\": \"See more\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=joe+biden+organizations+founded&stick=H4sIAAAAAAAAAOPgE-LUz9U3MDRKrzDSsswot9JPzs_JSU0uyczP088vSk_My6xKBHHi0_JL81JSi4qtIIwUBWTZRazyWfmpCkmZKal5KBLFClDlAN6zbvNqAAAA&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q44YBKAF6BAgxEAM\"\n }\n ],\n \"grandchildren\": \"Navy Joan Roberts, Finnegan Biden, Maisy Biden, Natalie Biden, Naomi Biden, Robert Biden II\",\n \"grandchildren_links\": [\n {\n \"text\": \"Navy Joan Roberts\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Navy+Joan+Roberts&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgGBO1k0Fw9J7eiXIAluOC-h3x9kWnCEJLYw0la7WK3Omp0d2JsScWW1rQ8_czyUaObhJJ0A_Jn5HfPbr0fCcfno6x_j1bMCZqQO1y_Jd11erbDSEEFYImHvmpum7-D-aa6A_aSUDCVinnG6yFGURviXPRELfldPI7m1GsNkmX0lHQfiWFDw8GzcYQyT_vUrof8-zLFqxUPdWlsnky-eGa_4x30pTZwZsPkdqkWMzPNRR84_1xUrRMvuBL9Ah-EDa7gsVvg0%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAHoECDAQAg\"\n },\n {\n \"text\": \"Finnegan Biden\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Finnegan+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQauVu4G0hIQv7fc43FGsjhKZTj_XUbYWBwbsWuegUqJCbp21rtbRxSZB-CZ61IZpFGStoWH1WtSZfgBWTqBxZ1EN2MdUzCeNseI7lv_h85TY5-WL_LjYQSkdLOesnmfUCWEB96Ro53WQEzvUaa-fLt3V4jj9NjD4BNgWl9AxuYWv7awPnEGC7KlLgX1jHXIOMHnJc2T_8KvENhCN_UGb7z-dV_-6lys7vbLSRjpQbuNlixaCYg%3D%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAXoECDAQAw\"\n },\n {\n \"text\": \"Maisy Biden\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Maisy+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQUcR8mmtY-_S5_nyD-HJlhyanoVc___KFVbmfkFHDuBodfjyQW3Zb5nV0OXlHbmmrJfwE9n2Y-uNjTuygS7rl1VwBSenl4Rh0A1MeWwvacWXjeZPKFCe6AUeMf-5v6Y8Dd0fJzbdkXZy_38tpvivSyvIrWs5ANyFnpjvdyxDjC3AmGHrqqbAncI0YxpsMwQL2qC_djqi9AIRq7B6uY7O6TQf8fAVp1CrVAhbIGy7ycLbjyMpMw%3D%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAnoECDAQBA\"\n },\n {\n \"text\": \"Natalie Biden\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Natalie+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQeHc8_rzepqdBr3oHPWyn600qOsJHsKvQx4I2FIdKctMlaBfqNUTar5Y1BbcrM8jQv1G0257jwiJQzw5RK2u5qq6fP3ZXJP7gkPyeliAEMrOXISWutlszhADGKQfqsGd7Gq166w2f6UdHhazPDw5L0I43Uvk0oOmDNLHB5WY8HCm7AML__j7mCKwnZWi4_K2Jlp0gD3t0wCDnp-xNxUE__QFK_UrD9HTWfq_u5EIVwxx4Gfw2w%3D%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoA3oECDAQBQ\"\n },\n {\n \"text\": \"Naomi Biden\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Naomi+Biden&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQUCnqIBK-OChIi9DYVRUllksDLLsauXRg6UAPslNKKJV5A1Nlmur75Xh7A2L_FQvKE7HjKvg6qADyRybOZZE1y6CxbX83c7ejYOvWO4SuYqouenZkKCv05Men-Z-fb_kdHSx9Mw8HiyY7vkIKGBvYb28d8TR--R8hcU0oMcRMysKgC0r7Uo7BCHqmgRxWJ5R7wo8ncbrtMzR8z754Hg3h7z2qP90yf_YEkoc2pKPWY50nsEZlQ%3D%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoBHoECDAQBg\"\n },\n {\n \"text\": \"Robert Biden II\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Robert+Biden+II&si=ACC90ny8E30vD16OoPAAI4cStfcliGy35W8UAhb0TsHNc_ISQREBJUEQ3-xrOz-cJiODYcOGvbRLeGq7VeV_FiFRquSupTOTNogbd_iqTwfJ-szApTTtfrIf7wbXHZhStwAtp5H8W7qxLG24SIWP_HwN35iwmMFNX8o6XxmJHbYAAOtGlCmZ1QfgD0o43kqV3NO9xjz87lBmkjL5lj0FUxzUVhxF_B3zVROgdHvWUXnRoLUJaIScCwhtiH60zsPEI2s5GfmGMVHeGi42bSgWIWjf75USq57MOg%3D%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoBXoECDAQBw\"\n }\n ],\n \"grandparents\": \"Mary Elizabeth Robinette Biden, Ambrose J. Finnegan, Joseph H. Biden, Geraldine C. Blewitt\",\n \"grandparents_links\": [\n {\n \"text\": \"Mary Elizabeth Robinette Biden\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Mary+Elizabeth+Robinette+Biden&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgBHJLIINkT9aYXgbtFPvgQd-kcQhwFRMti1rgpedDgJKsFFmZIBJtpsK-sYE2Ypi9dkqq-y1YEcgstxi8-N-JWFzPrfO3ROmGxU_42LMKOYTabKn84QGP3BNMA_fJxl9ffDCrf5yx_xa066sXUtXCwcbdah0krNAOvCST4CEgMvKZ5iT3a6a4EScH8o8x005cnbzQgi1IxBq3x619kFxh37tBxcNwobfpMHSeL2n3xjVGlbnjGyVh85H3Fr06k15-jKc-iKx3qfuvDtN6EzzfQyJel-L&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAHoECC4QAg\"\n },\n {\n \"text\": \"Ambrose J. Finnegan\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Ambrose+J.+Finnegan&si=ACC90nyByJNAHfkzzi7l4JA4fcQKXOYDCI7plJH6uVksGWg6XlUrE1PCCLclo11PpDvum35_ZMMXAUBFFECIbLX_us44wGRV1HqgapndcDM7WJwspW4isSVTTukZ21DYgWLvNIAZS0ygJ_YXzlk35rbYjSCYaVtwMVMC4nOzeY9E3jqW9oB_3cAnNAeyTDOYmgmUhUEp2LLXTGmIyZnBrNYh6Q7uTD0oSuqvQVXn4QziiBqKdK9i6LYxhXAr-RudIQHSgbYfiKf5SiL_PztJZCFpo_a1MV0obPIHixTCTPqSCEHGjNEbpA8%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAXoECC4QAw\"\n },\n {\n \"text\": \"Joseph H. Biden\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Joseph+H.+Biden&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgHbh__85qw2jT4PRA4VjIRAIQz1HP1CGkEXFqJAGVGnsWpApd7QnfucVtTnXdpXaxIclEZb2O8KTykrxITGnkKo9mxwKxNg09vKJQiWbz32dv2_GSqRxDAB0cn3Iq2lesx0jLEl8AGMjk5Alyt5Y95QOUnViTHc--51cqqSz4cxWoVwGNIpsoUj3kg60vPZOxGK8zqWeOlNDPbAmyaOyI5qQfgYiKVmRjozLhtYOPTWOjOUSBSnvVXmhHBtEtl3hSbPGsc4%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAnoECC4QBA\"\n },\n {\n \"text\": \"Geraldine C. Blewitt\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Geraldine+C.+Blewitt&si=ACC90nyByJNAHfkzzi7l4JA4fcQKXOYDCI7plJH6uVksGWg6XjCvpGreiIu5eQP4ovnI7FAryP2eZx77OnNzOoDThI4LaSMvhXSz-mFsaRUyIOcLrbOx234IktXZbSxPC5QWpQ-Cti1A5w4PS3jnPzU1kJX61vHhntzGr-ceNxcT3mXAihg0FYSmyLx3yFicxpeWeYwrjSBh06Om5VmIMfAd5tDJ7PClobwz02Mr0FwK5cC1RXPIkX-Yii5DD86Pivyc5Hg046eOeCtNMrNu7cSe9kfhIhz_-yYEnfNGwGVOKTgMvUjflFI%3D&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoA3oECC4QBQ\"\n }\n ],\n \"great_grandparents\": \"George Hamilton Robinette\",\n \"great_grandparents_links\": [\n {\n \"text\": \"George Hamilton Robinette\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=George+Hamilton+Robinette&si=ACC90nwLLwns5sISZcdzuISy7t-NHozt8Cbt6G3WNQfC9ekAgMruhyMP5hzcLaEIFEatpTbCu8jln0IwloowvnNb9QsoKR39hk5KGsJhlpcyDxymTavyI7AcFFsYLjenfJa-f9tv0CH296bGxtreGcN8aiA0YZ3takCS1Uqq7pnedL3CpY1hVM7v8TzJPdU_c0lkl4QPLBGwdkcI5JuIjfB6mL83H0-C5-FbXpp_gged4Q-00B43Sd_xDr_ScZh8JfyK6ToHqp4irVTJuea9fUahKpMTntbBoKTq50hvcVl2ZOUyDjyHnFmLdS3JjxvkTBmW0-gvawyZ&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAHoECDMQAg\"\n },\n {\n \"text\": \"See more\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=joe+biden+great-grandparents&stick=H4sIAAAAAAAAAOPgE-LUz9U3MDRKrzDSUs8ot9JPzs_JSU0uyczP0y9IzS_ISbVKL0pNLFFIL0rMSylILErNK1nEKpOVn6qQlJmSmqcAltVFki0GACl-ijhVAAAA&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q44YBKAF6BAgzEAM\"\n }\n ],\n \"marriage_location\": \"New York, NY\",\n \"marriage_location_links\": [\n {\n \"text\": \"New York, NY\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=New+York&si=ACC90nzx_D3_zUKRnpAjmO0UBLNxnt7EyN4YYdru6U3bxLI-L1vhwciuTHTDerN_6A9Mag4Ax1n3X-zP0_QZjYVvvrpJ15Ktq4_1pqvgj5Xpqei9qJoPo_qejnOk72pQxO_HKknRkPql1r4TYoKbJM0oeVfdhnn_58a43Q9K7Ctns8OMb_-SITD6imX23QcSeJhXtmH7sjqA&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QmxMoAHoECC8QAg\"\n }\n ],\n \"web_results\": [\n {\n \"snippet\": \"Joseph Robinette Biden Jr. is an American politician who has been the 46th and current president of the United States since 2021. A member of the Democratic Party, he served as the 47th vice president from 2009 to 2017 under President Barack Obama and represented Delaware in the U.S. Senate from 1973 to 2009.\",\n \"source\": \"Wikipedia\",\n \"link\": \"https://en.wikipedia.org/wiki/Joe_Biden\"\n },\n {\n \"title\": \"Edited works\",\n \"snippet\": \"Proceedings of the Senate Task Force on Economic Sanctions, Halting the Spread of HIV/AIDS: Future Efforts in the U. S. Bilateral and Multilateral Response: Congressional Hearings, Anti-Terrorism Conventions: Committee on Foreign Relations, U. S. Senate, Executive Report, Dirty Bombs and Basement Nukes: The Terrorist Nuclear Threat - Congressional Hearing, The Threat of Bioterrorism and the Spread of Infectious Diseases: Congressional Hearing, U. S. Security Interests in Europe: Congressional Hearing, Strategies for Homeland Defense: A Compilation by the Committee Foreign Relations, United States Senate, Hearings to Examine Threats, Responses and Regional Considerations Surrounding Iraq: Congressional Hearings, Green Jobs: A Pathway to a Strong Middle Class, Examining the Theft of American Intellectual Property at Home and Abroad: Congressional Hearing, Reducing the Threat of Chemical and Biological Weapons: Congressional Hearing, The Administration's Missle Defense Program and the ABM Treaty: Congressional Hearing, Putin Administration's Policies Toward Non-Russian Regions of the Russian Federation, How Do We Promote Democratization, Poverty Alleviation, and Human Rights to Build a More Secure Future? Congressional Hearing\"\n },\n {\n \"title\": \"Age\",\n \"snippet\": \"81 years Nov 20, 1942\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=joe+biden+age&stick=H4sIAAAAAAAAAOPgE-LUz9U3MDRKrzDSEs1OttIvSM0vyEkFUkXF-XlWiempi1h5s_JTFZIyU1LzFIB8AMGaH2I0AAAA&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q18AJegQINhAB\"\n }\n ],\n \"profiles\": [\n {\n \"name\": \"Instagram\",\n \"link\": \"https://www.instagram.com/potus\",\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72f54032021daa42b287c4a1aaa02e89e7bc44f088a3e6592f3.png\"\n },\n {\n \"name\": \"X (Twitter)\",\n \"link\": \"https://twitter.com/JoeBiden\",\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72f54032021daa42b286cc2bfb7e8859a5bc5e3eb5e73f5f75f.png\"\n },\n {\n \"name\": \"YouTube\",\n \"link\": \"https://www.youtube.com/joebiden\",\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72f54032021daa42b28f1d8a13206f8677a394413172e958b4e.png\"\n },\n {\n \"name\": \"Facebook\",\n \"link\": \"https://www.facebook.com/joebiden\",\n \"image\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/f4afd08ef7d734dfde462b72c068d72f54032021daa42b2843eafc655c93486be210b0f3168da841.png\"\n }\n ]\n },\n \"inline_images\": [\n {\n \"thumbnail\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/e837dbbf9e225b25e3971a0e9e7bc86577c6786c64406a2278d13f376ffc2797.jpeg\"\n }\n ],\n \"related_questions\": [\n {\n \"question\": \"Who is the new president of the United States?\",\n \"snippet\": \"As President, Biden will restore America's leadership and build our communities back better.\",\n \"title\": \"Joe Biden: The President | The White House\",\n \"link\": \"https://www.whitehouse.gov/administration/president-biden/#:~:text=As%20President%2C%20Biden%20will%20restore,build%20our%20communities%20back%20better.\",\n \"displayed_link\": \"https://www.whitehouse.gov \u203a administration \u203a presiden...\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyBpcyB0aGUgbmV3IHByZXNpZGVudCBvZiB0aGUgVW5pdGVkIFN0YXRlcz8iLCJsayI6ImM1UFNLY19JVnk5V0tNbElWY2hMTFZjb0tFb3R6a3hKelN0UnlFOERDNWJtWlpha3BpZ1VseVNXcEJZREFBIiwiYnMiOiJjLU5LNXRJTHo4aFh5Q3hXS01sSVZjaExMVmNvS0VvdHpreEp6U3RSeUU4REM0Ym1aWmFrcGlnRWx5U1dwQmJiUy13M005S1QwaW5QeUZmSG82Y1VvcWNZckljcmhrc0xaRWw1SWtSSFpYNXBYbnBxY1FrV3E0SWQ3U1dPYUJscFMybVdFNldodERpUnk0WkxDdXFGdk5MY3BOUWlCVU9FT251SkRtc2phU25KY2x3S3VEeTRGSkRkWm1KZWtxRlFscG1jaW14R1A3dVJvcFI4T1g1bEFvd0EiLCJpZCI6ImZjXzZUWWNaX3ZISnFxcTAta1BsX2YtNkFNXzEifQ==\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyBpcyB0aGUgbmV3IHByZXNpZGVudCBvZiB0aGUgVW5pdGVkIFN0YXRlcz8iLCJsayI6ImM1UFNLY19JVnk5V0tNbElWY2hMTFZjb0tFb3R6a3hKelN0UnlFOERDNWJtWlpha3BpZ1VseVNXcEJZREFBIiwiYnMiOiJjLU5LNXRJTHo4aFh5Q3hXS01sSVZjaExMVmNvS0VvdHpreEp6U3RSeUU4REM0Ym1aWmFrcGlnRWx5U1dwQmJiUy13M005S1QwaW5QeUZmSG82Y1VvcWNZckljcmhrc0xaRWw1SWtSSFpYNXBYbnBxY1FrV3E0SWQ3U1dPYUJscFMybVdFNldodERpUnk0WkxDdXFGdk5MY3BOUWlCVU9FT251SkRtc2phU25KY2x3S3VEeTRGSkRkWm1KZWtxRlFscG1jaW14R1A3dVJvcFI4T1g1bEFvd0EiLCJpZCI6ImZjXzZUWWNaX3ZISnFxcTAta1BsX2YtNkFNXzEifQ%3D%3D\"\n },\n {\n \"question\": \"Who was the youngest president of the USA?\",\n \"snippet\": \"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\n \"title\": \"List of presidents of the United States by age - Wikipedia\",\n \"link\": \"https://en.wikipedia.org/wiki/List_of_presidents_of_the_United_States_by_age#:~:text=The%20median%20age%20at%20inauguration,the%20assassination%20of%20William%20McKinley.\",\n \"displayed_link\": \"https://en.wikipedia.org \u203a wiki \u203a List_of_presidents_of_t...\",\n \"source_logo\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/ad7ee8145e566f1f362fbd875d8257e7aa6eaf65d1ed8283f19c117342d6d7cf.png\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyB3YXMgdGhlIHlvdW5nZXN0IHByZXNpZGVudCBvZiB0aGUgVVNBPyIsImxrIjoiYzVQU0xNX0lWeWhQTEZZb3lVaFZxTXd2elV0UExTNVJLQ2hLTGM1TVNjMHJVY2hQQTh1VUZpY0NBQSIsImJzIjoiYy1OSzV0SUx6OGhYeUN4V0tNbElWY2hMTFZjb0tFb3R6a3hKelN0UnlFOERDNGJtWlpha3BpZ0VseVNXcEJiYlMtdzNNOUtUMGluUHlGZkhvNmNVb3FjWXJJY3Joa3NMWkVsNUlrUkhaWDVwWG5wcWNRa1dxNElkN1NXT2FCbHBTMm1XRTZXaHREaVJ5NFpMQ3VxRnZOTGNwTlFpQlVPRU9udUpEbXNqYVNuSmNsd0t1RHk0RkpEZFptSmVrcUZRbHBtY2lteEdQN3VSb3BSOE9YNWxBb3dBIiwiaWQiOiJmY182VFljWl92SEpxcXEwLWtQbF9mLTZBTV8xIn0=\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyB3YXMgdGhlIHlvdW5nZXN0IHByZXNpZGVudCBvZiB0aGUgVVNBPyIsImxrIjoiYzVQU0xNX0lWeWhQTEZZb3lVaFZxTXd2elV0UExTNVJLQ2hLTGM1TVNjMHJVY2hQQTh1VUZpY0NBQSIsImJzIjoiYy1OSzV0SUx6OGhYeUN4V0tNbElWY2hMTFZjb0tFb3R6a3hKelN0UnlFOERDNGJtWlpha3BpZ0VseVNXcEJiYlMtdzNNOUtUMGluUHlGZkhvNmNVb3FjWXJJY3Joa3NMWkVsNUlrUkhaWDVwWG5wcWNRa1dxNElkN1NXT2FCbHBTMm1XRTZXaHREaVJ5NFpMQ3VxRnZOTGNwTlFpQlVPRU9udUpEbXNqYVNuSmNsd0t1RHk0RkpEZFptSmVrcUZRbHBtY2lteEdQN3VSb3BSOE9YNWxBb3dBIiwiaWQiOiJmY182VFljWl92SEpxcXEwLWtQbF9mLTZBTV8xIn0%3D\"\n },\n {\n \"question\": \"Who is number 1 president?\",\n \"snippet\": \"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\n \"title\": \"Historical rankings of presidents of the United States - Wikipedia\",\n \"link\": \"https://en.wikipedia.org/wiki/Historical_rankings_of_presidents_of_the_United_States#:~:text=Abraham%20Lincoln%20has%20taken%20the,bottom%20of%20all%20four%20surveys.\",\n \"displayed_link\": \"https://en.wikipedia.org \u203a wiki \u203a Historical_rankings_of_...\",\n \"source_logo\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/ad7ee8145e566f1f362fbd875d8257e73c43d2b0f14d2e591b248ca6ebe30d32.png\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyBpcyBudW1iZXIgMSBwcmVzaWRlbnQ/IiwibGsiOiJHaGwzYUc4Z2FYTWdiblZ0WW1WeUlERWdjSEpsYzJsa1pXNTAiLCJicyI6ImMtTks1dElMejhoWHlDeFdLTWxJVmNoTExWY29LRW90emt4SnpTdFJ5RThEQzRibVpaYWtwaWdFbHlTV3BCYmJTLXczTTlLVDBpblB5RmZIbzZjVW9xY1lySWNyaGtzTFpFbDVJa1JIWlg1cFhucHFjUWtXcTRJZDdTV09hQmxwUzJtV0U2V2h0RGlSeTRaTEN1cUZ2TkxjcE5RaUJVT0VPbnVKRG1zamFTbkpjbHdLdUR5NEZKRGRabUpla3FGUWxwbWNpbXhHUDd1Um9wUjhPWDVsQW93QSIsImlkIjoiZmNfNlRZY1pfdkhKcXFxMC1rUGxfZi02QU1fMSJ9\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyBpcyBudW1iZXIgMSBwcmVzaWRlbnQ%2FIiwibGsiOiJHaGwzYUc4Z2FYTWdiblZ0WW1WeUlERWdjSEpsYzJsa1pXNTAiLCJicyI6ImMtTks1dElMejhoWHlDeFdLTWxJVmNoTExWY29LRW90emt4SnpTdFJ5RThEQzRibVpaYWtwaWdFbHlTV3BCYmJTLXczTTlLVDBpblB5RmZIbzZjVW9xY1lySWNyaGtzTFpFbDVJa1JIWlg1cFhucHFjUWtXcTRJZDdTV09hQmxwUzJtV0U2V2h0RGlSeTRaTEN1cUZ2TkxjcE5RaUJVT0VPbnVKRG1zamFTbkpjbHdLdUR5NEZKRGRabUpla3FGUWxwbWNpbXhHUDd1Um9wUjhPWDVsQW93QSIsImlkIjoiZmNfNlRZY1pfdkhKcXFxMC1rUGxfZi02QU1fMSJ9\"\n },\n {\n \"question\": \"Who was the 47th vice president?\",\n \"snippet\": \"Joseph Robinette Biden, Jr., represented Delaware for 36 years in the U.S. Senate before becoming the 47th and current Vice President of the United States.\",\n \"title\": \"Vice President Joe Biden | The White House\",\n \"link\": \"https://obamawhitehouse.archives.gov/vp#:~:text=Joseph%20Robinette%20Biden%2C%20Jr.%2C,President%20of%20the%20United%20States.\",\n \"displayed_link\": \"https://obamawhitehouse.archives.gov \u203a ...\",\n \"source_logo\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/ad7ee8145e566f1f362fbd875d8257e7cbc15e4c5530eec7b29f28251e20a863.png\",\n \"next_page_token\": \"eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyB3YXMgdGhlIDQ3dGggdmljZSBwcmVzaWRlbnQ/IiwibGsiOiJHaDkzYUc4Z2QyRnpJSFJvWlNBME4zUm9JSFpwWTJVZ2NISmxjMmxrWlc1MCIsImJzIjoiYy1OSzV0SUx6OGhYeUN4V0tNbElWY2hMTFZjb0tFb3R6a3hKelN0UnlFOERDNGJtWlpha3BpZ0VseVNXcEJiYlMtdzNNOUtUMGluUHlGZkhvNmNVb3FjWXJJY3Joa3NMWkVsNUlrUkhaWDVwWG5wcWNRa1dxNElkN1NXT2FCbHBTMm1XRTZXaHREaVJ5NFpMQ3VxRnZOTGNwTlFpQlVPRU9udUpEbXNqYVNuSmNsd0t1RHk0RkpEZFptSmVrcUZRbHBtY2lteEdQN3VSb3BSOE9YNWxBb3dBIiwiaWQiOiJmY182VFljWl92SEpxcXEwLWtQbF9mLTZBTV8xIn0=\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google_related_questions&google_domain=google.com&next_page_token=eyJvbnMiOiIxMDA0MSIsImZjIjoiRW9zQkNreEJTa2M1U210T1R6RlZXVWhpWlhWZlJFcFRlREptY1d0bWRrdHhSVFYyZDI5TFRqTmxVWEZtWkZseVZIUXdjRzE0U1dsU01VSlhjRTVaWlRkM2JHSTJibGRQYjJjM1pFeE1lSGhIRWhjMlZGbGpXbDkyU0VweGNYRXdMV3RRYkY5bUxUWkJUUm9pUVVaWWNrVmpjVWx0TVRabWFuRTNNRmRwVW0wdGVXeHJTVTVsTTJONllqTndadyIsImZjdiI6IjMiLCJlaSI6IjZUWWNaX3ZISnFxcTAta1BsX2YtNkFNIiwicWMiOiJjLU5TU3k0dEtrck5LMUVvS0VvdHprd0JzZkxURkVveVVoVks4ekpMVWxNVWlrc1NTMUtMQlJnU0dHc2RsTTNzQVEiLCJxdWVzdGlvbiI6IldobyB3YXMgdGhlIDQ3dGggdmljZSBwcmVzaWRlbnQ%2FIiwibGsiOiJHaDkzYUc4Z2QyRnpJSFJvWlNBME4zUm9JSFpwWTJVZ2NISmxjMmxrWlc1MCIsImJzIjoiYy1OSzV0SUx6OGhYeUN4V0tNbElWY2hMTFZjb0tFb3R6a3hKelN0UnlFOERDNGJtWlpha3BpZ0VseVNXcEJiYlMtdzNNOUtUMGluUHlGZkhvNmNVb3FjWXJJY3Joa3NMWkVsNUlrUkhaWDVwWG5wcWNRa1dxNElkN1NXT2FCbHBTMm1XRTZXaHREaVJ5NFpMQ3VxRnZOTGNwTlFpQlVPRU9udUpEbXNqYVNuSmNsd0t1RHk0RkpEZFptSmVrcUZRbHBtY2lteEdQN3VSb3BSOE9YNWxBb3dBIiwiaWQiOiJmY182VFljWl92SEpxcXEwLWtQbF9mLTZBTV8xIn0%3D\"\n }\n ],\n \"answer_box\": {\n \"type\": \"organic_result\",\n \"title\": \"United States \u203a President ShareSend feedbackClose menu\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=United+States&stick=H4sIAAAAAAAAAONgFuLUz9U3sEw2LzdQQjAfMZpwC7z8cU9YSnvSmpPXGFW5uIIz8std80oySyqFxLnYoCxeKW4uhC6eRay8oXmZJakpCsEliSWpxQBxuRz9XwAAAA&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q_coHKAB6BAglEAI\",\n \"thumbnail\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/fea807698ab0aaf98cc81ed2a4d632003eaccf0b0c92b22d.jpeg\"\n },\n \"organic_results\": [\n {\n \"position\": 1,\n \"title\": \"Joe Biden: The President\",\n \"link\": \"https://www.whitehouse.gov/administration/president-biden/\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.whitehouse.gov/administration/president-biden/&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECB0QAQ\",\n \"displayed_link\": \"https://www.whitehouse.gov \u203a administration \u203a presiden...\",\n \"thumbnail\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d809123675ce52671276e6ec6771c150bee72.jpeg\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d80910f9b173b72e9eab1601615c1605938de.webp\",\n \"snippet\": \"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"The White House (.gov)\"\n },\n {\n \"position\": 2,\n \"title\": \"President of the United States\",\n \"link\": \"https://en.wikipedia.org/wiki/President_of_the_United_States\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://en.wikipedia.org/wiki/President_of_the_United_States&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEkQAQ\",\n \"displayed_link\": \"https://en.wikipedia.org \u203a wiki \u203a President_of_the_Unit...\",\n \"thumbnail\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d8091fc3a8227d2a2bfb02dc42ab2d1dbfcbe.jpeg\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d809158e8117e92dd1333a25421ce047e75a9.webp\",\n \"snippet\": \"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\n \"snippet_highlighted_words\": [\n \"president of the United States\",\n \"United States\",\n \"president\"\n ],\n \"sitelinks\": {\n \"inline\": [\n {\n \"title\": \"American Presidents\",\n \"link\": \"https://en.wikipedia.org/wiki/List_of_presidents_of_the_United_States\"\n },\n {\n \"title\": \"Powers of the president\",\n \"link\": \"https://en.wikipedia.org/wiki/Powers_of_the_president_of_the_United_States\"\n },\n {\n \"title\": \"Executive Office\",\n \"link\": \"https://en.wikipedia.org/wiki/Executive_Office_of_the_President_of_the_United_States\"\n },\n {\n \"title\": \"Talk\",\n \"link\": \"https://en.wikipedia.org/wiki/President_of_the_United_States_(disambiguation)\"\n }\n ]\n },\n \"source\": \"Wikipedia\"\n },\n {\n \"position\": 3,\n \"title\": \"President of the United States\",\n \"link\": \"https://usun.usmission.gov/our-leaders/the-president-of-the-united-states/\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://usun.usmission.gov/our-leaders/the-president-of-the-united-states/&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEUQAQ\",\n \"displayed_link\": \"https://usun.usmission.gov \u203a Our Leaders\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d8091121c5487a8779ef9f7acea7b19505bc8.webp\",\n \"snippet\": \"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"United States Mission to the United Nations (.gov)\"\n },\n {\n \"position\": 4,\n \"title\": \"The Executive Branch\",\n \"link\": \"https://www.whitehouse.gov/about-the-white-house/our-government/the-executive-branch/\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.whitehouse.gov/about-the-white-house/our-government/the-executive-branch/&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEYQAQ\",\n \"displayed_link\": \"https://www.whitehouse.gov \u203a ... \u203a Our Government\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d8091ad45f5dadf4a42654be2bc1d744225aa.webp\",\n \"snippet\": \"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President\",\n \"United States\"\n ],\n \"source\": \"The White House (.gov)\"\n },\n {\n \"position\": 5,\n \"title\": \"potus - President Joe Biden\",\n \"link\": \"https://www.instagram.com/potus/?hl=en\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.instagram.com/potus/%3Fhl%3Den&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEoQAQ\",\n \"displayed_link\": \"19.1M+ followers\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d80918c36147c96afe6855fcd63f1ec9e9f13.webp\",\n \"snippet\": \"19M Followers, 5 Following, 4491 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus ...\",\n \"snippet_highlighted_words\": [\n \"President\",\n \"President of the United States\"\n ],\n \"source\": \"Instagram \u00b7 potus\"\n },\n {\n \"position\": 6,\n \"title\": \"Presidents, vice presidents, and first ladies\",\n \"link\": \"https://www.usa.gov/presidents\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.usa.gov/presidents&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEQQAQ\",\n \"displayed_link\": \"https://www.usa.gov \u203a ... \u203a U.S. facts and figures\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d8091d2def812f73ab4a461c4ccb1a6f18154.webp\",\n \"date\": \"Sep 20, 2024\",\n \"snippet\": \"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\n \"snippet_highlighted_words\": [\n \"U.S. president\",\n \"president\",\n \"current\"\n ],\n \"source\": \"USA.gov\"\n },\n {\n \"position\": 7,\n \"title\": \"Joe Biden\",\n \"link\": \"https://en.wikipedia.org/wiki/Joe_Biden\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://en.wikipedia.org/wiki/Joe_Biden&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEMQAQ\",\n \"displayed_link\": \"https://en.wikipedia.org \u203a wiki \u203a Joe_Biden\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d8091707d8df4bff108102635656d2baac128.webp\",\n \"snippet\": \"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\n \"snippet_highlighted_words\": [\n \"current president of the United States\"\n ],\n \"source\": \"Wikipedia\"\n },\n {\n \"position\": 8,\n \"title\": \"Joe Biden's Path to the United States Presidency\",\n \"link\": \"https://www.britannica.com/video/who-is-President-Joe-Biden/-261012\",\n \"displayed_link\": \"https://www.britannica.com \u203a who-is-President-Joe-Biden\",\n \"thumbnail\": \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTBA5esZeOMzKNwtbAdAAGDKnIzwZu8OaAUEdHwYIqlx8lK&s\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d809144cacfc2f26d14a73b65e5227ec342ec.png\",\n \"date\": \"Jan 7, 2022\",\n \"snippet\": \"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\n \"duration\": \"2:21\",\n \"rich_snippet\": {\n \"top\": {\n \"detected_extensions\": {\n \"date\": \"Jan 7, 2022\"\n },\n \"extensions\": [\n \"Britannica\",\n \"Jan 7, 2022\"\n ]\n }\n },\n \"video_link\": \"https://encrypted-vtbn0.gstatic.com/video?q=tbn:ANd9GcROuAdejw5zIuel829Yg2a-WcElSEWdOPVjSg\",\n \"source\": \"Britannica\"\n },\n {\n \"position\": 9,\n \"title\": \"President of the United States\",\n \"link\": \"https://ballotpedia.org/President_of_the_United_States\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://ballotpedia.org/President_of_the_United_States&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEgQAQ\",\n \"displayed_link\": \"https://ballotpedia.org \u203a President_of_the_United_States\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d8091086f5f0710fc4ac6a767cc31b14513b3.webp\",\n \"snippet\": \"Article II of the U.S. Constitution laid out the requirements and roles of the president. The current president is Joe Biden (D). Election requirements.\",\n \"snippet_highlighted_words\": [\n \"U.S.\",\n \"president\",\n \"current president\"\n ],\n \"source\": \"Ballotpedia\"\n },\n {\n \"position\": 10,\n \"title\": \"Joe Biden | Biography, Family, Policies, & Facts\",\n \"link\": \"https://www.britannica.com/biography/Joe-Biden\",\n \"redirect_link\": \"https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.britannica.com/biography/Joe-Biden&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0QFnoECEcQAQ\",\n \"displayed_link\": \"https://www.britannica.com \u203a biography \u203a Joe-Biden\",\n \"thumbnail\": \"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTxhWTZ_S1u-RWVui7B5-A5hg0buAteg-_4DunMq0df1kbaloT2vIDX&usqp=CAE&s\",\n \"favicon\": \"https://serpapi.com/searches/671c36e9c4bcf5bca3e80727/images/0bfbecbf14e47c61b3258776da1d80916b88fa1cdd7b20092d43d06af230b264.webp\",\n \"date\": \"Oct 7, 2024\",\n \"snippet\": \"Joe Biden, the 46th president of the United States, brings decades of political experience and a commitment to unity as he leads America ...\",\n \"snippet_highlighted_words\": [\n \"president of the United States\"\n ],\n \"source\": \"Britannica\"\n }\n ],\n \"related_searches\": [\n {\n \"block_position\": 1,\n \"query\": \"Who is the Vice President of the United States\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Who+is+the+Vice+President+of+the+United+States&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhoEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Who+is+the+Vice+President+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Who is the 46th president\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Who+is+the+46th+president&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhnEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Who+is+the+46th+president\"\n },\n {\n \"block_position\": 1,\n \"query\": \"47th President of the United States\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=47th+President+of+the+United+States&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhmEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=47th+President+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"48th President of the United States\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=48th+President+of+the+United+States&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhjEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=48th+President+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"All Presidents in order\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=All+Presidents+in+order&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhkEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=All+Presidents+in+order\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Who is the New President of the United States\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Who+is+the+New+President+of+the+United+States&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhlEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Who+is+the+New+President+of+the+United+States\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Joe Biden age\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Joe+Biden+age&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhhEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Joe+Biden+age\"\n },\n {\n \"block_position\": 1,\n \"query\": \"Is Joe Biden still president\",\n \"link\": \"https://www.google.com/search?sca_esv=1e2149b22db2c846&q=Is+Joe+Biden+still+president&sa=X&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q1QJ6BAhiEAE\",\n \"serpapi_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=Is+Joe+Biden+still+president\"\n }\n ],\n \"pagination\": {\n \"current\": 1,\n \"next\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=10&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8NMDegQIBhAW\",\n \"other_pages\": {\n \"2\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=10&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAE\",\n \"3\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=20&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAG\",\n \"4\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=30&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAI\",\n \"5\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=40&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAK\",\n \"6\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=50&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAM\",\n \"7\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=60&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAO\",\n \"8\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=70&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAQ\",\n \"9\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=80&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAS\",\n \"10\": \"https://www.google.com/search?q=current+president+of+the+United+States&sca_esv=1e2149b22db2c846&ei=6TYcZ_vHJqqq0-kPl_f-6AM&start=90&sa=N&sstk=Aagrsug7oGd4B5M7G-HtkM6PI2bTcUwyO9ISHo6E25sUrUPiKsu0y-kZeqHP5kc_9Q84hVSSZUs4FrQJeOC9cz7GfBvB521_P_B1dw&ved=2ahUKEwi74Jmn5KqJAxUq1TQHHZe7Hz0Q8tMDegQIBhAU\"\n }\n },\n \"serpapi_pagination\": {\n \"current\": 1,\n \"next_link\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=10\",\n \"next\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=10\",\n \"other_pages\": {\n \"2\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=10\",\n \"3\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=20\",\n \"4\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=30\",\n \"5\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=40\",\n \"6\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=50\",\n \"7\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=60\",\n \"8\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=70\",\n \"9\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=80\",\n \"10\": \"https://serpapi.com/search.json?device=desktop&engine=google&google_domain=google.com&num=10&q=current+president+of+the+United+States&start=90\"\n }\n }\n}" } diff --git a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-aabcdc9cde285aa6d7d0dd01b03c7b1c.json b/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-aabcdc9cde285aa6d7d0dd01b03c7b1c.json deleted file mode 100644 index 6c306bc..0000000 --- a/tests/Fixtures/Saloon/Tools/SerpAPIGoogleSearchTool-aabcdc9cde285aa6d7d0dd01b03c7b1c.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:54 GMT", - "Content-Type": "application\/json", - "Content-Length": "676", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "1058", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999050", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "28ms", - "x-request-id": "req_3b949168b3ca9daf7d5be223bbca1ed3", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=pjfhIhJbAaIG04755EbB7LYEG.zHp1ks5afhD0.f74c-1729560594-1.0.1.1-bmGL3vVBgNNovCC66JF0RsHbPpgKHqWVYWyGHk1EfVE1vLnsEkHdbQyS1R_DZchiR2UYvhTBP865k3ovMjJjlg; path=\/; expires=Tue, 22-Oct-24 01:59:54 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=xu0leeGwltYjfV9AQ3O7JAmRR1mxyAgSkFbbH1_SMjI-1729560594932-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b80ee97942cb-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy0XglWk28KEm56nQ5s8EkonCm9N\",\n \"object\": \"chat.completion\",\n \"created\": 1729560593,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1025,\n \"completion_tokens\": 15,\n \"total_tokens\": 1040,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file diff --git a/tests/Fixtures/Saloon/Tools/Serper-Tool.json b/tests/Fixtures/Saloon/Tools/Serper-Tool.json index 4cd1e0d..e0431e8 100644 --- a/tests/Fixtures/Saloon/Tools/Serper-Tool.json +++ b/tests/Fixtures/Saloon/Tools/Serper-Tool.json @@ -1,10 +1,10 @@ { - "statusCode": 200, - "headers": { - "access-control-allow-origin": "*", - "x-ratelimit-limit": "500", - "x-ratelimit-remaining": "499", - "x-ratelimit-reset": "1728047535" - }, - "data": "{\"searchParameters\":{\"q\":\"current president of the United States\",\"type\":\"search\",\"num\":1,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States / President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https://www.whitehouse.gov/administration/president-biden/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"All Presidents in order\"},{\"query\":\"48th president of the United States\"},{\"query\":\"Who is the New president of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"47th President of the United States\"},{\"query\":\"First president of USA\"}],\"credits\":1}" + "statusCode": 200, + "headers": { + "access-control-allow-origin": "*", + "x-ratelimit-limit": "500", + "x-ratelimit-remaining": "499", + "x-ratelimit-reset": "1729901585" + }, + "data": "{\"searchParameters\":{\"q\":\"current president of the United States\",\"type\":\"search\",\"num\":10,\"engine\":\"google\"},\"answerBox\":{\"title\":\"United States \/ President\",\"answer\":\"Joe Biden\"},\"organic\":[{\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":1},{\"title\":\"President of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States\",\"snippet\":\"The president of the United States (POTUS) is the head of state and head of government of the United States of America. The president directs the executive ...\",\"sitelinks\":[{\"title\":\"American Presidents\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States\"},{\"title\":\"Powers of the president\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Powers_of_the_president_of_the_United_States\"},{\"title\":\"Executive Office\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Executive_Office_of_the_President_of_the_United_States\"},{\"title\":\"Talk\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/President_of_the_United_States_(disambiguation)\"}],\"position\":2},{\"title\":\"President of the United States\",\"link\":\"https:\/\/usun.usmission.gov\/our-leaders\/the-president-of-the-united-states\/\",\"snippet\":\"President Biden represented Delaware for 36 years in the US Senate before becoming the 47th Vice President of the United States.\",\"position\":3},{\"title\":\"The Executive Branch | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/about-the-white-house\/our-government\/the-executive-branch\/\",\"snippet\":\"From the President, to the Vice President, to the Cabinet, learn more about the Executive Branch of the government of the United States.\",\"position\":4},{\"title\":\"President Joe Biden (@potus) \u2022 Instagram photos and videos\",\"link\":\"https:\/\/www.instagram.com\/potus\/?hl=en\",\"snippet\":\"19M Followers, 5 Following, 4491 Posts - President Joe Biden (@potus) on Instagram: \\\"46th President of the United States, husband to @flotus ...\",\"date\":\"2 days ago\",\"position\":5},{\"title\":\"Presidents, vice presidents, and first ladies | USAGov\",\"link\":\"https:\/\/www.usa.gov\/presidents\",\"snippet\":\"Learn about the duties of the U.S. president, vice president, and first lady. Find out how to contact and learn more about current and past ...\",\"date\":\"Sep 20, 2024\",\"position\":6},{\"title\":\"Joe Biden - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Joe_Biden\",\"snippet\":\"Joseph Robinette Biden Jr. (born November 20, 1942) is an American politician who has been the 46th and current president of the United States since 2021.\",\"position\":7},{\"title\":\"Joe Biden's Path to the United States Presidency | Britannica\",\"link\":\"https:\/\/www.britannica.com\/video\/who-is-President-Joe-Biden\/-261012\",\"snippet\":\"Learn more about the life and career of Joe Biden, the 46th president of the United States.\",\"date\":\"Jan 7, 2022\",\"attributes\":{\"Duration\":\"2:21\",\"Posted\":\"Jan 7, 2022\"},\"position\":8},{\"title\":\"Presidents of the United States of America - Ohio Secretary of State\",\"link\":\"https:\/\/www.ohiosos.gov\/elections\/election-results-and-data\/historical-election-comparisons\/presidents-of-the-united-states-of-america\/\",\"snippet\":\"4,5 \u00b7 6,7 \u00b7 8,9 \u00b7 10 ; Thomas Jefferson \u00b7 James Madison \u00b7 James Monroe \u00b7 John Quincy Adams.\",\"position\":9},{\"title\":\"Joe Biden | Biography, Family, Policies, & Facts | Britannica\",\"link\":\"https:\/\/www.britannica.com\/biography\/Joe-Biden\",\"snippet\":\"Joe Biden, the 46th president of the United States, brings decades of political experience and a commitment to unity as he leads America ...\",\"date\":\"Oct 7, 2024\",\"position\":10}],\"peopleAlsoAsk\":[{\"question\":\"Who is the new president of the United States?\",\"snippet\":\"As President, Biden will restore America's leadership and build our communities back better.\",\"title\":\"Joe Biden: The President | The White House\",\"link\":\"https:\/\/www.whitehouse.gov\/administration\/president-biden\/\"},{\"question\":\"Who was the youngest president of the USA?\",\"snippet\":\"The median age at inauguration of incoming U.S. presidents is 55 years. The youngest person to become U.S. president was Theodore Roosevelt, who, at age 42, succeeded to the office after the assassination of William McKinley.\",\"title\":\"List of presidents of the United States by age - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/List_of_presidents_of_the_United_States_by_age\"},{\"question\":\"Who is number 1 president?\",\"snippet\":\"Abraham Lincoln has taken the highest ranking in each survey and George Washington, Franklin D. Roosevelt, and Theodore Roosevelt have always ranked in the top five while James Buchanan, Andrew Johnson, and Franklin Pierce have been ranked at the bottom of all four surveys.\",\"title\":\"Historical rankings of presidents of the United States - Wikipedia\",\"link\":\"https:\/\/en.wikipedia.org\/wiki\/Historical_rankings_of_presidents_of_the_United_States\"},{\"question\":\"Who was the 47th vice president?\",\"snippet\":\"Joseph Robinette Biden, Jr., represented Delaware for 36 years in the U.S. Senate before becoming the 47th and current Vice President of the United States.\",\"title\":\"Vice President Joe Biden | The White House\",\"link\":\"https:\/\/obamawhitehouse.archives.gov\/vp\"}],\"relatedSearches\":[{\"query\":\"Who is the Vice President of the United States\"},{\"query\":\"Who is the 46th president\"},{\"query\":\"47th President of the United States\"},{\"query\":\"All Presidents in order\"},{\"query\":\"48th President of the United States\"},{\"query\":\"Who is the New President of the United States\"},{\"query\":\"Joe Biden age\"},{\"query\":\"Is Joe Biden still president\"}],\"credits\":1}" } diff --git a/tests/Fixtures/Saloon/Tools/SerperTestAgent-28125624c9418e220ffb104b593f9f20.json b/tests/Fixtures/Saloon/Tools/SerperTestAgent-28125624c9418e220ffb104b593f9f20.json deleted file mode 100644 index 3066f10..0000000 --- a/tests/Fixtures/Saloon/Tools/SerperTestAgent-28125624c9418e220ffb104b593f9f20.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Tue, 22 Oct 2024 01:29:57 GMT", - "Content-Type": "application/json", - "Content-Length": "674", - "Connection": "keep-alive", - "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "778", - "openai-version": "2020-10-01", - "x-ratelimit-limit-requests": "10000", - "x-ratelimit-limit-tokens": "2000000", - "x-ratelimit-remaining-requests": "9999", - "x-ratelimit-remaining-tokens": "1999797", - "x-ratelimit-reset-requests": "6ms", - "x-ratelimit-reset-tokens": "6ms", - "x-request-id": "req_c2fbd9881a6b7a89292c13096028f737", - "strict-transport-security": "max-age=31536000; includeSubDomains; preload", - "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=C8t5g1M5x7bFzEEBfs.NC7QOFXARyEMQvJCpyPj0Xx0-1729560597-1.0.1.1-eydqKVILd1gSGoLl4FZrT6O6_kr_0HO2irYagsTgHcIm7qKPqG3iz6vMPbF1mvpBAosC6aPes4m2tie.KTmfHA; path=/; expires=Tue, 22-Oct-24 01:59:57 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=065oGLFxrDEEEQV3jpIU.UvhjSb9EFeKQR8oUWBrigo-1729560597771-0.0.1.1-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], - "X-Content-Type-Options": "nosniff", - "Server": "cloudflare", - "CF-RAY": "8d65b822684d7c7b-EWR", - "alt-svc": "h3=\":443\"; ma=86400" - }, - "data": "{\n \"id\": \"chatcmpl-AKy0b2tUDQZmexXwAz4pWig0YDGwk\",\n \"object\": \"chat.completion\",\n \"created\": 1729560597,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 300,\n \"completion_tokens\": 15,\n \"total_tokens\": 315,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerperTestAgent-39474d616ece521a51e916ab18d5ff87.json b/tests/Fixtures/Saloon/Tools/SerperTestAgent-39474d616ece521a51e916ab18d5ff87.json deleted file mode 100644 index 787a17e..0000000 --- a/tests/Fixtures/Saloon/Tools/SerperTestAgent-39474d616ece521a51e916ab18d5ff87.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:12:15 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked" - }, - "data": "{\n \"id\": \"chatcmpl-AEcOMVg1N9uoRppCSIPzWPx7Jrkxs\",\n \"object\": \"chat.completion\",\n \"created\": 1728047534,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 275,\n \"completion_tokens\": 15,\n \"total_tokens\": 290,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerperTestAgent-4d9c37b83db9353afd0462b60417eb0e.json b/tests/Fixtures/Saloon/Tools/SerperTestAgent-4d9c37b83db9353afd0462b60417eb0e.json deleted file mode 100644 index 72205ad..0000000 --- a/tests/Fixtures/Saloon/Tools/SerperTestAgent-4d9c37b83db9353afd0462b60417eb0e.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Fri, 04 Oct 2024 13:12:13 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked" - }, - "data": "{\n \"id\": \"chatcmpl-AEcOKAKZHbsrzjN8HMJa1Bg5uowvI\",\n \"object\": \"chat.completion\",\n \"created\": 1728047532,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_BpDI13OeaoahqPG9X6iaDpdK\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\",\\\"searchType\\\":\\\"search\\\",\\\"numberOfResults\\\":1}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 178,\n \"completion_tokens\": 30,\n \"total_tokens\": 208,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Tools/SerperTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json b/tests/Fixtures/Saloon/Tools/SerperTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json index 1ea31bb..99cff12 100644 --- a/tests/Fixtures/Saloon/Tools/SerperTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json +++ b/tests/Fixtures/Saloon/Tools/SerperTestAgent-8c4de06e2a7064e26c30dd1131e7c149.json @@ -1,13 +1,13 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:29:56 GMT", + "Date": "Sat, 26 Oct 2024 00:13:02 GMT", "Content-Type": "application\/json", "Content-Length": "936", "Connection": "keep-alive", "access-control-expose-headers": "X-Request-ID", - "openai-organization": "user-5hvzt3x5aqwr0picqhxifwl8", - "openai-processing-ms": "890", + "openai-organization": "REDACTED", + "openai-processing-ms": "777", "openai-version": "2020-10-01", "x-ratelimit-limit-requests": "10000", "x-ratelimit-limit-tokens": "2000000", @@ -15,17 +15,13 @@ "x-ratelimit-remaining-tokens": "1999865", "x-ratelimit-reset-requests": "6ms", "x-ratelimit-reset-tokens": "4ms", - "x-request-id": "req_3007c8cf06d1eca2fecb7a9fb57981bc", + "x-request-id": "REDACTED", "strict-transport-security": "max-age=31536000; includeSubDomains; preload", "CF-Cache-Status": "DYNAMIC", - "Set-Cookie": [ - "__cf_bm=8vuVetc9u88WEaMoNWWZaW0uISiIzo2iQCc8yY0araM-1729560596-1.0.1.1-Z_9eHUEoXhdB2m1FI7PHPX7enFnLT7Hdhr6dtLBa05TXrFfDHTKeGas016VlTL25kB0U_56ZBkT5edOGDNzOOQ; path=\/; expires=Tue, 22-Oct-24 01:59:56 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None", - "_cfuvid=BLsiiu1QW3zLXgej2d3jvgSGnTtmRHgdGC0ItWq9lOo-1729560596646-0.0.1.1-604800000; path=\/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None" - ], "X-Content-Type-Options": "nosniff", "Server": "cloudflare", - "CF-RAY": "8d65b81abda64376-EWR", + "CF-RAY": "REDACTED", "alt-svc": "h3=\":443\"; ma=86400" }, - "data": "{\n \"id\": \"chatcmpl-AKy0ZRtZseiOkgjAWEGTheov8ENF5\",\n \"object\": \"chat.completion\",\n \"created\": 1729560595,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_gckflj1LwRqqPKTFyFEfIgVd\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 213,\n \"completion_tokens\": 20,\n \"total_tokens\": 233,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" -} \ No newline at end of file + "data": "{\n \"id\": \"chatcmpl-AMOiMZWGVjGH1XQtR6o30UZTXAdzO\",\n \"object\": \"chat.completion\",\n \"created\": 1729901582,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": null,\n \"tool_calls\": [\n {\n \"id\": \"call_E6Np3xjfgSUPIxXhcatZ7hcA\",\n \"type\": \"function\",\n \"function\": {\n \"name\": \"serper_tool\",\n \"arguments\": \"{\\\"query\\\":\\\"current president of the United States\\\"}\"\n }\n }\n ],\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"tool_calls\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 213,\n \"completion_tokens\": 20,\n \"total_tokens\": 233,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Tools/SerperTestAgent-9e49a87ac181a72a979874028f1f6034.json b/tests/Fixtures/Saloon/Tools/SerperTestAgent-9e49a87ac181a72a979874028f1f6034.json new file mode 100644 index 0000000..62bfb67 --- /dev/null +++ b/tests/Fixtures/Saloon/Tools/SerperTestAgent-9e49a87ac181a72a979874028f1f6034.json @@ -0,0 +1,27 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Sat, 26 Oct 2024 00:13:05 GMT", + "Content-Type": "application\/json", + "Content-Length": "723", + "Connection": "keep-alive", + "access-control-expose-headers": "X-Request-ID", + "openai-organization": "REDACTED", + "openai-processing-ms": "943", + "openai-version": "2020-10-01", + "x-ratelimit-limit-requests": "10000", + "x-ratelimit-limit-tokens": "2000000", + "x-ratelimit-remaining-requests": "9999", + "x-ratelimit-remaining-tokens": "1998979", + "x-ratelimit-reset-requests": "6ms", + "x-ratelimit-reset-tokens": "30ms", + "x-request-id": "REDACTED", + "strict-transport-security": "max-age=31536000; includeSubDomains; preload", + "CF-Cache-Status": "DYNAMIC", + "X-Content-Type-Options": "nosniff", + "Server": "cloudflare", + "CF-RAY": "REDACTED", + "alt-svc": "h3=\":443\"; ma=86400" + }, + "data": "{\n \"id\": \"chatcmpl-AMOiOeKXsB4MvRubcAlCg5BrGFVVm\",\n \"object\": \"chat.completion\",\n \"created\": 1729901584,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"answer\\\": \\\"Joe Biden is the current president of the United States.\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1130,\n \"completion_tokens\": 23,\n \"total_tokens\": 1153,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_ed14c08274\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-391e03d399bbd1bfda18308c0ddfd184.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-391e03d399bbd1bfda18308c0ddfd184.json deleted file mode 100644 index e6a8137..0000000 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-391e03d399bbd1bfda18308c0ddfd184.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sun, 06 Oct 2024 22:32:07 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AFU4zoKqyV4YDMyikqnFRou4sgKhr\",\n \"object\": \"chat.completion\",\n \"created\": 1728253909,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Acoustical Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door for Residential Safe Rooms Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Tornado Resistant Door for Residential Safe Rooms\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door for Shelters with Single Motion Locks Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Tornado Resistant Door for Shelters\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Storefront Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50 FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details for Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Blast Resistant Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies with Ul 752 Level 1 and Level 3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Bullet Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1422,\n \"completion_tokens\": 721,\n \"total_tokens\": 2143,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-39bc17d178807a04cb3b9318f2573b99.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-39bc17d178807a04cb3b9318f2573b99.json index 9744743..ee17325 100644 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-39bc17d178807a04cb3b9318f2573b99.json +++ b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-39bc17d178807a04cb3b9318f2573b99.json @@ -1,10 +1,10 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:25:57 GMT", + "Date": "Tue, 11 Mar 2025 23:09:57 GMT", "Content-Type": "application\/json", "Transfer-Encoding": "chunked", "Connection": "keep-alive" }, - "data": "{\n \"id\": \"chatcmpl-AKxwRsoeeJ1sH3EPs1aVo6qG616Xq\",\n \"object\": \"chat.completion\",\n \"created\": 1729560339,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/-50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50 FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With UL 752 Level 1 And Level3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1119,\n \"completion_tokens\": 607,\n \"total_tokens\": 1726,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" + "data": "{\n \"id\": \"chatcmpl-BA31AChDOL089R3qzaz5hvO9T2sB8\",\n \"object\": \"chat.completion\",\n \"created\": 1741734580,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/-50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50 FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With Ul 752 Level 1 And Level3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1119,\n \"completion_tokens\": 610,\n \"total_tokens\": 1729,\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_bf9cb2c77f\"\n}\n" } diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-3ad8cdc0143898a9c2715861e2e3b459.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-3ad8cdc0143898a9c2715861e2e3b459.json deleted file mode 100644 index 1b6c5ad..0000000 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-3ad8cdc0143898a9c2715861e2e3b459.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sun, 06 Oct 2024 00:09:20 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AF97aVsLsvZV2Sa844jmWimo1maAQ\",\n \"object\": \"chat.completion\",\n \"created\": 1728173346,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"/var/uploads/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door for Residential Safe Rooms Complies with ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door for Shelters with Single Motion Locks Complies with ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+/- 50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/1-PIOCANE-50_FG.pdf\\\",\\n \\\"title\\\": \\\"+/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details for Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"/var/uploads/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies with UL 752 Level 1 and Level 3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1084,\n \"completion_tokens\": 612,\n \"total_tokens\": 1696,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-46dc2f6885dcaf33d1f51f9d37f74b0e.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-46dc2f6885dcaf33d1f51f9d37f74b0e.json new file mode 100644 index 0000000..5b0a692 --- /dev/null +++ b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-46dc2f6885dcaf33d1f51f9d37f74b0e.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 23:19:53 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA3AplxDCs3oK8EUQDc88wlVv94fY\",\n \"object\": \"chat.completion\",\n \"created\": 1741735179,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/-50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With Ul 752 Level 1 And Level3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 3721,\n \"completion_tokens\": 613,\n \"total_tokens\": 4334,\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_7c63087da1\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-15f86e44009e468d98a2182a922488fc.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-5f5602e2afd0c53f0a77b94e1ee969b7.json similarity index 56% rename from tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-15f86e44009e468d98a2182a922488fc.json rename to tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-5f5602e2afd0c53f0a77b94e1ee969b7.json index d1182af..a587673 100644 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-15f86e44009e468d98a2182a922488fc.json +++ b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-5f5602e2afd0c53f0a77b94e1ee969b7.json @@ -1,10 +1,10 @@ { "statusCode": 200, "headers": { - "Date": "Tue, 22 Oct 2024 01:26:14 GMT", + "Date": "Tue, 11 Mar 2025 23:19:39 GMT", "Content-Type": "application\/json", "Transfer-Encoding": "chunked", "Connection": "keep-alive" }, - "data": "{\n \"id\": \"chatcmpl-AKxwju2mXu9Jiq45DYAl78d38xGoB\",\n \"object\": \"chat.completion\",\n \"created\": 1729560357,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With UL 752 Level 1 And Level 3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1985,\n \"completion_tokens\": 609,\n \"total_tokens\": 2594,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_eae715ec6a\"\n}\n" + "data": "{\n \"id\": \"chatcmpl-BA3AZ2jAde6Drp0K5eQ7msXpPqLqW\",\n \"object\": \"chat.completion\",\n \"created\": 1741735163,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/-50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50 FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With Ul 752 Level 1 And Level3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 2853,\n \"completion_tokens\": 610,\n \"total_tokens\": 3463,\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_bf9cb2c77f\"\n}\n" } diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-78b21fef39089d0fc8f6d5fa86f6b943.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-78b21fef39089d0fc8f6d5fa86f6b943.json deleted file mode 100644 index 16b6644..0000000 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-78b21fef39089d0fc8f6d5fa86f6b943.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sun, 06 Oct 2024 00:20:07 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AF9I0xv6sTsRg1nB9sXKu6qFtuskE\",\n \"object\": \"chat.completion\",\n \"created\": 1728173992,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"pdfs.*\\\": \\\"An array of PDF links extracted from the website content.\\\",\\n \\\"pdfs.*.link\\\": \\\"(required|url) The link URL for the PDF.\\\",\\n \\\"pdfs.*.title\\\": \\\"(required|string) The Title of the PDF (usually the link text) in title case.\\\",\\n \\\"pdfs.*.category\\\": \\\"(required|string) One of `Order Form`, `Technical Data`, `Catalog`, `Parts Manual`, `Brochure`, `Template`, `Miscellaneous`\\\",\\n \\\"pdfs.*.product\\\": \\\"(sometimes|string) If this PDF relates to a specific product put the name here.\\\",\\n \\\"pdfs.*.product_category\\\": \\\"(sometimes|string) One of `Doors`, `Frames`, `Door Assemblies`\\\"\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 889,\n \"completion_tokens\": 165,\n \"total_tokens\": 1054,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_81dd8129df\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-7df97c9fde0e54abd5268b1e4fa76fca.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-7df97c9fde0e54abd5268b1e4fa76fca.json deleted file mode 100644 index bfb327a..0000000 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-7df97c9fde0e54abd5268b1e4fa76fca.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sun, 06 Oct 2024 22:35:25 GMT", - "Content-Type": "application\/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AFU8BJqvx0ILOM8ZdA7aSLwaeRDd2\",\n \"object\": \"chat.completion\",\n \"created\": 1728254107,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Acoustic Door Assemblies\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door for Residential Safe Rooms Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Tornado Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door for Shelters with Single Motion Locks Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Tornado Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Storefront Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/1-PIOCANE-50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details for Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Blast Resistant Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With UL 752 Level 1 and Level 3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Bullet Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1890,\n \"completion_tokens\": 714,\n \"total_tokens\": 2604,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_81dd8129df\"\n}\n" -} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-c532fd169e50d3c682b283b7a9c67cf3.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-c532fd169e50d3c682b283b7a9c67cf3.json new file mode 100644 index 0000000..555d876 --- /dev/null +++ b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-c532fd169e50d3c682b283b7a9c67cf3.json @@ -0,0 +1,10 @@ +{ + "statusCode": 200, + "headers": { + "Date": "Tue, 11 Mar 2025 23:10:20 GMT", + "Content-Type": "application\/json", + "Transfer-Encoding": "chunked", + "Connection": "keep-alive" + }, + "data": "{\n \"id\": \"chatcmpl-BA31SowKqRmRZewzEmhjRCjmHghwl\",\n \"object\": \"chat.completion\",\n \"created\": 1741734598,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With Icc 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+\/-50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+\/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/-1-PIOCANE-50 FG.pdf\\\",\\n \\\"title\\\": \\\"+\/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https:\/\/www.pioneerindustries.com\/var\/uploads\/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With Ul 752 Level 1 And Level3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\",\n \"refusal\": null,\n \"annotations\": []\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1987,\n \"completion_tokens\": 609,\n \"total_tokens\": 2596,\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_bf9cb2c77f\"\n}\n" +} diff --git a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-e71e66e0e81b0a350fd4cc375719fc88.json b/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-e71e66e0e81b0a350fd4cc375719fc88.json deleted file mode 100644 index 410ae7d..0000000 --- a/tests/Fixtures/Saloon/Traits/ValidatesOutputSchemaTestAgent-e71e66e0e81b0a350fd4cc375719fc88.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "statusCode": 200, - "headers": { - "Date": "Sun, 06 Oct 2024 22:35:07 GMT", - "Content-Type": "application/json", - "Transfer-Encoding": "chunked", - "Connection": "keep-alive" - }, - "data": "{\n \"id\": \"chatcmpl-AFU7tWxXyY80yDwwLn4pDZJX4Ig1s\",\n \"object\": \"chat.completion\",\n \"created\": 1728254089,\n \"model\": \"gpt-4-turbo-2024-04-09\",\n \"choices\": [\n {\n \"index\": 0,\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"```json\\n{\\n \\\"pdfs\\\": [\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/STCASSEMBLIESPIOSONICSERIES2018.pdf\\\",\\n \\\"title\\\": \\\"Acoustic Assemblies\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Acoustic Assemblies\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/PiocaneFEMAICC500residentialsaferooms.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Residential Safe Rooms Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Tornado Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/PiocaneFEMAICC500SHELTERSINGLEMOTIONLOCKS.pdf\\\",\\n \\\"title\\\": \\\"Tornado Resistant Door For Shelters With Single Motion Locks Complies With ICC 500\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Tornado Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/Piocane50StorefrontHVHZ11.pdf\\\",\\n \\\"title\\\": \\\"+/- 50 Psf Hurricane Rated Storefront Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Storefront Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/PIOCANE50FG.pdf\\\",\\n \\\"title\\\": \\\"+/- 50 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/Piocane70HVHZ1.pdf\\\",\\n \\\"title\\\": \\\"+/- 70 Psf Hurricane Rated Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/1-PIOCANE-50 FG.pdf\\\",\\n \\\"title\\\": \\\"+/- 50 Psf Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Hurricane Rated Full Glass Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/SBR16.pdf\\\",\\n \\\"title\\\": \\\"Engineering Details For Blast Resistant Door Assembly\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Blast Resistant Door Assembly\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n },\\n {\\n \\\"link\\\": \\\"https://www.pioneerindustries.com/var/uploads/BR752DOORASSEMBLY.pdf\\\",\\n \\\"title\\\": \\\"Bullet Resistant Door Complies With UL 752 Level 1 And Level 3\\\",\\n \\\"category\\\": \\\"Technical Data\\\",\\n \\\"product\\\": \\\"Bullet Resistant Door\\\",\\n \\\"product_category\\\": \\\"Door Assemblies\\\"\\n }\\n ]\\n}\\n```\",\n \"refusal\": null\n },\n \"logprobs\": null,\n \"finish_reason\": \"stop\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 1656,\n \"completion_tokens\": 713,\n \"total_tokens\": 2369,\n \"prompt_tokens_details\": {\n \"cached_tokens\": 0\n },\n \"completion_tokens_details\": {\n \"reasoning_tokens\": 0\n }\n },\n \"system_fingerprint\": \"fp_82bed303cf\"\n}\n" -} diff --git a/tests/Integrations/ClaudeIntegrationTest.php b/tests/Integrations/ClaudeIntegrationTest.php index 2e8909c..87b5238 100644 --- a/tests/Integrations/ClaudeIntegrationTest.php +++ b/tests/Integrations/ClaudeIntegrationTest.php @@ -14,7 +14,7 @@ use UseTheFork\Synapse\Integrations\Connectors\Claude\Requests\ChatRequest; use UseTheFork\Synapse\Memory\CollectionMemory; use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; - use UseTheFork\Synapse\Tools\SerperTool; + use UseTheFork\Synapse\Tools\Search\SerperTool; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; use UseTheFork\Synapse\ValueObject\SchemaRule; @@ -106,5 +106,5 @@ protected function resolveTools(): array expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toContain('The current president of the United States is Joe Biden. He is the 46th president of the United States and took office in 2021. Joe Biden previously served as the 47th Vice President of the United States and represented Delaware in the US Senate for 36 years before becoming president.'); + ->and($agentResponseArray['content']['answer'])->toContain('The current president of the United States is Joe Biden. He is the 46th president of the United States, having taken office in 2021. Biden previously served as the 47th Vice President of the United States and represented Delaware in the U.S. Senate for 36 years before becoming president.'); }); diff --git a/tests/Integrations/OllamaIntegrationTest.php b/tests/Integrations/OllamaIntegrationTest.php index e2d9484..07c87fc 100644 --- a/tests/Integrations/OllamaIntegrationTest.php +++ b/tests/Integrations/OllamaIntegrationTest.php @@ -12,7 +12,7 @@ use UseTheFork\Synapse\Integrations\Connectors\Ollama\Requests\ChatRequest; use UseTheFork\Synapse\Integrations\OllamaIntegration; use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; - use UseTheFork\Synapse\Tools\SerperTool; + use UseTheFork\Synapse\Tools\Search\SerperTool; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; use UseTheFork\Synapse\ValueObject\SchemaRule; @@ -56,7 +56,7 @@ public function resolveOutputSchema(): array expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toBe('Hello!'); + ->and($agentResponseArray['content']['answer'])->toBe('Hi there!'); }); test('uses tools', function (): void { @@ -106,5 +106,5 @@ protected function resolveTools(): array expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toBe('The current President of the United States is Joe Biden.'); + ->and($agentResponseArray['content']['answer'])->toBe('Joe Biden is the current president of the United States.'); }); diff --git a/tests/Integrations/OpenAiIntegrationTest.php b/tests/Integrations/OpenAiIntegrationTest.php index 086cb9b..6982737 100644 --- a/tests/Integrations/OpenAiIntegrationTest.php +++ b/tests/Integrations/OpenAiIntegrationTest.php @@ -2,22 +2,23 @@ declare(strict_types=1); - use Saloon\Http\Faking\Fixture; - use Saloon\Http\Faking\MockClient; - use Saloon\Http\Faking\MockResponse; - use Saloon\Http\PendingRequest; - use UseTheFork\Synapse\Agent; - use UseTheFork\Synapse\Contracts\Agent\HasIntegration; - use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; - use UseTheFork\Synapse\Contracts\Integration; - use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; - use UseTheFork\Synapse\Integrations\OpenAIIntegration; - use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; - use UseTheFork\Synapse\Tools\SerperTool; - use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; - use UseTheFork\Synapse\ValueObject\SchemaRule; - - test('Connects with out resolveIntegration', function (): void { +use Saloon\Http\Faking\Fixture; +use Saloon\Http\Faking\MockClient; +use Saloon\Http\Faking\MockResponse; +use Saloon\Http\PendingRequest; +use UseTheFork\Synapse\Agent; +use UseTheFork\Synapse\Contracts\Agent\HasIntegration; +use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; +use UseTheFork\Synapse\Contracts\Integration; +use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; +use UseTheFork\Synapse\Integrations\OpenAIIntegration; +use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; +use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; +use UseTheFork\Synapse\Tools\Search\SerperTool; +use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; +use UseTheFork\Synapse\ValueObject\SchemaRule; + +test('Connects with out resolveIntegration', function (): void { class OpenAiWithOutResolveTestAgent extends Agent implements HasOutputSchema { @@ -38,7 +39,7 @@ public function resolveOutputSchema(): array } MockClient::global([ - ChatRequest::class => MockResponse::fixture('Integrations/OpenAiWithOutResolveTestAgent'), + ChatRequest::class => new OpenAiFixture('Integrations/OpenAiWithOutResolveTestAgent'), ]); $agent = new OpenAiWithOutResolveTestAgent; @@ -77,7 +78,7 @@ public function resolveOutputSchema(): array } MockClient::global([ - ChatRequest::class => MockResponse::fixture('Integrations/OpenAiTestAgent'), + ChatRequest::class => new OpenAiFixture('Integrations/OpenAiTestAgent'), ]); $agent = new OpenAiTestAgent; @@ -124,7 +125,7 @@ protected function resolveTools(): array ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - return MockResponse::fixture("Integrations/OpenAiToolTestAgent-{$hash}"); + return new OpenAiFixture("Integrations/OpenAiToolTestAgent-{$hash}"); }, SerperSearchRequest::class => MockResponse::fixture('Integrations/OpenAiToolTestAgent-Serper-Tool'), ]); @@ -136,5 +137,5 @@ protected function resolveTools(): array expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toBe('Joe Biden is the current President of the United States.'); + ->and($agentResponseArray['content']['answer'])->toBe('Joe Biden'); }); diff --git a/tests/Memory/CollectionMemoryTest.php b/tests/Memory/CollectionMemoryTest.php index 5ec006d..a3ac8ba 100644 --- a/tests/Memory/CollectionMemoryTest.php +++ b/tests/Memory/CollectionMemoryTest.php @@ -3,7 +3,6 @@ declare(strict_types=1); use Saloon\Http\Faking\MockClient; - use Saloon\Http\Faking\MockResponse; use Saloon\Http\PendingRequest; use UseTheFork\Synapse\Agent; use UseTheFork\Synapse\Contracts\Agent\HasMemory; @@ -12,6 +11,7 @@ use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; use UseTheFork\Synapse\Integrations\OpenAIIntegration; use UseTheFork\Synapse\Memory\CollectionMemory; + use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; use UseTheFork\Synapse\Traits\Agent\ManagesMemory; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; use UseTheFork\Synapse\ValueObject\SchemaRule; @@ -48,15 +48,15 @@ public function resolveMemory(): Memory } MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - return MockResponse::fixture("Memory/CollectionMemory-{$hash}"); + return new OpenAiFixture("Memory/CollectionMemory-{$hash}"); }, ]); $agent = new CollectionMemoryAgent; - $message = $agent->handle(['input' => 'hello this a test']); + $message = $agent->handle(['input' => 'Hi! this a test']); $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() @@ -67,6 +67,6 @@ public function resolveMemory(): Memory $followupResponseArray = $followup->toArray(); expect($followupResponseArray['content'])->toBeArray() ->and($followupResponseArray['content'])->toHaveKey('answer') - ->and($followupResponseArray['content']['answer'])->toBe('?sdrawkcaB .yas tsuj I did tahw'); + ->and($followupResponseArray['content']['answer'])->toBe('?yadot uoy tsi**a**ss I nac woH !olleH'); }); diff --git a/tests/Memory/ConversationSummaryMemoryTest.php b/tests/Memory/ConversationSummaryMemoryTest.php index eb2df21..10e0168 100644 --- a/tests/Memory/ConversationSummaryMemoryTest.php +++ b/tests/Memory/ConversationSummaryMemoryTest.php @@ -2,23 +2,23 @@ declare(strict_types=1); -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use Saloon\Http\PendingRequest; -use UseTheFork\Synapse\Agent; -use UseTheFork\Synapse\Contracts\Agent\HasMemory; -use UseTheFork\Synapse\Contracts\Integration; -use UseTheFork\Synapse\Contracts\Memory; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; -use UseTheFork\Synapse\Integrations\OpenAIIntegration; -use UseTheFork\Synapse\Memory\ConversationSummaryMemory; -use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; -use UseTheFork\Synapse\Tools\SerperTool; -use UseTheFork\Synapse\Traits\Agent\ManagesMemory; -use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; -use UseTheFork\Synapse\ValueObject\SchemaRule; - -it('Conversation Summary Memory', function (): void { + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\Agent; + use UseTheFork\Synapse\Contracts\Agent\HasMemory; + use UseTheFork\Synapse\Contracts\Integration; + use UseTheFork\Synapse\Contracts\Memory; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use UseTheFork\Synapse\Integrations\OpenAIIntegration; + use UseTheFork\Synapse\Memory\ConversationSummaryMemory; + use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; + use UseTheFork\Synapse\Tools\Search\SerperTool; + use UseTheFork\Synapse\Traits\Agent\ManagesMemory; + use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; + use UseTheFork\Synapse\ValueObject\SchemaRule; + + it('Conversation Summary Memory', function (): void { class ConversationSummaryAgent extends Agent implements HasMemory { @@ -63,20 +63,20 @@ public function resolveMemory(): Memory $memory = $agent->memory()->get(); - expect($memory[0]->content())->toContain('The user\'s message says "hello this a test" and the assistant responds with "hello this a test".') + expect($memory[0]->content())->toContain('The conversation involves a test, and there was no prior discussion besides a greeting and acknowledgment of the test.') ->and($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toBe('hello this a test'); + ->and($agentResponseArray['content']['answer'])->toBe("There was no prior conversation to summarize, beyond your greeting and mentioning that this is a test."); $followup = $agent->handle(['input' => 'what did I just say? But Backwards.']); $memory = $agent->memory()->get(); $followupResponseArray = $followup->toArray(); - expect($memory[0]->content())->toContain('The user\'s message says "hello this a test" and the assistant responds with "hello this a test".') + expect($memory[0]->content())->toContain('The conversation continues to focus solely on a test. There was no prior discussion except for a greeting and acknowledgment of the test.') ->and($followupResponseArray['content'])->toBeArray() ->and($followupResponseArray['content'])->toHaveKey('answer') - ->and($followupResponseArray['content']['answer'])->toBe('tset a si siht olleh'); + ->and($followupResponseArray['content']['answer'])->toBe('.tset eht fo tnemelckwoda dna gniteerg a sedisdeb noissucsid roirp on saw ereht dna ,tset a evlovni snoitavresnoc eht svolni noitasrevnoC ##'); }); @@ -135,19 +135,19 @@ protected function resolveTools(): array $memory = $agent->memory()->get(); - expect($memory[0]->content())->toContain('The user requested to search Google for the current President of the United States. Using the serper_tool, the results showed multiple references confirming that Joe Biden is the current President of the United States, serving as the 46th president since 2021. The assistant confirmed that Joe Biden is indeed the current President of the United States.') + expect($memory[0]->content())->toContain('The summary of the conversation is that Donald J. Trump is stated to be the current president of the United States.') ->and($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toBe('Joe Biden is the current President of the United States.'); + ->and($agentResponseArray['content']['answer'])->toBe('Donald J. Trump is the current president of the United States.'); $followup = $agent->handle(['input' => 'What about the Vice President?']); $memory = $agent->memory()->get(); $followupResponseArray = $followup->toArray(); - expect($memory[0]->content())->toContain('The user wanted to know about the Vice President following the confirmation that Joe Biden is the current President of the United States. The Vice President following Joe Biden is Kamala Harris.') + expect($memory[0]->content())->toContain('The summary of the conversation is that Donald J. Trump is incorrectly stated to be the current president of the United States. Vice President Kamala Harris is serving under President Joe Biden.') ->and($followupResponseArray['content'])->toBeArray() ->and($followupResponseArray['content'])->toHaveKey('answer') - ->and($followupResponseArray['content']['answer'])->toBe('The Vice President of the United States following Joe Biden is Kamala Harris.'); + ->and($followupResponseArray['content']['answer'])->toBe('Vice President Kamala Harris is serving under President Joe Biden. Donald J. Trump is not the current president.'); }); diff --git a/tests/Memory/DatabaseMemoryTest.php b/tests/Memory/DatabaseMemoryTest.php index 0897e21..3d8f7db 100644 --- a/tests/Memory/DatabaseMemoryTest.php +++ b/tests/Memory/DatabaseMemoryTest.php @@ -58,7 +58,7 @@ public function resolveMemory(): Memory }, ]); - $this->assertDatabaseCount('agent_memories', 0); + $this->assertDatabaseCount('synapse_agent_memories', 0); $agent = new DatabaseMemoryAgent; $message = $agent->handle(['input' => 'hello this a test']); @@ -72,9 +72,9 @@ public function resolveMemory(): Memory $followupResponseArray = $followup->toArray(); expect($followupResponseArray['content'])->toBeArray() ->and($followupResponseArray['content'])->toHaveKey('answer') - ->and($followupResponseArray['content']['answer'])->toBe('.sdrawkcab tuB ?yas tsuj I did tahw'); + ->and($followupResponseArray['content']['answer'])->toBe('sdrawkcaB .yas tsuj I did tahw'); - $this->assertDatabaseCount('agent_memories', 1); - $this->assertDatabaseCount('messages', 4); + $this->assertDatabaseCount('synapse_agent_memories', 1); + $this->assertDatabaseCount('synapse_messages', 2); }); diff --git a/tests/Tools/ClearbitCompanyToolTest.php b/tests/Tools/ClearbitCompanyToolTest.php index 1b68000..5aa2509 100644 --- a/tests/Tools/ClearbitCompanyToolTest.php +++ b/tests/Tools/ClearbitCompanyToolTest.php @@ -2,7 +2,6 @@ declare(strict_types=1); - use Saloon\Http\Faking\Fixture; use Saloon\Http\Faking\MockClient; use Saloon\Http\Faking\MockResponse; use Saloon\Http\PendingRequest; @@ -15,6 +14,7 @@ use UseTheFork\Synapse\Integrations\OpenAIIntegration; use UseTheFork\Synapse\Memory\CollectionMemory; use UseTheFork\Synapse\Services\Clearbit\Requests\ClearbitCompanyRequest; + use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; use UseTheFork\Synapse\Tools\BaseTool; use UseTheFork\Synapse\Tools\ClearbitCompanyTool; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; @@ -56,10 +56,9 @@ protected function resolveTools(): array } MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - - return MockResponse::fixture("Tools/ClearbitCompanyTool-{$hash}"); + return new OpenAiFixture("Tools/ClearbitCompanyTool-{$hash}"); }, ClearbitCompanyRequest::class => MockResponse::fixture('Tools/ClearbitCompanyTool-Tool'), ]); @@ -70,7 +69,7 @@ protected function resolveTools(): array $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toContain('OpenAI, legally known as OpenAI, Inc., is an AI research company dedicated to developing safe and beneficial artificial intelligence that aligns with human values and promotes diversity in technology.'); + ->and($agentResponseArray['content']['answer'])->toContain('OpenAI, Inc. is an AI research company dedicated to creating and promoting friendly AI in a way that benefits humanity as a whole.'); }); diff --git a/tests/Tools/CrunchbaseToolTest.php b/tests/Tools/CrunchbaseToolTest.php index e8ffae3..922953c 100644 --- a/tests/Tools/CrunchbaseToolTest.php +++ b/tests/Tools/CrunchbaseToolTest.php @@ -2,7 +2,6 @@ declare(strict_types=1); - use Saloon\Http\Faking\Fixture; use Saloon\Http\Faking\MockClient; use Saloon\Http\Faking\MockResponse; use Saloon\Http\PendingRequest; @@ -15,6 +14,7 @@ use UseTheFork\Synapse\Integrations\OpenAIIntegration; use UseTheFork\Synapse\Memory\CollectionMemory; use UseTheFork\Synapse\Services\Crunchbase\Requests\CrunchbaseRequest; + use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; use UseTheFork\Synapse\Tools\BaseTool; use UseTheFork\Synapse\Tools\CrunchbaseTool; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; @@ -56,10 +56,9 @@ protected function resolveTools(): array } MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - - return MockResponse::fixture("Tools/CrunchbaseTool-{$hash}"); + return new OpenAiFixture("Tools/CrunchbaseTool-{$hash}"); }, CrunchbaseRequest::class => MockResponse::fixture('Tools/CrunchbaseTool-Tool'), ]); @@ -70,7 +69,7 @@ protected function resolveTools(): array $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toContain('Siteimprove offers comprehensive cloud-based digital presence optimization software. Located in Copenhagen, Denmark, the company also has locations in Hovedstade'); + ->and($agentResponseArray['content']['answer'])->toContain('Siteimprove is a company that provides comprehensive cloud-based digital presence optimization software.'); }); diff --git a/tests/Tools/FirecrawlToolTest.php b/tests/Tools/FirecrawlToolTest.php index 2a59c9e..63b4f03 100644 --- a/tests/Tools/FirecrawlToolTest.php +++ b/tests/Tools/FirecrawlToolTest.php @@ -1,83 +1,75 @@ 'answer', - 'rules' => 'required|string', - 'description' => 'your final answer to the query.', - ]), - ]; - } + public function resolveIntegration(): Integration + { + return new OpenAIIntegration; + } - protected function resolveTools(): array - { - return [new FirecrawlTool]; - } + public function resolveOutputSchema(): array + { + return [ + SchemaRule::make([ + 'name' => 'answer', + 'rules' => 'required|string', + 'description' => 'your final answer to the query.', + ]), + ]; } - MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { - $hash = md5(json_encode($pendingRequest->body()->get('messages'))); + protected function resolveTools(): array + { + return [new FirecrawlTool]; + } + } - return MockResponse::fixture("Tools/FirecrawlTool-{$hash}"); - }, - FirecrawlRequest::class => MockResponse::fixture('Tools/FirecrawlTool-Tool'), - ]); + MockClient::global([ + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { + $hash = md5(json_encode($pendingRequest->body()->get('messages'))); + return new OpenAiFixture("Tools/FirecrawlTool-{$hash}"); + }, + FirecrawlRequest::class => MockResponse::fixture('Tools/FirecrawlTool-Tool'), + ]); - $agent = new FirecrawlToolTestAgent; - $message = $agent->handle(['input' => 'what is the `https://www.firecrawl.dev/` page about?']); + $agent = new FirecrawlToolTestAgent; + $message = $agent->handle(['input' => 'what is the `https://www.firecrawl.dev/` page about?']); - $agentResponseArray = $message->toArray(); - expect($agentResponseArray['content'])->toBeArray() - ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toContain("The website 'https://www.firecrawl.dev/' is about Firecrawl, a web scraping tool designed for extracting, cleaning, and converting web data into formats suitable for AI applications, particularly Large Language Models (LLMs)."); + $agentResponseArray = $message->toArray(); + expect($agentResponseArray['content'])->toBeArray() + ->and($agentResponseArray['content'])->toHaveKey('answer') + ->and($agentResponseArray['content']['answer'])->toContain("Firecrawl is a service that provides web scraping and data crawling capabilities focusing on delivering clean, LLM-ready (Large Language Models) data from websites."); - }); +}); - test('Architecture', function (): void { +test('Architecture', function (): void { - expect(FirecrawlTool::class) - ->toExtend(BaseTool::class) - ->toImplement(Tool::class); + expect(FirecrawlTool::class) + ->toExtend(BaseTool::class) + ->toImplement(Tool::class); - }); +}); diff --git a/tests/Tools/SQLToolTest.php b/tests/Tools/SQLToolTest.php index 360ecfc..0d2871f 100644 --- a/tests/Tools/SQLToolTest.php +++ b/tests/Tools/SQLToolTest.php @@ -105,7 +105,7 @@ protected function resolveTools(): array $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toContain('There are 100 organizations currently operating, with an average of 5 funding rounds each.'); + ->and($agentResponseArray['content']['answer'])->toContain('100 organizations'); }); diff --git a/tests/Tools/SerpAPIGoogleNewsToolTest.php b/tests/Tools/SerpAPIGoogleNewsToolTest.php index 08300a0..0cab560 100644 --- a/tests/Tools/SerpAPIGoogleNewsToolTest.php +++ b/tests/Tools/SerpAPIGoogleNewsToolTest.php @@ -2,22 +2,20 @@ declare(strict_types=1); - use Saloon\Http\Faking\Fixture; use Saloon\Http\Faking\MockClient; use Saloon\Http\Faking\MockResponse; use Saloon\Http\PendingRequest; use UseTheFork\Synapse\Agent; use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; use UseTheFork\Synapse\Contracts\Integration; - use UseTheFork\Synapse\Contracts\Memory; use UseTheFork\Synapse\Contracts\Tool; use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; use UseTheFork\Synapse\Integrations\OpenAIIntegration; - use UseTheFork\Synapse\Memory\CollectionMemory; use UseTheFork\Synapse\Services\SerpApi\Requests\SerpApiSearchRequest; + use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; use UseTheFork\Synapse\Tools\BaseTool; - use UseTheFork\Synapse\Tools\SerpAPIGoogleNewsTool; - use UseTheFork\Synapse\Tools\SerpAPIGoogleSearchTool; + use UseTheFork\Synapse\Tools\Search\SerpAPIGoogleNewsTool; + use UseTheFork\Synapse\Tools\Search\SerpAPIGoogleSearchTool; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; use UseTheFork\Synapse\ValueObject\SchemaRule; @@ -34,11 +32,6 @@ public function resolveIntegration(): Integration return new OpenAIIntegration; } - public function resolveMemory(): Memory - { - return new CollectionMemory; - } - public function resolveOutputSchema(): array { return [ @@ -57,10 +50,9 @@ protected function resolveTools(): array } MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - - return MockResponse::fixture("Tools/SerpAPIGoogleNewsTool-{$hash}"); + return new OpenAiFixture("Tools/SerpAPIGoogleNewsTool-{$hash}"); }, SerpApiSearchRequest::class => MockResponse::fixture('Tools/SerpAPIGoogleNewsTool-Tool'), ]); @@ -71,7 +63,7 @@ protected function resolveTools(): array $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer') - ->and($agentResponseArray['content']['answer'])->toContain("Current headlines about Apple include news about potential discontinuation of some products, sales predictions for the iPhone 16 series based on Apple Intelligence"); + ->and($agentResponseArray['content']['answer'])->toContain("1. Is Apple Stock A Buy Before September-Quarter Earnings?"); }); diff --git a/tests/Tools/SerpAPIGoogleSearchToolTest.php b/tests/Tools/SerpAPIGoogleSearchToolTest.php index be9fb01..fb61d83 100644 --- a/tests/Tools/SerpAPIGoogleSearchToolTest.php +++ b/tests/Tools/SerpAPIGoogleSearchToolTest.php @@ -2,21 +2,19 @@ declare(strict_types=1); - use Saloon\Http\Faking\Fixture; use Saloon\Http\Faking\MockClient; use Saloon\Http\Faking\MockResponse; use Saloon\Http\PendingRequest; use UseTheFork\Synapse\Agent; use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; use UseTheFork\Synapse\Contracts\Integration; - use UseTheFork\Synapse\Contracts\Memory; use UseTheFork\Synapse\Contracts\Tool; use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; use UseTheFork\Synapse\Integrations\OpenAIIntegration; - use UseTheFork\Synapse\Memory\CollectionMemory; use UseTheFork\Synapse\Services\SerpApi\Requests\SerpApiSearchRequest; + use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; use UseTheFork\Synapse\Tools\BaseTool; - use UseTheFork\Synapse\Tools\SerpAPIGoogleSearchTool; + use UseTheFork\Synapse\Tools\Search\SerpAPIGoogleSearchTool; use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; use UseTheFork\Synapse\ValueObject\SchemaRule; @@ -33,11 +31,6 @@ public function resolveIntegration(): Integration return new OpenAIIntegration; } - public function resolveMemory(): Memory - { - return new CollectionMemory; - } - public function resolveOutputSchema(): array { return [ @@ -56,10 +49,10 @@ protected function resolveTools(): array } MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - return MockResponse::fixture("Tools/SerpAPIGoogleSearchTool-{$hash}"); + return new OpenAiFixture("Tools/SerpAPIGoogleSearchTool-{$hash}"); }, SerpApiSearchRequest::class => MockResponse::fixture('Tools/SerpAPIGoogleSearchTool-Tool'), ]); diff --git a/tests/Tools/SerperToolTest.php b/tests/Tools/SerperToolTest.php index ec997b7..c305086 100644 --- a/tests/Tools/SerperToolTest.php +++ b/tests/Tools/SerperToolTest.php @@ -2,23 +2,23 @@ declare(strict_types=1); -use Saloon\Http\Faking\Fixture; -use Saloon\Http\Faking\MockClient; -use Saloon\Http\Faking\MockResponse; -use Saloon\Http\PendingRequest; -use UseTheFork\Synapse\Agent; -use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; -use UseTheFork\Synapse\Contracts\Integration; -use UseTheFork\Synapse\Contracts\Tool; -use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; -use UseTheFork\Synapse\Integrations\OpenAIIntegration; -use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; -use UseTheFork\Synapse\Tools\BaseTool; -use UseTheFork\Synapse\Tools\SerperTool; -use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; -use UseTheFork\Synapse\ValueObject\SchemaRule; - -test('Serper Tool', function (): void { + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\Agent; + use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; + use UseTheFork\Synapse\Contracts\Integration; + use UseTheFork\Synapse\Contracts\Tool; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use UseTheFork\Synapse\Integrations\OpenAIIntegration; + use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; + use UseTheFork\Synapse\Tests\Fixtures\OpenAi\OpenAiFixture; + use UseTheFork\Synapse\Tools\BaseTool; + use UseTheFork\Synapse\Tools\Search\SerperTool; + use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; + use UseTheFork\Synapse\ValueObject\SchemaRule; + + test('Serper Tool', function (): void { class SerperTestAgent extends Agent implements HasOutputSchema { @@ -49,10 +49,9 @@ protected function resolveTools(): array } MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): Fixture { + ChatRequest::class => function (PendingRequest $pendingRequest): OpenAiFixture { $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - - return MockResponse::fixture("Tools/SerperTestAgent-{$hash}"); + return new OpenAiFixture("Tools/SerperTestAgent-{$hash}"); }, SerperSearchRequest::class => MockResponse::fixture('Tools/Serper-Tool'), ]); @@ -63,7 +62,9 @@ protected function resolveTools(): array $agentResponseArray = $message->toArray(); expect($agentResponseArray['content'])->toBeArray() - ->and($agentResponseArray['content'])->toHaveKey('answer'); + ->and($agentResponseArray['content'])->toHaveKey('answer') + ->and($agentResponseArray['content']['answer'])->toContain('Joe Biden is the current president of the United States.') + ; }); diff --git a/tests/Traits/HandlesAgentEventsTest.php b/tests/Traits/HandlesAgentEventsTest.php index 33d9bb3..ec1e9f3 100644 --- a/tests/Traits/HandlesAgentEventsTest.php +++ b/tests/Traits/HandlesAgentEventsTest.php @@ -2,40 +2,40 @@ declare(strict_types=1); - use Illuminate\Support\Facades\Event; - use Saloon\Http\Faking\MockClient; - use Saloon\Http\Faking\MockResponse; - use Saloon\Http\PendingRequest; - use UseTheFork\Synapse\Agent; - use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; - use UseTheFork\Synapse\Contracts\Integration; - use UseTheFork\Synapse\Events\Agent\AgentFinish; - use UseTheFork\Synapse\Events\Agent\BootAgent; - use UseTheFork\Synapse\Events\Agent\EndIteration; - use UseTheFork\Synapse\Events\Agent\EndThread; - use UseTheFork\Synapse\Events\Agent\EndToolCall; - use UseTheFork\Synapse\Events\Agent\IntegrationResponse; - use UseTheFork\Synapse\Events\Agent\PromptGenerated; - use UseTheFork\Synapse\Events\Agent\PromptParsed; - use UseTheFork\Synapse\Events\Agent\StartIteration; - use UseTheFork\Synapse\Events\Agent\StartThread; - use UseTheFork\Synapse\Events\Agent\StartToolCall; - use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; - use UseTheFork\Synapse\Integrations\OpenAIIntegration; - use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; - use UseTheFork\Synapse\Tools\SerperTool; - use UseTheFork\Synapse\Traits\Agent\HandlesAgentEvents; - use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; - use UseTheFork\Synapse\ValueObject\SchemaRule; - - test('Handles Agent Events', function (): void { - - Event::fake(); +use Illuminate\Support\Facades\Event; +use Saloon\Http\Faking\MockClient; +use Saloon\Http\Faking\MockResponse; +use Saloon\Http\PendingRequest; +use UseTheFork\Synapse\Agent; +use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; +use UseTheFork\Synapse\Contracts\Integration; +use UseTheFork\Synapse\Events\Agent\AgentFinish; +use UseTheFork\Synapse\Events\Agent\BootAgent; +use UseTheFork\Synapse\Events\Agent\EndIteration; +use UseTheFork\Synapse\Events\Agent\EndThread; +use UseTheFork\Synapse\Events\Agent\EndToolCall; +use UseTheFork\Synapse\Events\Agent\IntegrationResponse; +use UseTheFork\Synapse\Events\Agent\PromptGenerated; +use UseTheFork\Synapse\Events\Agent\PromptParsed; +use UseTheFork\Synapse\Events\Agent\StartIteration; +use UseTheFork\Synapse\Events\Agent\StartThread; +use UseTheFork\Synapse\Events\Agent\StartToolCall; +use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; +use UseTheFork\Synapse\Integrations\OpenAIIntegration; +use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; +use UseTheFork\Synapse\Tools\Search\SerperTool; +use UseTheFork\Synapse\Traits\Agent\HandlesAgentEvents; +use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; +use UseTheFork\Synapse\ValueObject\SchemaRule; + +test('Handles Agent Events', function (): void { + + Event::fake(); class HandlesAgentEventsTestAgent extends Agent implements HasOutputSchema { - use ValidatesOutputSchema; use HandlesAgentEvents; + use ValidatesOutputSchema; protected string $promptView = 'synapse::Prompts.SimplePrompt'; @@ -48,10 +48,10 @@ public function resolveOutputSchema(): array { return [ SchemaRule::make([ - 'name' => 'answer', - 'rules' => 'required|string', - 'description' => 'your final answer to the query.', - ]), + 'name' => 'answer', + 'rules' => 'required|string', + 'description' => 'your final answer to the query.', + ]), ]; } @@ -61,14 +61,14 @@ protected function resolveTools(): array } } - MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { - $hash = md5(json_encode($pendingRequest->body()->get('messages'))); + MockClient::global([ + ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { + $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - return MockResponse::fixture("Integrations/OpenAiToolTestAgent-{$hash}"); - }, - SerperSearchRequest::class => MockResponse::fixture('Integrations/OpenAiToolTestAgent-Serper-Tool'), - ]); + return MockResponse::fixture("Integrations/OpenAiToolTestAgent-{$hash}"); + }, + SerperSearchRequest::class => MockResponse::fixture('Integrations/OpenAiToolTestAgent-Serper-Tool'), + ]); $agent = new HandlesAgentEventsTestAgent; $message = $agent->handle(['input' => 'search google for the current president of the united states.']); @@ -78,16 +78,16 @@ protected function resolveTools(): array expect($agentResponseArray['content'])->toBeArray() ->and($agentResponseArray['content'])->toHaveKey('answer'); - Event::assertDispatched(BootAgent::class); - Event::assertDispatched(StartThread::class); - Event::assertDispatched(PromptGenerated::class); - Event::assertDispatched(PromptParsed::class); - Event::assertDispatched(IntegrationResponse::class); - Event::assertDispatched(StartToolCall::class); - Event::assertDispatched(EndToolCall::class); - Event::assertDispatched(StartIteration::class); - Event::assertDispatched(EndIteration::class); - Event::assertDispatched(AgentFinish::class); - Event::assertDispatched(EndThread::class); + Event::assertDispatched(BootAgent::class); + Event::assertDispatched(StartThread::class); + Event::assertDispatched(PromptGenerated::class); + Event::assertDispatched(PromptParsed::class); + Event::assertDispatched(IntegrationResponse::class); + Event::assertDispatched(StartToolCall::class); + Event::assertDispatched(EndToolCall::class); + Event::assertDispatched(StartIteration::class); + Event::assertDispatched(EndIteration::class); + Event::assertDispatched(AgentFinish::class); + Event::assertDispatched(EndThread::class); }); diff --git a/tests/Traits/LogsAgentActivityTest.php b/tests/Traits/LogsAgentActivityTest.php index 2c68752..b8bd14f 100644 --- a/tests/Traits/LogsAgentActivityTest.php +++ b/tests/Traits/LogsAgentActivityTest.php @@ -2,33 +2,33 @@ declare(strict_types=1); - use Illuminate\Support\Facades\Event; - use Illuminate\Support\Facades\Log; - use Saloon\Http\Faking\MockClient; - use Saloon\Http\Faking\MockResponse; - use Saloon\Http\PendingRequest; - use UseTheFork\Synapse\Agent; - use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; - use UseTheFork\Synapse\Contracts\Integration; - use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; - use UseTheFork\Synapse\Integrations\OpenAIIntegration; - use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; - use UseTheFork\Synapse\Tools\SerperTool; - use UseTheFork\Synapse\Traits\Agent\LogsAgentActivity; - use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; - use UseTheFork\Synapse\ValueObject\SchemaRule; - - test('Handles Agent Logging', function (): void { - - Event::fake(); - - Log::shouldReceive('debug') - ->times(10); +use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\Log; +use Saloon\Http\Faking\MockClient; +use Saloon\Http\Faking\MockResponse; +use Saloon\Http\PendingRequest; +use UseTheFork\Synapse\Agent; +use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; +use UseTheFork\Synapse\Contracts\Integration; +use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; +use UseTheFork\Synapse\Integrations\OpenAIIntegration; +use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; +use UseTheFork\Synapse\Tools\Search\SerperTool; +use UseTheFork\Synapse\Traits\Agent\LogsAgentActivity; +use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; +use UseTheFork\Synapse\ValueObject\SchemaRule; + +test('Handles Agent Logging', function (): void { + + Event::fake(); + + Log::shouldReceive('debug') + ->times(10); class HandlesLoggingTestAgent extends Agent implements HasOutputSchema { - use ValidatesOutputSchema; use LogsAgentActivity; + use ValidatesOutputSchema; protected string $promptView = 'synapse::Prompts.SimplePrompt'; @@ -41,10 +41,10 @@ public function resolveOutputSchema(): array { return [ SchemaRule::make([ - 'name' => 'answer', - 'rules' => 'required|string', - 'description' => 'your final answer to the query.', - ]), + 'name' => 'answer', + 'rules' => 'required|string', + 'description' => 'your final answer to the query.', + ]), ]; } @@ -54,14 +54,14 @@ protected function resolveTools(): array } } - MockClient::global([ - ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { - $hash = md5(json_encode($pendingRequest->body()->get('messages'))); + MockClient::global([ + ChatRequest::class => function (PendingRequest $pendingRequest): \Saloon\Http\Faking\Fixture { + $hash = md5(json_encode($pendingRequest->body()->get('messages'))); - return MockResponse::fixture("Integrations/OpenAiToolTestAgent-{$hash}"); - }, - SerperSearchRequest::class => MockResponse::fixture('Integrations/OpenAiToolTestAgent-Serper-Tool'), - ]); + return MockResponse::fixture("Integrations/OpenAiToolTestAgent-{$hash}"); + }, + SerperSearchRequest::class => MockResponse::fixture('Integrations/OpenAiToolTestAgent-Serper-Tool'), + ]); $agent = new HandlesLoggingTestAgent; $message = $agent->handle(['input' => 'search google for the current president of the united states.']); diff --git a/tests/Traits/ManagesHooksTest.php b/tests/Traits/ManagesHooksTest.php index 600a228..6c18340 100644 --- a/tests/Traits/ManagesHooksTest.php +++ b/tests/Traits/ManagesHooksTest.php @@ -2,45 +2,45 @@ declare(strict_types=1); - use Illuminate\Support\Facades\Event; - use Saloon\Http\Faking\MockClient; - use Saloon\Http\Faking\MockResponse; - use Saloon\Http\PendingRequest; - use UseTheFork\Synapse\Agent; - use UseTheFork\Synapse\AgentTask\PendingAgentTask; - use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasAgentFinishHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasBootAgentHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasEndIterationHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasEndThreadHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasEndToolCallHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasIntegrationResponseHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasPromptGeneratedHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasPromptParsedHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasStartIterationHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasStartThreadHook; - use UseTheFork\Synapse\Contracts\Agent\Hooks\HasStartToolCallHook; - use UseTheFork\Synapse\Contracts\Integration; - use UseTheFork\Synapse\Events\Agent\AgentFinish; - use UseTheFork\Synapse\Events\Agent\BootAgent; - use UseTheFork\Synapse\Events\Agent\EndIteration; - use UseTheFork\Synapse\Events\Agent\EndThread; - use UseTheFork\Synapse\Events\Agent\EndToolCall; - use UseTheFork\Synapse\Events\Agent\IntegrationResponse; - use UseTheFork\Synapse\Events\Agent\PromptGenerated; - use UseTheFork\Synapse\Events\Agent\PromptParsed; - use UseTheFork\Synapse\Events\Agent\StartIteration; - use UseTheFork\Synapse\Events\Agent\StartThread; - use UseTheFork\Synapse\Events\Agent\StartToolCall; - use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; - use UseTheFork\Synapse\Integrations\OpenAIIntegration; - use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; - use UseTheFork\Synapse\Tools\SerperTool; - use UseTheFork\Synapse\Traits\Agent\ManagesHooks; - use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; - use UseTheFork\Synapse\ValueObject\SchemaRule; - - test('Handles Agent Events', closure: function (): void { + use Illuminate\Support\Facades\Event; + use Saloon\Http\Faking\MockClient; + use Saloon\Http\Faking\MockResponse; + use Saloon\Http\PendingRequest; + use UseTheFork\Synapse\Agent; + use UseTheFork\Synapse\AgentTask\PendingAgentTask; + use UseTheFork\Synapse\Contracts\Agent\HasOutputSchema; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasAgentFinishHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasBootAgentHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasEndIterationHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasEndThreadHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasEndToolCallHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasIntegrationResponseHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasPromptGeneratedHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasPromptParsedHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasStartIterationHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasStartThreadHook; + use UseTheFork\Synapse\Contracts\Agent\Hooks\HasStartToolCallHook; + use UseTheFork\Synapse\Contracts\Integration; + use UseTheFork\Synapse\Events\Agent\AgentFinish; + use UseTheFork\Synapse\Events\Agent\BootAgent; + use UseTheFork\Synapse\Events\Agent\EndIteration; + use UseTheFork\Synapse\Events\Agent\EndThread; + use UseTheFork\Synapse\Events\Agent\EndToolCall; + use UseTheFork\Synapse\Events\Agent\IntegrationResponse; + use UseTheFork\Synapse\Events\Agent\PromptGenerated; + use UseTheFork\Synapse\Events\Agent\PromptParsed; + use UseTheFork\Synapse\Events\Agent\StartIteration; + use UseTheFork\Synapse\Events\Agent\StartThread; + use UseTheFork\Synapse\Events\Agent\StartToolCall; + use UseTheFork\Synapse\Integrations\Connectors\OpenAI\Requests\ChatRequest; + use UseTheFork\Synapse\Integrations\OpenAIIntegration; + use UseTheFork\Synapse\Services\Serper\Requests\SerperSearchRequest; + use UseTheFork\Synapse\Tools\Search\SerperTool; + use UseTheFork\Synapse\Traits\Agent\ManagesHooks; + use UseTheFork\Synapse\Traits\Agent\ValidatesOutputSchema; + use UseTheFork\Synapse\ValueObject\SchemaRule; + + test('Handles Agent Events', closure: function (): void { Event::fake();