44 APIClient ,
55 Credentials ,
66)
7- from pydantic import Field
7+ from pydantic import Field , model_validator
8+ from typing_extensions import Self
89
910from crewai .rag .core .base_embeddings_provider import BaseEmbeddingsProvider
1011from crewai .rag .embeddings .providers .ibm .embedding_callable import (
@@ -21,44 +22,105 @@ class WatsonProvider(BaseEmbeddingsProvider[WatsonEmbeddingFunction]):
2122 embedding_callable : type [WatsonEmbeddingFunction ] = Field (
2223 default = WatsonEmbeddingFunction , description = "Watson embedding function class"
2324 )
24- model_id : str = Field (description = "Watson model ID" )
25+ model_id : str = Field (
26+ description = "Watson model ID" , validation_alias = "WATSON_MODEL_ID"
27+ )
2528 params : dict [str , str | dict [str , str ]] | None = Field (
2629 default = None , description = "Additional parameters"
2730 )
2831 credentials : Credentials | None = Field (
2932 default = None , description = "Watson credentials"
3033 )
31- project_id : str | None = Field (default = None , description = "Watson project ID" )
32- space_id : str | None = Field (default = None , description = "Watson space ID" )
34+ project_id : str | None = Field (
35+ default = None ,
36+ description = "Watson project ID" ,
37+ validation_alias = "WATSON_PROJECT_ID" ,
38+ )
39+ space_id : str | None = Field (
40+ default = None , description = "Watson space ID" , validation_alias = "WATSON_SPACE_ID"
41+ )
3342 api_client : APIClient | None = Field (default = None , description = "Watson API client" )
34- verify : bool | str | None = Field (default = None , description = "SSL verification" )
43+ verify : bool | str | None = Field (
44+ default = None , description = "SSL verification" , validation_alias = "WATSON_VERIFY"
45+ )
3546 persistent_connection : bool = Field (
36- default = True , description = "Use persistent connection"
47+ default = True ,
48+ description = "Use persistent connection" ,
49+ validation_alias = "WATSON_PERSISTENT_CONNECTION" ,
50+ )
51+ batch_size : int = Field (
52+ default = 100 ,
53+ description = "Batch size for processing" ,
54+ validation_alias = "WATSON_BATCH_SIZE" ,
55+ )
56+ concurrency_limit : int = Field (
57+ default = 10 ,
58+ description = "Concurrency limit" ,
59+ validation_alias = "WATSON_CONCURRENCY_LIMIT" ,
60+ )
61+ max_retries : int | None = Field (
62+ default = None ,
63+ description = "Maximum retries" ,
64+ validation_alias = "WATSON_MAX_RETRIES" ,
3765 )
38- batch_size : int = Field (default = 100 , description = "Batch size for processing" )
39- concurrency_limit : int = Field (default = 10 , description = "Concurrency limit" )
40- max_retries : int | None = Field (default = None , description = "Maximum retries" )
4166 delay_time : float | None = Field (
42- default = None , description = "Delay time between retries"
67+ default = None ,
68+ description = "Delay time between retries" ,
69+ validation_alias = "WATSON_DELAY_TIME" ,
4370 )
4471 retry_status_codes : list [int ] | None = Field (
4572 default = None , description = "HTTP status codes to retry on"
4673 )
47- url : str | None = Field (default = None , description = "Watson API URL" )
48- api_key : str | None = Field (default = None , description = "Watson API key" )
49- name : str | None = Field (default = None , description = "Service name" )
74+ url : str = Field (description = "Watson API URL" , validation_alias = "WATSON_URL" )
75+ api_key : str = Field (
76+ description = "Watson API key" , validation_alias = "WATSON_API_KEY"
77+ )
78+ name : str | None = Field (
79+ default = None , description = "Service name" , validation_alias = "WATSON_NAME"
80+ )
5081 iam_serviceid_crn : str | None = Field (
51- default = None , description = "IAM service ID CRN"
82+ default = None ,
83+ description = "IAM service ID CRN" ,
84+ validation_alias = "WATSON_IAM_SERVICEID_CRN" ,
5285 )
5386 trusted_profile_id : str | None = Field (
54- default = None , description = "Trusted profile ID"
55- )
56- token : str | None = Field (default = None , description = "Bearer token" )
57- projects_token : str | None = Field (default = None , description = "Projects token" )
58- username : str | None = Field (default = None , description = "Username" )
59- password : str | None = Field (default = None , description = "Password" )
60- instance_id : str | None = Field (default = None , description = "Service instance ID" )
61- version : str | None = Field (default = None , description = "API version" )
62- bedrock_url : str | None = Field (default = None , description = "Bedrock URL" )
63- platform_url : str | None = Field (default = None , description = "Platform URL" )
87+ default = None ,
88+ description = "Trusted profile ID" ,
89+ validation_alias = "WATSON_TRUSTED_PROFILE_ID" ,
90+ )
91+ token : str | None = Field (
92+ default = None , description = "Bearer token" , validation_alias = "WATSON_TOKEN"
93+ )
94+ projects_token : str | None = Field (
95+ default = None ,
96+ description = "Projects token" ,
97+ validation_alias = "WATSON_PROJECTS_TOKEN" ,
98+ )
99+ username : str | None = Field (
100+ default = None , description = "Username" , validation_alias = "WATSON_USERNAME"
101+ )
102+ password : str | None = Field (
103+ default = None , description = "Password" , validation_alias = "WATSON_PASSWORD"
104+ )
105+ instance_id : str | None = Field (
106+ default = None ,
107+ description = "Service instance ID" ,
108+ validation_alias = "WATSON_INSTANCE_ID" ,
109+ )
110+ version : str | None = Field (
111+ default = None , description = "API version" , validation_alias = "WATSON_VERSION"
112+ )
113+ bedrock_url : str | None = Field (
114+ default = None , description = "Bedrock URL" , validation_alias = "WATSON_BEDROCK_URL"
115+ )
116+ platform_url : str | None = Field (
117+ default = None , description = "Platform URL" , validation_alias = "WATSON_PLATFORM_URL"
118+ )
64119 proxies : dict | None = Field (default = None , description = "Proxy configuration" )
120+
121+ @model_validator (mode = "after" )
122+ def validate_space_or_project (self ) -> Self :
123+ """Validate that either space_id or project_id is provided."""
124+ if not self .space_id and not self .project_id :
125+ raise ValueError ("One of 'space_id' or 'project_id' must be provided" )
126+ return self
0 commit comments