unique-web-search 1.8.3__py3-none-any.whl → 1.9.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -46,7 +46,6 @@ class WebSearchTool(Tool[WebSearchConfig]):
46
46
  self.search_engine_service = get_search_engine_service(
47
47
  self.config.search_engine_config,
48
48
  self.language_model_service,
49
- self.language_model,
50
49
  )
51
50
  self.crawler_service = get_crawler_service(self.config.crawler_config)
52
51
  self.chunk_relevancy_sorter = ChunkRelevancySorter(self.event)
@@ -3,7 +3,6 @@ from functools import reduce
3
3
  from typing import TypeAlias
4
4
 
5
5
  from unique_toolkit import LanguageModelService
6
- from unique_toolkit._common.validators import LMI
7
6
 
8
7
  from unique_web_search.services.search_engine.base import (
9
8
  BaseSearchEngineConfig,
@@ -79,7 +78,6 @@ ENGINE_NAME_TO_CONFIG = {
79
78
  def get_search_engine_service(
80
79
  search_engine_config: SearchEngineConfigTypes,
81
80
  language_model_service: LanguageModelService,
82
- lmi: LMI,
83
81
  ):
84
82
  match search_engine_config.search_engine_name:
85
83
  case SearchEngineType.FIRECRAWL:
@@ -91,9 +89,9 @@ def get_search_engine_service(
91
89
  case SearchEngineType.TAVILY:
92
90
  return TavilySearch(search_engine_config)
93
91
  case SearchEngineType.BING:
94
- return BingSearch(search_engine_config, language_model_service, lmi)
92
+ return BingSearch(search_engine_config, language_model_service)
95
93
  case SearchEngineType.BRAVE:
96
- return BraveSearch(search_engine_config, language_model_service, lmi)
94
+ return BraveSearch(search_engine_config)
97
95
  case SearchEngineType.VERTEXAI:
98
96
  return VertexAI(search_engine_config)
99
97
  case SearchEngineType.CUSTOM_API:
@@ -2,11 +2,13 @@ import logging
2
2
  from typing import Literal
3
3
 
4
4
  from azure.ai.agents.models import ListSortOrder
5
- from pydantic import BaseModel, Field
5
+ from pydantic import BaseModel, Field, field_validator
6
6
  from unique_toolkit import LanguageModelService
7
- from unique_toolkit._common.validators import LMI
7
+ from unique_toolkit._common.validators import LMI, get_LMI_default_field
8
8
  from unique_toolkit.agentic.tools.config import get_configuration_dict
9
9
  from unique_toolkit.language_model.builder import MessagesBuilder
10
+ from unique_toolkit.language_model.default_language_model import DEFAULT_GPT_4o
11
+ from unique_toolkit.language_model.infos import ModelCapabilities
10
12
 
11
13
  from unique_web_search.services.search_engine.base import (
12
14
  BaseSearchEngineConfig,
@@ -47,6 +49,17 @@ class BingSearchConfig(
47
49
  BaseSearchEngineConfig[SearchEngineType.BING], BingSearchOptionalQueryParams
48
50
  ):
49
51
  search_engine_name: Literal[SearchEngineType.BING] = SearchEngineType.BING
52
+ language_model: LMI = get_LMI_default_field(DEFAULT_GPT_4o)
53
+
54
+ @field_validator("language_model", mode="after")
55
+ @classmethod
56
+ def validate_language_model(cls, v: LMI) -> LMI:
57
+ if ModelCapabilities.STRUCTURED_OUTPUT not in v.capabilities:
58
+ raise ValueError(
59
+ f"Language model '{v.name}' does not support structured output. "
60
+ f"BingSearch requires a model with structured output capability."
61
+ )
62
+ return v
50
63
 
51
64
 
52
65
  class BingSearch(SearchEngine[BingSearchConfig]):
@@ -54,11 +67,10 @@ class BingSearch(SearchEngine[BingSearchConfig]):
54
67
  self,
55
68
  config: BingSearchConfig,
56
69
  language_model_service: LanguageModelService,
57
- lmi: LMI,
58
70
  ):
59
71
  super().__init__(config)
60
72
  self.language_model_service = language_model_service
61
- self.lmi = lmi
73
+ self.lmi = config.language_model
62
74
  self.credentials = get_crendentials()
63
75
  self.is_configured = credentials_are_valid(self.credentials)
64
76
 
@@ -98,6 +98,11 @@ class CustomAPI(SearchEngine[CustomAPIConfig]):
98
98
  json=body,
99
99
  )
100
100
 
101
+ if not response.is_success:
102
+ raise ValueError(
103
+ f"Search engine request failed with status {response.status_code}: {response.text}"
104
+ )
105
+
101
106
  validated_response = WebSearchResults.model_validate(response.json())
102
107
  return validated_response.results
103
108
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: unique-web-search
3
- Version: 1.8.3
3
+ Version: 1.9.1
4
4
  Summary:
5
5
  Author: Andreas Hauri, Gustav Hartz, Rami Azouz
6
6
  Author-email: Andreas Hauri <andreas@unique.ch>, Gustav Hartz <gustav.hartz.ext@unique.ch>, Rami Azouz <rami.ext@unique.ch>
@@ -3,7 +3,7 @@ unique_web_search/client_settings.py,sha256=gGcD6ehgwv6mNzJw07naAGqYug2Rf25kYYQ4
3
3
  unique_web_search/config.py,sha256=hshXhJdEzuddxHEgKYtdfZ8HcIgwLZWdpyp26xAYTUg,7378
4
4
  unique_web_search/prompts.py,sha256=lfwW-qxzcJ0wthZ962yRgtuGvIdiDZ_wZ-LqjXLaC9A,2186
5
5
  unique_web_search/schema.py,sha256=0Qivyo9RV1PmycXslOoQsa9-DnpHDav4wOsA1-BdYFw,1621
6
- unique_web_search/service.py,sha256=ntosE4gtijK4Gpp52Jer_UqBk0OiK57cWJEpPBCU7GQ,13104
6
+ unique_web_search/service.py,sha256=U7DV3-lVi0f_EC-Rl_LnHbStOyJfCZHaeKbmt-diqWM,13071
7
7
  unique_web_search/services/client/proxy_config.py,sha256=R8o2jgg6sM-F9nZyegVqhZae8MDzzrsAOdRC1UwKJdI,3470
8
8
  unique_web_search/services/content_processing/__init__.py,sha256=8foGjXnQHUSbVXCWDfO1Nz_nE9u6rLMj2hmdolsVUv0,360
9
9
  unique_web_search/services/content_processing/config.py,sha256=pETpW_w4Rzwqz6NYHySng0oVNDRz7sEqpbjWAi0p2yY,3426
@@ -28,11 +28,11 @@ unique_web_search/services/executors/web_search_v1_executor.py,sha256=LCcHjWlLh6
28
28
  unique_web_search/services/executors/web_search_v2_executor.py,sha256=PLPS9hXFpyCzibDqQH3j5Vo5H4bcVXtrWZ3i-KvR6Og,11047
29
29
  unique_web_search/services/helpers.py,sha256=4Iv0oiGrgeW8cx85JZqQr96AHye1oGu4Aw2NW_-cEy4,562
30
30
  unique_web_search/services/search_engine/README.md,sha256=qBn85f7orZBrautIQBXT0BTf3tMndW8_3Cx3gck9KLo,19637
31
- unique_web_search/services/search_engine/__init__.py,sha256=Wzq26mFLy43cZtr-kbauQfYvQfID80F04YFYqbVL1WA,4096
31
+ unique_web_search/services/search_engine/__init__.py,sha256=mtUGCE1E2WB7xuwq0YbV7WWN46NY52YEAyUITG7oTos,3998
32
32
  unique_web_search/services/search_engine/base.py,sha256=MBQWiozcIAnXvH7vuMpLo6EaWYlAgI30c-ROb91wZRU,2069
33
- unique_web_search/services/search_engine/bing.py,sha256=qBhQeeOOt9bxZK_5C3NeLcfHLgbFnMdhhwNAFjqrJEM,3743
33
+ unique_web_search/services/search_engine/bing.py,sha256=xlNb66W9plWGqDrrLoMLM61ThEvNkJ6y7uiGf-2l_dU,4412
34
34
  unique_web_search/services/search_engine/brave.py,sha256=qJg7efQCuIU1l1kyb_H_0AvA-zboOg2Ip0QnnMhCpN0,3764
35
- unique_web_search/services/search_engine/custom_api.py,sha256=nW4a1ruIBiMHaF4kjJuVNImBM8rklTjSWFhkIN1DX0E,4968
35
+ unique_web_search/services/search_engine/custom_api.py,sha256=-f6WTKifnDgTfzmoeOFoAU4v7ce7yDSdl1h8lnH4XQU,5149
36
36
  unique_web_search/services/search_engine/firecrawl.py,sha256=CEhnpyxYvr8LO10Xxl54hWpIElCLBRQBH-x8o_vMjPA,4611
37
37
  unique_web_search/services/search_engine/google.py,sha256=SKdj2uR6nwOT18ktCkAcOJLoQULq7GeHILDFFewG8dU,5423
38
38
  unique_web_search/services/search_engine/jina.py,sha256=1I4C18W-UnjoNe4NXK3K5jfeHe9-2u9RBMkWp9Rgo60,10009
@@ -52,6 +52,6 @@ unique_web_search/services/search_engine/utils/vertexai/response_handler.py,sha2
52
52
  unique_web_search/services/search_engine/vertexai.py,sha256=4AlNP7NHkSMD1lZROBFDcm61stjXDRTfzAkLBRfFy4A,4664
53
53
  unique_web_search/settings.py,sha256=EnMmQZGfn6S8_TFY6fCuz_DrL1dTabPuIOzRbQwAO-I,5901
54
54
  unique_web_search/utils.py,sha256=5yLyzKyqy1v-Ut_TEYb4fggpiUj-nPf84YsO7db75so,4069
55
- unique_web_search-1.8.3.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
56
- unique_web_search-1.8.3.dist-info/METADATA,sha256=2VlbrJC86vSQ-I16zzWJGqg2R8CyulMMhxRNCNG8ViI,5565
57
- unique_web_search-1.8.3.dist-info/RECORD,,
55
+ unique_web_search-1.9.1.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
56
+ unique_web_search-1.9.1.dist-info/METADATA,sha256=-nK6xJH2XcL1O01G4hd4B-2aW6kBdKhd3FFd0VzwOwM,5565
57
+ unique_web_search-1.9.1.dist-info/RECORD,,