camel-ai 0.2.9__py3-none-any.whl → 0.2.10__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.
Potentially problematic release.
This version of camel-ai might be problematic. Click here for more details.
- camel/__init__.py +5 -5
- camel/agents/__init__.py +4 -4
- camel/agents/base.py +4 -4
- camel/agents/chat_agent.py +32 -37
- camel/agents/critic_agent.py +4 -4
- camel/agents/deductive_reasoner_agent.py +4 -4
- camel/agents/embodied_agent.py +4 -4
- camel/agents/knowledge_graph_agent.py +4 -4
- camel/agents/role_assignment_agent.py +4 -4
- camel/agents/search_agent.py +4 -4
- camel/agents/task_agent.py +4 -4
- camel/agents/tool_agents/__init__.py +4 -4
- camel/agents/tool_agents/base.py +4 -4
- camel/agents/tool_agents/hugging_face_tool_agent.py +4 -4
- camel/bots/__init__.py +4 -4
- camel/bots/discord_app.py +4 -4
- camel/bots/slack/__init__.py +4 -4
- camel/bots/slack/models.py +4 -4
- camel/bots/slack/slack_app.py +4 -4
- camel/bots/telegram_bot.py +4 -4
- camel/configs/__init__.py +10 -4
- camel/configs/anthropic_config.py +4 -4
- camel/configs/base_config.py +4 -4
- camel/configs/cohere_config.py +76 -0
- camel/configs/deepseek_config.py +134 -0
- camel/configs/gemini_config.py +85 -127
- camel/configs/groq_config.py +4 -4
- camel/configs/litellm_config.py +4 -4
- camel/configs/mistral_config.py +4 -4
- camel/configs/ollama_config.py +4 -4
- camel/configs/openai_config.py +32 -7
- camel/configs/qwen_config.py +4 -4
- camel/configs/reka_config.py +4 -4
- camel/configs/samba_config.py +4 -4
- camel/configs/togetherai_config.py +4 -4
- camel/configs/vllm_config.py +4 -4
- camel/configs/yi_config.py +4 -4
- camel/configs/zhipuai_config.py +4 -4
- camel/embeddings/__init__.py +6 -4
- camel/embeddings/base.py +4 -4
- camel/embeddings/mistral_embedding.py +4 -4
- camel/embeddings/openai_compatible_embedding.py +91 -0
- camel/embeddings/openai_embedding.py +4 -4
- camel/embeddings/sentence_transformers_embeddings.py +4 -4
- camel/embeddings/vlm_embedding.py +4 -4
- camel/generators.py +4 -4
- camel/human.py +4 -4
- camel/interpreters/__init__.py +4 -4
- camel/interpreters/base.py +4 -4
- camel/interpreters/docker_interpreter.py +4 -4
- camel/interpreters/internal_python_interpreter.py +4 -4
- camel/interpreters/interpreter_error.py +4 -4
- camel/interpreters/ipython_interpreter.py +4 -4
- camel/interpreters/subprocess_interpreter.py +4 -4
- camel/loaders/__init__.py +4 -4
- camel/loaders/apify_reader.py +4 -4
- camel/loaders/base_io.py +4 -4
- camel/loaders/chunkr_reader.py +4 -4
- camel/loaders/firecrawl_reader.py +4 -4
- camel/loaders/jina_url_reader.py +4 -4
- camel/loaders/unstructured_io.py +4 -4
- camel/memories/__init__.py +4 -4
- camel/memories/agent_memories.py +4 -4
- camel/memories/base.py +4 -4
- camel/memories/blocks/__init__.py +4 -4
- camel/memories/blocks/chat_history_block.py +4 -4
- camel/memories/blocks/vectordb_block.py +4 -4
- camel/memories/context_creators/__init__.py +4 -4
- camel/memories/context_creators/score_based.py +4 -4
- camel/memories/records.py +4 -4
- camel/messages/__init__.py +20 -4
- camel/messages/base.py +108 -4
- camel/messages/conversion/__init__.py +29 -0
- camel/messages/conversion/models.py +178 -0
- camel/messages/conversion/sharegpt/__init__.py +20 -0
- camel/messages/conversion/sharegpt/function_call_formatter.py +49 -0
- camel/messages/conversion/sharegpt/hermes/__init__.py +19 -0
- camel/messages/conversion/sharegpt/hermes/hermes_function_formatter.py +128 -0
- camel/messages/func_message.py +50 -4
- camel/models/__init__.py +8 -4
- camel/models/anthropic_model.py +4 -4
- camel/models/azure_openai_model.py +4 -4
- camel/models/base_model.py +4 -4
- camel/models/cohere_model.py +282 -0
- camel/models/deepseek_model.py +139 -0
- camel/models/gemini_model.py +61 -146
- camel/models/groq_model.py +4 -4
- camel/models/litellm_model.py +4 -4
- camel/models/mistral_model.py +4 -4
- camel/models/model_factory.py +10 -4
- camel/models/nemotron_model.py +4 -4
- camel/models/ollama_model.py +4 -4
- camel/models/openai_audio_models.py +4 -4
- camel/models/openai_compatible_model.py +4 -4
- camel/models/openai_model.py +42 -4
- camel/models/qwen_model.py +4 -4
- camel/models/reka_model.py +4 -4
- camel/models/samba_model.py +6 -5
- camel/models/stub_model.py +4 -4
- camel/models/togetherai_model.py +4 -4
- camel/models/vllm_model.py +4 -4
- camel/models/yi_model.py +4 -4
- camel/models/zhipuai_model.py +4 -4
- camel/personas/__init__.py +17 -0
- camel/personas/persona.py +103 -0
- camel/personas/persona_hub.py +293 -0
- camel/prompts/__init__.py +6 -4
- camel/prompts/ai_society.py +4 -4
- camel/prompts/base.py +4 -4
- camel/prompts/code.py +4 -4
- camel/prompts/evaluation.py +4 -4
- camel/prompts/generate_text_embedding_data.py +4 -4
- camel/prompts/image_craft.py +4 -4
- camel/prompts/misalignment.py +4 -4
- camel/prompts/multi_condition_image_craft.py +4 -4
- camel/prompts/object_recognition.py +4 -4
- camel/prompts/persona_hub.py +61 -0
- camel/prompts/prompt_templates.py +4 -4
- camel/prompts/role_description_prompt_template.py +4 -4
- camel/prompts/solution_extraction.py +4 -4
- camel/prompts/task_prompt_template.py +4 -4
- camel/prompts/translation.py +4 -4
- camel/prompts/video_description_prompt.py +4 -4
- camel/responses/__init__.py +4 -4
- camel/responses/agent_responses.py +4 -4
- camel/retrievers/__init__.py +4 -4
- camel/retrievers/auto_retriever.py +4 -4
- camel/retrievers/base.py +4 -4
- camel/retrievers/bm25_retriever.py +4 -4
- camel/retrievers/cohere_rerank_retriever.py +7 -9
- camel/retrievers/vector_retriever.py +4 -4
- camel/runtime/__init__.py +29 -0
- camel/runtime/api.py +93 -0
- camel/runtime/base.py +45 -0
- camel/runtime/configs.py +56 -0
- camel/runtime/docker_runtime.py +404 -0
- camel/runtime/llm_guard_runtime.py +199 -0
- camel/runtime/remote_http_runtime.py +204 -0
- camel/runtime/utils/__init__.py +20 -0
- camel/runtime/utils/function_risk_toolkit.py +58 -0
- camel/runtime/utils/ignore_risk_toolkit.py +72 -0
- camel/schemas/__init__.py +17 -0
- camel/schemas/base.py +45 -0
- camel/schemas/openai_converter.py +116 -0
- camel/societies/__init__.py +4 -4
- camel/societies/babyagi_playing.py +4 -4
- camel/societies/role_playing.py +4 -4
- camel/societies/workforce/__init__.py +4 -4
- camel/societies/workforce/base.py +4 -4
- camel/societies/workforce/prompts.py +4 -4
- camel/societies/workforce/role_playing_worker.py +4 -4
- camel/societies/workforce/single_agent_worker.py +4 -4
- camel/societies/workforce/task_channel.py +4 -4
- camel/societies/workforce/utils.py +4 -4
- camel/societies/workforce/worker.py +4 -4
- camel/societies/workforce/workforce.py +7 -7
- camel/storages/__init__.py +4 -4
- camel/storages/graph_storages/__init__.py +4 -4
- camel/storages/graph_storages/base.py +4 -4
- camel/storages/graph_storages/graph_element.py +4 -4
- camel/storages/graph_storages/nebula_graph.py +4 -4
- camel/storages/graph_storages/neo4j_graph.py +4 -4
- camel/storages/key_value_storages/__init__.py +4 -4
- camel/storages/key_value_storages/base.py +4 -4
- camel/storages/key_value_storages/in_memory.py +4 -4
- camel/storages/key_value_storages/json.py +4 -4
- camel/storages/key_value_storages/redis.py +4 -4
- camel/storages/object_storages/__init__.py +4 -4
- camel/storages/object_storages/amazon_s3.py +4 -4
- camel/storages/object_storages/azure_blob.py +4 -4
- camel/storages/object_storages/base.py +4 -4
- camel/storages/object_storages/google_cloud.py +4 -4
- camel/storages/vectordb_storages/__init__.py +4 -4
- camel/storages/vectordb_storages/base.py +4 -4
- camel/storages/vectordb_storages/milvus.py +4 -4
- camel/storages/vectordb_storages/qdrant.py +4 -4
- camel/tasks/__init__.py +4 -4
- camel/tasks/task.py +4 -4
- camel/tasks/task_prompt.py +4 -4
- camel/terminators/__init__.py +4 -4
- camel/terminators/base.py +4 -4
- camel/terminators/response_terminator.py +4 -4
- camel/terminators/token_limit_terminator.py +4 -4
- camel/toolkits/__init__.py +13 -17
- camel/toolkits/arxiv_toolkit.py +4 -4
- camel/toolkits/ask_news_toolkit.py +7 -18
- camel/toolkits/base.py +4 -4
- camel/toolkits/code_execution.py +20 -7
- camel/toolkits/dalle_toolkit.py +4 -7
- camel/toolkits/data_commons_toolkit.py +4 -4
- camel/toolkits/function_tool.py +220 -69
- camel/toolkits/github_toolkit.py +4 -4
- camel/toolkits/google_maps_toolkit.py +4 -4
- camel/toolkits/google_scholar_toolkit.py +4 -4
- camel/toolkits/human_toolkit.py +52 -0
- camel/toolkits/linkedin_toolkit.py +4 -4
- camel/toolkits/math_toolkit.py +4 -7
- camel/toolkits/notion_toolkit.py +4 -4
- camel/toolkits/open_api_specs/biztoc/__init__.py +4 -4
- camel/toolkits/open_api_specs/coursera/__init__.py +4 -4
- camel/toolkits/open_api_specs/create_qr_code/__init__.py +4 -4
- camel/toolkits/open_api_specs/klarna/__init__.py +4 -4
- camel/toolkits/open_api_specs/nasa_apod/__init__.py +4 -4
- camel/toolkits/open_api_specs/outschool/__init__.py +4 -4
- camel/toolkits/open_api_specs/outschool/paths/__init__.py +4 -4
- camel/toolkits/open_api_specs/outschool/paths/get_classes.py +4 -4
- camel/toolkits/open_api_specs/outschool/paths/search_teachers.py +4 -4
- camel/toolkits/open_api_specs/security_config.py +4 -4
- camel/toolkits/open_api_specs/speak/__init__.py +4 -4
- camel/toolkits/open_api_specs/web_scraper/__init__.py +4 -4
- camel/toolkits/open_api_specs/web_scraper/paths/__init__.py +4 -4
- camel/toolkits/open_api_specs/web_scraper/paths/scraper.py +4 -4
- camel/toolkits/open_api_toolkit.py +4 -4
- camel/toolkits/reddit_toolkit.py +4 -4
- camel/toolkits/retrieval_toolkit.py +4 -4
- camel/toolkits/search_toolkit.py +49 -29
- camel/toolkits/slack_toolkit.py +4 -4
- camel/toolkits/twitter_toolkit.py +10 -13
- camel/toolkits/video_toolkit.py +211 -0
- camel/toolkits/weather_toolkit.py +4 -7
- camel/toolkits/whatsapp_toolkit.py +6 -6
- camel/types/__init__.py +6 -4
- camel/types/enums.py +77 -7
- camel/types/openai_types.py +6 -4
- camel/types/unified_model_type.py +9 -4
- camel/utils/__init__.py +35 -33
- camel/utils/async_func.py +4 -4
- camel/utils/commons.py +4 -4
- camel/utils/constants.py +4 -4
- camel/utils/response_format.py +63 -0
- camel/utils/token_counting.py +4 -4
- {camel_ai-0.2.9.dist-info → camel_ai-0.2.10.dist-info}/METADATA +108 -56
- camel_ai-0.2.10.dist-info/RECORD +246 -0
- camel_ai-0.2.9.dist-info/RECORD +0 -215
- {camel_ai-0.2.9.dist-info → camel_ai-0.2.10.dist-info}/LICENSE +0 -0
- {camel_ai-0.2.9.dist-info → camel_ai-0.2.10.dist-info}/WHEEL +0 -0
camel/models/gemini_model.py
CHANGED
|
@@ -1,63 +1,57 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
|
-
from typing import
|
|
15
|
+
from typing import Any, Dict, List, Optional, Union
|
|
16
|
+
|
|
17
|
+
from openai import OpenAI, Stream
|
|
16
18
|
|
|
17
19
|
from camel.configs import Gemini_API_PARAMS, GeminiConfig
|
|
18
20
|
from camel.messages import OpenAIMessage
|
|
19
21
|
from camel.models import BaseModelBackend
|
|
20
22
|
from camel.types import (
|
|
21
23
|
ChatCompletion,
|
|
22
|
-
|
|
23
|
-
Choice,
|
|
24
|
+
ChatCompletionChunk,
|
|
24
25
|
ModelType,
|
|
25
26
|
)
|
|
26
27
|
from camel.utils import (
|
|
27
28
|
BaseTokenCounter,
|
|
28
|
-
|
|
29
|
+
OpenAITokenCounter,
|
|
29
30
|
api_keys_required,
|
|
30
|
-
dependencies_required,
|
|
31
31
|
)
|
|
32
32
|
|
|
33
|
-
if TYPE_CHECKING:
|
|
34
|
-
from google.generativeai.types import ContentsType, GenerateContentResponse
|
|
35
|
-
|
|
36
33
|
|
|
37
34
|
class GeminiModel(BaseModelBackend):
|
|
38
35
|
r"""Gemini API in a unified BaseModelBackend interface.
|
|
39
36
|
|
|
40
37
|
Args:
|
|
41
38
|
model_type (Union[ModelType, str]): Model for which a backend is
|
|
42
|
-
created.
|
|
39
|
+
created, one of Gemini series.
|
|
43
40
|
model_config_dict (Optional[Dict[str, Any]], optional): A dictionary
|
|
44
|
-
that will be fed into:obj:`
|
|
45
|
-
|
|
41
|
+
that will be fed into:obj:`openai.ChatCompletion.create()`. If
|
|
42
|
+
:obj:`None`, :obj:`GeminiConfig().as_dict()` will be used.
|
|
46
43
|
(default: :obj:`None`)
|
|
47
44
|
api_key (Optional[str], optional): The API key for authenticating with
|
|
48
|
-
the
|
|
49
|
-
url (Optional[str], optional): The url to the
|
|
50
|
-
(default: :obj:`
|
|
45
|
+
the Gemini service. (default: :obj:`None`)
|
|
46
|
+
url (Optional[str], optional): The url to the Gemini service.
|
|
47
|
+
(default: :obj:`https://generativelanguage.googleapis.com/v1beta/
|
|
48
|
+
openai/`)
|
|
51
49
|
token_counter (Optional[BaseTokenCounter], optional): Token counter to
|
|
52
|
-
use for the model. If not provided, :obj:`
|
|
53
|
-
be used.
|
|
54
|
-
|
|
55
|
-
Notes:
|
|
56
|
-
Currently :obj:`"stream": True` is not supported with Gemini due to the
|
|
57
|
-
limitation of the current camel design.
|
|
50
|
+
use for the model. If not provided, :obj:`OpenAITokenCounter(
|
|
51
|
+
ModelType.GPT_4O_MINI)` will be used.
|
|
52
|
+
(default: :obj:`None`)
|
|
58
53
|
"""
|
|
59
54
|
|
|
60
|
-
@dependencies_required('google')
|
|
61
55
|
def __init__(
|
|
62
56
|
self,
|
|
63
57
|
model_type: Union[ModelType, str],
|
|
@@ -66,29 +60,45 @@ class GeminiModel(BaseModelBackend):
|
|
|
66
60
|
url: Optional[str] = None,
|
|
67
61
|
token_counter: Optional[BaseTokenCounter] = None,
|
|
68
62
|
) -> None:
|
|
69
|
-
import google.generativeai as genai
|
|
70
|
-
from google.generativeai.types.generation_types import GenerationConfig
|
|
71
|
-
|
|
72
63
|
if model_config_dict is None:
|
|
73
64
|
model_config_dict = GeminiConfig().as_dict()
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
api_key = api_key or os.environ.get("GEMINI_API_KEY")
|
|
66
|
+
url = url or os.environ.get(
|
|
67
|
+
"GEMINI_API_BASE_URL",
|
|
68
|
+
"https://generativelanguage.googleapis.com/v1beta/openai/",
|
|
69
|
+
)
|
|
76
70
|
super().__init__(
|
|
77
71
|
model_type, model_config_dict, api_key, url, token_counter
|
|
78
72
|
)
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
self._client = OpenAI(
|
|
74
|
+
timeout=60,
|
|
75
|
+
max_retries=3,
|
|
76
|
+
api_key=self._api_key,
|
|
77
|
+
base_url=self._url,
|
|
78
|
+
)
|
|
81
79
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
80
|
+
@api_keys_required("GEMINI_API_KEY")
|
|
81
|
+
def run(
|
|
82
|
+
self,
|
|
83
|
+
messages: List[OpenAIMessage],
|
|
84
|
+
) -> Union[ChatCompletion, Stream[ChatCompletionChunk]]:
|
|
85
|
+
r"""Runs inference of Gemini chat completion.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
messages (List[OpenAIMessage]): Message list with the chat history
|
|
89
|
+
in OpenAI API format.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
Union[ChatCompletion, Stream[ChatCompletionChunk]]:
|
|
93
|
+
`ChatCompletion` in the non-stream mode, or
|
|
94
|
+
`Stream[ChatCompletionChunk]` in the stream mode.
|
|
95
|
+
"""
|
|
96
|
+
response = self._client.chat.completions.create(
|
|
97
|
+
messages=messages,
|
|
98
|
+
model=self.model_type,
|
|
99
|
+
**self.model_config_dict,
|
|
90
100
|
)
|
|
91
|
-
|
|
101
|
+
return response
|
|
92
102
|
|
|
93
103
|
@property
|
|
94
104
|
def token_counter(self) -> BaseTokenCounter:
|
|
@@ -99,125 +109,30 @@ class GeminiModel(BaseModelBackend):
|
|
|
99
109
|
tokenization style.
|
|
100
110
|
"""
|
|
101
111
|
if not self._token_counter:
|
|
102
|
-
self._token_counter =
|
|
112
|
+
self._token_counter = OpenAITokenCounter(ModelType.GPT_4O_MINI)
|
|
103
113
|
return self._token_counter
|
|
104
114
|
|
|
105
|
-
@api_keys_required("GOOGLE_API_KEY")
|
|
106
|
-
def run(
|
|
107
|
-
self,
|
|
108
|
-
messages: List[OpenAIMessage],
|
|
109
|
-
) -> ChatCompletion:
|
|
110
|
-
r"""Runs inference of Gemini model.
|
|
111
|
-
This method can handle multimodal input
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
messages: Message list or Message with the chat history
|
|
115
|
-
in OpenAi format.
|
|
116
|
-
|
|
117
|
-
Returns:
|
|
118
|
-
response: A ChatCompletion object formatted for the OpenAI API.
|
|
119
|
-
"""
|
|
120
|
-
response = self._client.generate_content(
|
|
121
|
-
contents=self.to_gemini_req(messages),
|
|
122
|
-
**self.model_config_dict,
|
|
123
|
-
)
|
|
124
|
-
response.resolve()
|
|
125
|
-
return self.to_openai_response(response)
|
|
126
|
-
|
|
127
115
|
def check_model_config(self):
|
|
128
116
|
r"""Check whether the model configuration contains any
|
|
129
117
|
unexpected arguments to Gemini API.
|
|
130
118
|
|
|
131
119
|
Raises:
|
|
132
120
|
ValueError: If the model configuration dictionary contains any
|
|
133
|
-
unexpected arguments to
|
|
121
|
+
unexpected arguments to Gemini API.
|
|
134
122
|
"""
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
)
|
|
123
|
+
for param in self.model_config_dict:
|
|
124
|
+
if param not in Gemini_API_PARAMS:
|
|
125
|
+
raise ValueError(
|
|
126
|
+
f"Unexpected argument `{param}` is "
|
|
127
|
+
"input into Gemini model backend."
|
|
128
|
+
)
|
|
142
129
|
|
|
143
130
|
@property
|
|
144
131
|
def stream(self) -> bool:
|
|
145
|
-
r"""Returns whether the model is in stream mode,
|
|
146
|
-
|
|
132
|
+
r"""Returns whether the model is in stream mode, which sends partial
|
|
133
|
+
results each time.
|
|
147
134
|
|
|
148
135
|
Returns:
|
|
149
136
|
bool: Whether the model is in stream mode.
|
|
150
137
|
"""
|
|
151
138
|
return self.model_config_dict.get('stream', False)
|
|
152
|
-
|
|
153
|
-
def to_gemini_req(self, messages: List[OpenAIMessage]) -> 'ContentsType':
|
|
154
|
-
r"""Converts the request from the OpenAI API format to the Gemini API
|
|
155
|
-
request format.
|
|
156
|
-
|
|
157
|
-
Args:
|
|
158
|
-
messages: The request object from the OpenAI API.
|
|
159
|
-
|
|
160
|
-
Returns:
|
|
161
|
-
converted_messages: A list of messages formatted for Gemini API.
|
|
162
|
-
"""
|
|
163
|
-
# role reference
|
|
164
|
-
# https://ai.google.dev/api/python/google/generativeai/protos/Content
|
|
165
|
-
converted_messages = []
|
|
166
|
-
for message in messages:
|
|
167
|
-
role = message.get('role')
|
|
168
|
-
if role == 'assistant':
|
|
169
|
-
role_to_gemini = 'model'
|
|
170
|
-
else:
|
|
171
|
-
role_to_gemini = 'user'
|
|
172
|
-
converted_message = {
|
|
173
|
-
"role": role_to_gemini,
|
|
174
|
-
"parts": message.get("content"),
|
|
175
|
-
}
|
|
176
|
-
converted_messages.append(converted_message)
|
|
177
|
-
return converted_messages
|
|
178
|
-
|
|
179
|
-
def to_openai_response(
|
|
180
|
-
self,
|
|
181
|
-
response: 'GenerateContentResponse',
|
|
182
|
-
) -> ChatCompletion:
|
|
183
|
-
r"""Converts the response from the Gemini API to the OpenAI API
|
|
184
|
-
response format.
|
|
185
|
-
|
|
186
|
-
Args:
|
|
187
|
-
response: The response object returned by the Gemini API
|
|
188
|
-
|
|
189
|
-
Returns:
|
|
190
|
-
openai_response: A ChatCompletion object formatted for
|
|
191
|
-
the OpenAI API.
|
|
192
|
-
"""
|
|
193
|
-
import time
|
|
194
|
-
import uuid
|
|
195
|
-
|
|
196
|
-
openai_response = ChatCompletion(
|
|
197
|
-
id=f"chatcmpl-{uuid.uuid4().hex!s}",
|
|
198
|
-
object="chat.completion",
|
|
199
|
-
created=int(time.time()),
|
|
200
|
-
model=self.model_type,
|
|
201
|
-
choices=[],
|
|
202
|
-
)
|
|
203
|
-
for i, candidate in enumerate(response.candidates):
|
|
204
|
-
content = ""
|
|
205
|
-
if candidate.content and len(candidate.content.parts) > 0:
|
|
206
|
-
content = candidate.content.parts[0].text
|
|
207
|
-
finish_reason = candidate.finish_reason
|
|
208
|
-
finish_reason_mapping = {
|
|
209
|
-
"FinishReason.STOP": "stop",
|
|
210
|
-
"FinishReason.SAFETY": "content_filter",
|
|
211
|
-
"FinishReason.RECITATION": "content_filter",
|
|
212
|
-
"FinishReason.MAX_TOKENS": "length",
|
|
213
|
-
}
|
|
214
|
-
finish_reason = finish_reason_mapping.get(finish_reason, "stop")
|
|
215
|
-
choice = Choice(
|
|
216
|
-
index=i,
|
|
217
|
-
message=ChatCompletionMessage(
|
|
218
|
-
role="assistant", content=content
|
|
219
|
-
),
|
|
220
|
-
finish_reason=finish_reason,
|
|
221
|
-
)
|
|
222
|
-
openai_response.choices.append(choice)
|
|
223
|
-
return openai_response
|
camel/models/groq_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import Any, Dict, List, Optional, Union
|
|
16
16
|
|
camel/models/litellm_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from typing import Any, Dict, List, Optional, Union
|
|
15
15
|
|
|
16
16
|
from camel.configs import LITELLM_API_PARAMS, LiteLLMConfig
|
camel/models/mistral_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
|
16
16
|
|
camel/models/model_factory.py
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from typing import Dict, Optional, Type, Union
|
|
15
15
|
|
|
16
16
|
from camel.models.anthropic_model import AnthropicModel
|
|
17
17
|
from camel.models.azure_openai_model import AzureOpenAIModel
|
|
18
18
|
from camel.models.base_model import BaseModelBackend
|
|
19
|
+
from camel.models.cohere_model import CohereModel
|
|
20
|
+
from camel.models.deepseek_model import DeepSeekModel
|
|
19
21
|
from camel.models.gemini_model import GeminiModel
|
|
20
22
|
from camel.models.groq_model import GroqModel
|
|
21
23
|
from camel.models.litellm_model import LiteLLMModel
|
|
@@ -108,10 +110,14 @@ class ModelFactory:
|
|
|
108
110
|
model_class = MistralModel
|
|
109
111
|
elif model_platform.is_reka and model_type.is_reka:
|
|
110
112
|
model_class = RekaModel
|
|
113
|
+
elif model_platform.is_cohere and model_type.is_cohere:
|
|
114
|
+
model_class = CohereModel
|
|
111
115
|
elif model_platform.is_yi and model_type.is_yi:
|
|
112
116
|
model_class = YiModel
|
|
113
117
|
elif model_platform.is_qwen and model_type.is_qwen:
|
|
114
118
|
model_class = QwenModel
|
|
119
|
+
elif model_platform.is_deepseek:
|
|
120
|
+
model_class = DeepSeekModel
|
|
115
121
|
elif model_type == ModelType.STUB:
|
|
116
122
|
model_class = StubModel
|
|
117
123
|
|
camel/models/nemotron_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import List, Optional, Union
|
|
16
16
|
|
camel/models/ollama_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
import subprocess
|
|
16
16
|
from typing import Any, Dict, List, Optional, Union
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
from typing import Any, List, Optional, Union
|
|
16
16
|
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
from typing import Any, Dict, List, Optional, Union
|
camel/models/openai_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import os
|
|
15
15
|
import warnings
|
|
16
16
|
from typing import Any, Dict, List, Optional, Union
|
|
@@ -24,6 +24,7 @@ from camel.types import (
|
|
|
24
24
|
ChatCompletion,
|
|
25
25
|
ChatCompletionChunk,
|
|
26
26
|
ModelType,
|
|
27
|
+
ParsedChatCompletion,
|
|
27
28
|
)
|
|
28
29
|
from camel.utils import (
|
|
29
30
|
BaseTokenCounter,
|
|
@@ -127,6 +128,19 @@ class OpenAIModel(BaseModelBackend):
|
|
|
127
128
|
self.model_config_dict["presence_penalty"] = 0.0
|
|
128
129
|
self.model_config_dict["frequency_penalty"] = 0.0
|
|
129
130
|
|
|
131
|
+
if self.model_config_dict.get("response_format"):
|
|
132
|
+
# stream is not supported in beta.chat.completions.parse
|
|
133
|
+
if "stream" in self.model_config_dict:
|
|
134
|
+
del self.model_config_dict["stream"]
|
|
135
|
+
|
|
136
|
+
response = self._client.beta.chat.completions.parse(
|
|
137
|
+
messages=messages,
|
|
138
|
+
model=self.model_type,
|
|
139
|
+
**self.model_config_dict,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
return self._to_chat_completion(response)
|
|
143
|
+
|
|
130
144
|
response = self._client.chat.completions.create(
|
|
131
145
|
messages=messages,
|
|
132
146
|
model=self.model_type,
|
|
@@ -134,6 +148,30 @@ class OpenAIModel(BaseModelBackend):
|
|
|
134
148
|
)
|
|
135
149
|
return response
|
|
136
150
|
|
|
151
|
+
def _to_chat_completion(
|
|
152
|
+
self, response: "ParsedChatCompletion"
|
|
153
|
+
) -> ChatCompletion:
|
|
154
|
+
# TODO: Handle n > 1 or warn consumers it's not supported
|
|
155
|
+
choice = dict(
|
|
156
|
+
index=response.choices[0].index,
|
|
157
|
+
message={
|
|
158
|
+
"role": response.choices[0].message.role,
|
|
159
|
+
"content": response.choices[0].message.content,
|
|
160
|
+
"tool_calls": response.choices[0].message.tool_calls,
|
|
161
|
+
},
|
|
162
|
+
finish_reason=response.choices[0].finish_reason,
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
obj = ChatCompletion.construct(
|
|
166
|
+
id=response.id,
|
|
167
|
+
choices=[choice],
|
|
168
|
+
created=response.created,
|
|
169
|
+
model=response.model,
|
|
170
|
+
object="chat.completion",
|
|
171
|
+
usage=response.usage,
|
|
172
|
+
)
|
|
173
|
+
return obj
|
|
174
|
+
|
|
137
175
|
def check_model_config(self):
|
|
138
176
|
r"""Check whether the model configuration contains any
|
|
139
177
|
unexpected arguments to OpenAI API.
|
camel/models/qwen_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
|
|
15
15
|
import os
|
|
16
16
|
from typing import Any, Dict, List, Optional, Union
|
camel/models/reka_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
|
15
15
|
|
|
16
16
|
from camel.configs import REKA_API_PARAMS, RekaConfig
|
camel/models/samba_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import json
|
|
15
15
|
import os
|
|
16
16
|
import time
|
|
@@ -158,7 +158,8 @@ class SambaModel(BaseModelBackend):
|
|
|
158
158
|
`ChatCompletion` in the non-stream mode, or
|
|
159
159
|
`Stream[ChatCompletionChunk]` in the stream mode.
|
|
160
160
|
"""
|
|
161
|
-
|
|
161
|
+
if "tools" in self.model_config_dict:
|
|
162
|
+
del self.model_config_dict["tools"]
|
|
162
163
|
if self.model_config_dict.get("stream") is True:
|
|
163
164
|
return self._run_streaming(messages)
|
|
164
165
|
else:
|
camel/models/stub_model.py
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the
|
|
1
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
5
5
|
#
|
|
6
6
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
7
|
#
|
|
8
8
|
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
10
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
|
-
#
|
|
13
|
+
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
|
|
14
14
|
import time
|
|
15
15
|
from typing import Any, Dict, List, Optional, Union
|
|
16
16
|
|