lfx-nightly 0.2.0.dev25__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 lfx-nightly might be problematic. Click here for more details.
- lfx/__init__.py +0 -0
- lfx/__main__.py +25 -0
- lfx/_assets/component_index.json +1 -0
- lfx/base/__init__.py +0 -0
- lfx/base/agents/__init__.py +0 -0
- lfx/base/agents/agent.py +375 -0
- lfx/base/agents/altk_base_agent.py +380 -0
- lfx/base/agents/altk_tool_wrappers.py +565 -0
- lfx/base/agents/callback.py +130 -0
- lfx/base/agents/context.py +109 -0
- lfx/base/agents/crewai/__init__.py +0 -0
- lfx/base/agents/crewai/crew.py +231 -0
- lfx/base/agents/crewai/tasks.py +12 -0
- lfx/base/agents/default_prompts.py +23 -0
- lfx/base/agents/errors.py +15 -0
- lfx/base/agents/events.py +430 -0
- lfx/base/agents/utils.py +237 -0
- lfx/base/astra_assistants/__init__.py +0 -0
- lfx/base/astra_assistants/util.py +171 -0
- lfx/base/chains/__init__.py +0 -0
- lfx/base/chains/model.py +19 -0
- lfx/base/composio/__init__.py +0 -0
- lfx/base/composio/composio_base.py +2584 -0
- lfx/base/compressors/__init__.py +0 -0
- lfx/base/compressors/model.py +60 -0
- lfx/base/constants.py +46 -0
- lfx/base/curl/__init__.py +0 -0
- lfx/base/curl/parse.py +188 -0
- lfx/base/data/__init__.py +5 -0
- lfx/base/data/base_file.py +810 -0
- lfx/base/data/docling_utils.py +338 -0
- lfx/base/data/storage_utils.py +192 -0
- lfx/base/data/utils.py +362 -0
- lfx/base/datastax/__init__.py +5 -0
- lfx/base/datastax/astradb_base.py +896 -0
- lfx/base/document_transformers/__init__.py +0 -0
- lfx/base/document_transformers/model.py +43 -0
- lfx/base/embeddings/__init__.py +0 -0
- lfx/base/embeddings/aiml_embeddings.py +62 -0
- lfx/base/embeddings/embeddings_class.py +113 -0
- lfx/base/embeddings/model.py +26 -0
- lfx/base/flow_processing/__init__.py +0 -0
- lfx/base/flow_processing/utils.py +86 -0
- lfx/base/huggingface/__init__.py +0 -0
- lfx/base/huggingface/model_bridge.py +133 -0
- lfx/base/io/__init__.py +0 -0
- lfx/base/io/chat.py +21 -0
- lfx/base/io/text.py +22 -0
- lfx/base/knowledge_bases/__init__.py +3 -0
- lfx/base/knowledge_bases/knowledge_base_utils.py +137 -0
- lfx/base/langchain_utilities/__init__.py +0 -0
- lfx/base/langchain_utilities/model.py +35 -0
- lfx/base/langchain_utilities/spider_constants.py +1 -0
- lfx/base/langwatch/__init__.py +0 -0
- lfx/base/langwatch/utils.py +18 -0
- lfx/base/mcp/__init__.py +0 -0
- lfx/base/mcp/constants.py +2 -0
- lfx/base/mcp/util.py +1659 -0
- lfx/base/memory/__init__.py +0 -0
- lfx/base/memory/memory.py +49 -0
- lfx/base/memory/model.py +38 -0
- lfx/base/models/__init__.py +3 -0
- lfx/base/models/aiml_constants.py +51 -0
- lfx/base/models/anthropic_constants.py +51 -0
- lfx/base/models/aws_constants.py +151 -0
- lfx/base/models/chat_result.py +76 -0
- lfx/base/models/cometapi_constants.py +54 -0
- lfx/base/models/google_generative_ai_constants.py +70 -0
- lfx/base/models/google_generative_ai_model.py +38 -0
- lfx/base/models/groq_constants.py +150 -0
- lfx/base/models/groq_model_discovery.py +265 -0
- lfx/base/models/model.py +375 -0
- lfx/base/models/model_input_constants.py +378 -0
- lfx/base/models/model_metadata.py +41 -0
- lfx/base/models/model_utils.py +108 -0
- lfx/base/models/novita_constants.py +35 -0
- lfx/base/models/ollama_constants.py +52 -0
- lfx/base/models/openai_constants.py +129 -0
- lfx/base/models/sambanova_constants.py +18 -0
- lfx/base/models/watsonx_constants.py +36 -0
- lfx/base/processing/__init__.py +0 -0
- lfx/base/prompts/__init__.py +0 -0
- lfx/base/prompts/api_utils.py +224 -0
- lfx/base/prompts/utils.py +61 -0
- lfx/base/textsplitters/__init__.py +0 -0
- lfx/base/textsplitters/model.py +28 -0
- lfx/base/tools/__init__.py +0 -0
- lfx/base/tools/base.py +26 -0
- lfx/base/tools/component_tool.py +325 -0
- lfx/base/tools/constants.py +49 -0
- lfx/base/tools/flow_tool.py +132 -0
- lfx/base/tools/run_flow.py +698 -0
- lfx/base/vectorstores/__init__.py +0 -0
- lfx/base/vectorstores/model.py +193 -0
- lfx/base/vectorstores/utils.py +22 -0
- lfx/base/vectorstores/vector_store_connection_decorator.py +52 -0
- lfx/cli/__init__.py +5 -0
- lfx/cli/commands.py +327 -0
- lfx/cli/common.py +650 -0
- lfx/cli/run.py +506 -0
- lfx/cli/script_loader.py +289 -0
- lfx/cli/serve_app.py +546 -0
- lfx/cli/validation.py +69 -0
- lfx/components/FAISS/__init__.py +34 -0
- lfx/components/FAISS/faiss.py +111 -0
- lfx/components/Notion/__init__.py +19 -0
- lfx/components/Notion/add_content_to_page.py +269 -0
- lfx/components/Notion/create_page.py +94 -0
- lfx/components/Notion/list_database_properties.py +68 -0
- lfx/components/Notion/list_pages.py +122 -0
- lfx/components/Notion/list_users.py +77 -0
- lfx/components/Notion/page_content_viewer.py +93 -0
- lfx/components/Notion/search.py +111 -0
- lfx/components/Notion/update_page_property.py +114 -0
- lfx/components/__init__.py +428 -0
- lfx/components/_importing.py +42 -0
- lfx/components/agentql/__init__.py +3 -0
- lfx/components/agentql/agentql_api.py +151 -0
- lfx/components/aiml/__init__.py +37 -0
- lfx/components/aiml/aiml.py +115 -0
- lfx/components/aiml/aiml_embeddings.py +37 -0
- lfx/components/altk/__init__.py +34 -0
- lfx/components/altk/altk_agent.py +193 -0
- lfx/components/amazon/__init__.py +36 -0
- lfx/components/amazon/amazon_bedrock_converse.py +195 -0
- lfx/components/amazon/amazon_bedrock_embedding.py +109 -0
- lfx/components/amazon/amazon_bedrock_model.py +130 -0
- lfx/components/amazon/s3_bucket_uploader.py +211 -0
- lfx/components/anthropic/__init__.py +34 -0
- lfx/components/anthropic/anthropic.py +187 -0
- lfx/components/apify/__init__.py +5 -0
- lfx/components/apify/apify_actor.py +325 -0
- lfx/components/arxiv/__init__.py +3 -0
- lfx/components/arxiv/arxiv.py +169 -0
- lfx/components/assemblyai/__init__.py +46 -0
- lfx/components/assemblyai/assemblyai_get_subtitles.py +83 -0
- lfx/components/assemblyai/assemblyai_lemur.py +183 -0
- lfx/components/assemblyai/assemblyai_list_transcripts.py +95 -0
- lfx/components/assemblyai/assemblyai_poll_transcript.py +72 -0
- lfx/components/assemblyai/assemblyai_start_transcript.py +188 -0
- lfx/components/azure/__init__.py +37 -0
- lfx/components/azure/azure_openai.py +95 -0
- lfx/components/azure/azure_openai_embeddings.py +83 -0
- lfx/components/baidu/__init__.py +32 -0
- lfx/components/baidu/baidu_qianfan_chat.py +113 -0
- lfx/components/bing/__init__.py +3 -0
- lfx/components/bing/bing_search_api.py +61 -0
- lfx/components/cassandra/__init__.py +40 -0
- lfx/components/cassandra/cassandra.py +264 -0
- lfx/components/cassandra/cassandra_chat.py +92 -0
- lfx/components/cassandra/cassandra_graph.py +238 -0
- lfx/components/chains/__init__.py +3 -0
- lfx/components/chroma/__init__.py +34 -0
- lfx/components/chroma/chroma.py +169 -0
- lfx/components/cleanlab/__init__.py +40 -0
- lfx/components/cleanlab/cleanlab_evaluator.py +155 -0
- lfx/components/cleanlab/cleanlab_rag_evaluator.py +254 -0
- lfx/components/cleanlab/cleanlab_remediator.py +131 -0
- lfx/components/clickhouse/__init__.py +34 -0
- lfx/components/clickhouse/clickhouse.py +135 -0
- lfx/components/cloudflare/__init__.py +32 -0
- lfx/components/cloudflare/cloudflare.py +81 -0
- lfx/components/cohere/__init__.py +40 -0
- lfx/components/cohere/cohere_embeddings.py +81 -0
- lfx/components/cohere/cohere_models.py +46 -0
- lfx/components/cohere/cohere_rerank.py +51 -0
- lfx/components/cometapi/__init__.py +32 -0
- lfx/components/cometapi/cometapi.py +166 -0
- lfx/components/composio/__init__.py +222 -0
- lfx/components/composio/agentql_composio.py +11 -0
- lfx/components/composio/agiled_composio.py +11 -0
- lfx/components/composio/airtable_composio.py +11 -0
- lfx/components/composio/apollo_composio.py +11 -0
- lfx/components/composio/asana_composio.py +11 -0
- lfx/components/composio/attio_composio.py +11 -0
- lfx/components/composio/bitbucket_composio.py +11 -0
- lfx/components/composio/bolna_composio.py +11 -0
- lfx/components/composio/brightdata_composio.py +11 -0
- lfx/components/composio/calendly_composio.py +11 -0
- lfx/components/composio/canva_composio.py +11 -0
- lfx/components/composio/canvas_composio.py +11 -0
- lfx/components/composio/coda_composio.py +11 -0
- lfx/components/composio/composio_api.py +278 -0
- lfx/components/composio/contentful_composio.py +11 -0
- lfx/components/composio/digicert_composio.py +11 -0
- lfx/components/composio/discord_composio.py +11 -0
- lfx/components/composio/dropbox_compnent.py +11 -0
- lfx/components/composio/elevenlabs_composio.py +11 -0
- lfx/components/composio/exa_composio.py +11 -0
- lfx/components/composio/figma_composio.py +11 -0
- lfx/components/composio/finage_composio.py +11 -0
- lfx/components/composio/firecrawl_composio.py +11 -0
- lfx/components/composio/fireflies_composio.py +11 -0
- lfx/components/composio/fixer_composio.py +11 -0
- lfx/components/composio/flexisign_composio.py +11 -0
- lfx/components/composio/freshdesk_composio.py +11 -0
- lfx/components/composio/github_composio.py +11 -0
- lfx/components/composio/gmail_composio.py +38 -0
- lfx/components/composio/googlebigquery_composio.py +11 -0
- lfx/components/composio/googlecalendar_composio.py +11 -0
- lfx/components/composio/googleclassroom_composio.py +11 -0
- lfx/components/composio/googledocs_composio.py +11 -0
- lfx/components/composio/googlemeet_composio.py +11 -0
- lfx/components/composio/googlesheets_composio.py +11 -0
- lfx/components/composio/googletasks_composio.py +8 -0
- lfx/components/composio/heygen_composio.py +11 -0
- lfx/components/composio/instagram_composio.py +11 -0
- lfx/components/composio/jira_composio.py +11 -0
- lfx/components/composio/jotform_composio.py +11 -0
- lfx/components/composio/klaviyo_composio.py +11 -0
- lfx/components/composio/linear_composio.py +11 -0
- lfx/components/composio/listennotes_composio.py +11 -0
- lfx/components/composio/mem0_composio.py +11 -0
- lfx/components/composio/miro_composio.py +11 -0
- lfx/components/composio/missive_composio.py +11 -0
- lfx/components/composio/notion_composio.py +11 -0
- lfx/components/composio/onedrive_composio.py +11 -0
- lfx/components/composio/outlook_composio.py +11 -0
- lfx/components/composio/pandadoc_composio.py +11 -0
- lfx/components/composio/peopledatalabs_composio.py +11 -0
- lfx/components/composio/perplexityai_composio.py +11 -0
- lfx/components/composio/reddit_composio.py +11 -0
- lfx/components/composio/serpapi_composio.py +11 -0
- lfx/components/composio/slack_composio.py +11 -0
- lfx/components/composio/slackbot_composio.py +11 -0
- lfx/components/composio/snowflake_composio.py +11 -0
- lfx/components/composio/supabase_composio.py +11 -0
- lfx/components/composio/tavily_composio.py +11 -0
- lfx/components/composio/timelinesai_composio.py +11 -0
- lfx/components/composio/todoist_composio.py +11 -0
- lfx/components/composio/wrike_composio.py +11 -0
- lfx/components/composio/youtube_composio.py +11 -0
- lfx/components/confluence/__init__.py +3 -0
- lfx/components/confluence/confluence.py +84 -0
- lfx/components/couchbase/__init__.py +34 -0
- lfx/components/couchbase/couchbase.py +102 -0
- lfx/components/crewai/__init__.py +49 -0
- lfx/components/crewai/crewai.py +108 -0
- lfx/components/crewai/hierarchical_crew.py +47 -0
- lfx/components/crewai/hierarchical_task.py +45 -0
- lfx/components/crewai/sequential_crew.py +53 -0
- lfx/components/crewai/sequential_task.py +74 -0
- lfx/components/crewai/sequential_task_agent.py +144 -0
- lfx/components/cuga/__init__.py +34 -0
- lfx/components/cuga/cuga_agent.py +730 -0
- lfx/components/custom_component/__init__.py +34 -0
- lfx/components/custom_component/custom_component.py +31 -0
- lfx/components/data/__init__.py +114 -0
- lfx/components/data_source/__init__.py +58 -0
- lfx/components/data_source/api_request.py +577 -0
- lfx/components/data_source/csv_to_data.py +101 -0
- lfx/components/data_source/json_to_data.py +106 -0
- lfx/components/data_source/mock_data.py +398 -0
- lfx/components/data_source/news_search.py +166 -0
- lfx/components/data_source/rss.py +71 -0
- lfx/components/data_source/sql_executor.py +101 -0
- lfx/components/data_source/url.py +311 -0
- lfx/components/data_source/web_search.py +326 -0
- lfx/components/datastax/__init__.py +76 -0
- lfx/components/datastax/astradb_assistant_manager.py +307 -0
- lfx/components/datastax/astradb_chatmemory.py +40 -0
- lfx/components/datastax/astradb_cql.py +288 -0
- lfx/components/datastax/astradb_graph.py +217 -0
- lfx/components/datastax/astradb_tool.py +378 -0
- lfx/components/datastax/astradb_vectorize.py +122 -0
- lfx/components/datastax/astradb_vectorstore.py +449 -0
- lfx/components/datastax/create_assistant.py +59 -0
- lfx/components/datastax/create_thread.py +33 -0
- lfx/components/datastax/dotenv.py +36 -0
- lfx/components/datastax/get_assistant.py +38 -0
- lfx/components/datastax/getenvvar.py +31 -0
- lfx/components/datastax/graph_rag.py +141 -0
- lfx/components/datastax/hcd.py +315 -0
- lfx/components/datastax/list_assistants.py +26 -0
- lfx/components/datastax/run.py +90 -0
- lfx/components/deactivated/__init__.py +15 -0
- lfx/components/deactivated/amazon_kendra.py +66 -0
- lfx/components/deactivated/chat_litellm_model.py +158 -0
- lfx/components/deactivated/code_block_extractor.py +26 -0
- lfx/components/deactivated/documents_to_data.py +22 -0
- lfx/components/deactivated/embed.py +16 -0
- lfx/components/deactivated/extract_key_from_data.py +46 -0
- lfx/components/deactivated/json_document_builder.py +57 -0
- lfx/components/deactivated/list_flows.py +20 -0
- lfx/components/deactivated/mcp_sse.py +61 -0
- lfx/components/deactivated/mcp_stdio.py +62 -0
- lfx/components/deactivated/merge_data.py +93 -0
- lfx/components/deactivated/message.py +37 -0
- lfx/components/deactivated/metal.py +54 -0
- lfx/components/deactivated/multi_query.py +59 -0
- lfx/components/deactivated/retriever.py +43 -0
- lfx/components/deactivated/selective_passthrough.py +77 -0
- lfx/components/deactivated/should_run_next.py +40 -0
- lfx/components/deactivated/split_text.py +63 -0
- lfx/components/deactivated/store_message.py +24 -0
- lfx/components/deactivated/sub_flow.py +124 -0
- lfx/components/deactivated/vectara_self_query.py +76 -0
- lfx/components/deactivated/vector_store.py +24 -0
- lfx/components/deepseek/__init__.py +34 -0
- lfx/components/deepseek/deepseek.py +136 -0
- lfx/components/docling/__init__.py +43 -0
- lfx/components/docling/chunk_docling_document.py +186 -0
- lfx/components/docling/docling_inline.py +238 -0
- lfx/components/docling/docling_remote.py +195 -0
- lfx/components/docling/export_docling_document.py +117 -0
- lfx/components/documentloaders/__init__.py +3 -0
- lfx/components/duckduckgo/__init__.py +3 -0
- lfx/components/duckduckgo/duck_duck_go_search_run.py +92 -0
- lfx/components/elastic/__init__.py +37 -0
- lfx/components/elastic/elasticsearch.py +267 -0
- lfx/components/elastic/opensearch.py +789 -0
- lfx/components/elastic/opensearch_multimodal.py +1575 -0
- lfx/components/embeddings/__init__.py +37 -0
- lfx/components/embeddings/similarity.py +77 -0
- lfx/components/embeddings/text_embedder.py +65 -0
- lfx/components/exa/__init__.py +3 -0
- lfx/components/exa/exa_search.py +68 -0
- lfx/components/files_and_knowledge/__init__.py +47 -0
- lfx/components/files_and_knowledge/directory.py +113 -0
- lfx/components/files_and_knowledge/file.py +841 -0
- lfx/components/files_and_knowledge/ingestion.py +694 -0
- lfx/components/files_and_knowledge/retrieval.py +264 -0
- lfx/components/files_and_knowledge/save_file.py +746 -0
- lfx/components/firecrawl/__init__.py +43 -0
- lfx/components/firecrawl/firecrawl_crawl_api.py +88 -0
- lfx/components/firecrawl/firecrawl_extract_api.py +136 -0
- lfx/components/firecrawl/firecrawl_map_api.py +89 -0
- lfx/components/firecrawl/firecrawl_scrape_api.py +73 -0
- lfx/components/flow_controls/__init__.py +58 -0
- lfx/components/flow_controls/conditional_router.py +208 -0
- lfx/components/flow_controls/data_conditional_router.py +126 -0
- lfx/components/flow_controls/flow_tool.py +111 -0
- lfx/components/flow_controls/listen.py +29 -0
- lfx/components/flow_controls/loop.py +163 -0
- lfx/components/flow_controls/notify.py +88 -0
- lfx/components/flow_controls/pass_message.py +36 -0
- lfx/components/flow_controls/run_flow.py +108 -0
- lfx/components/flow_controls/sub_flow.py +115 -0
- lfx/components/git/__init__.py +4 -0
- lfx/components/git/git.py +262 -0
- lfx/components/git/gitextractor.py +196 -0
- lfx/components/glean/__init__.py +3 -0
- lfx/components/glean/glean_search_api.py +173 -0
- lfx/components/google/__init__.py +17 -0
- lfx/components/google/gmail.py +193 -0
- lfx/components/google/google_bq_sql_executor.py +157 -0
- lfx/components/google/google_drive.py +92 -0
- lfx/components/google/google_drive_search.py +152 -0
- lfx/components/google/google_generative_ai.py +144 -0
- lfx/components/google/google_generative_ai_embeddings.py +141 -0
- lfx/components/google/google_oauth_token.py +89 -0
- lfx/components/google/google_search_api_core.py +68 -0
- lfx/components/google/google_serper_api_core.py +74 -0
- lfx/components/groq/__init__.py +34 -0
- lfx/components/groq/groq.py +143 -0
- lfx/components/helpers/__init__.py +154 -0
- lfx/components/homeassistant/__init__.py +7 -0
- lfx/components/homeassistant/home_assistant_control.py +152 -0
- lfx/components/homeassistant/list_home_assistant_states.py +137 -0
- lfx/components/huggingface/__init__.py +37 -0
- lfx/components/huggingface/huggingface.py +199 -0
- lfx/components/huggingface/huggingface_inference_api.py +106 -0
- lfx/components/ibm/__init__.py +34 -0
- lfx/components/ibm/watsonx.py +207 -0
- lfx/components/ibm/watsonx_embeddings.py +135 -0
- lfx/components/icosacomputing/__init__.py +5 -0
- lfx/components/icosacomputing/combinatorial_reasoner.py +84 -0
- lfx/components/input_output/__init__.py +40 -0
- lfx/components/input_output/chat.py +109 -0
- lfx/components/input_output/chat_output.py +184 -0
- lfx/components/input_output/text.py +27 -0
- lfx/components/input_output/text_output.py +29 -0
- lfx/components/input_output/webhook.py +56 -0
- lfx/components/jigsawstack/__init__.py +23 -0
- lfx/components/jigsawstack/ai_scrape.py +126 -0
- lfx/components/jigsawstack/ai_web_search.py +136 -0
- lfx/components/jigsawstack/file_read.py +115 -0
- lfx/components/jigsawstack/file_upload.py +94 -0
- lfx/components/jigsawstack/image_generation.py +205 -0
- lfx/components/jigsawstack/nsfw.py +60 -0
- lfx/components/jigsawstack/object_detection.py +124 -0
- lfx/components/jigsawstack/sentiment.py +112 -0
- lfx/components/jigsawstack/text_to_sql.py +90 -0
- lfx/components/jigsawstack/text_translate.py +77 -0
- lfx/components/jigsawstack/vocr.py +107 -0
- lfx/components/knowledge_bases/__init__.py +89 -0
- lfx/components/langchain_utilities/__init__.py +109 -0
- lfx/components/langchain_utilities/character.py +53 -0
- lfx/components/langchain_utilities/conversation.py +59 -0
- lfx/components/langchain_utilities/csv_agent.py +175 -0
- lfx/components/langchain_utilities/fake_embeddings.py +26 -0
- lfx/components/langchain_utilities/html_link_extractor.py +35 -0
- lfx/components/langchain_utilities/json_agent.py +100 -0
- lfx/components/langchain_utilities/langchain_hub.py +126 -0
- lfx/components/langchain_utilities/language_recursive.py +49 -0
- lfx/components/langchain_utilities/language_semantic.py +138 -0
- lfx/components/langchain_utilities/llm_checker.py +39 -0
- lfx/components/langchain_utilities/llm_math.py +42 -0
- lfx/components/langchain_utilities/natural_language.py +61 -0
- lfx/components/langchain_utilities/openai_tools.py +53 -0
- lfx/components/langchain_utilities/openapi.py +48 -0
- lfx/components/langchain_utilities/recursive_character.py +60 -0
- lfx/components/langchain_utilities/retrieval_qa.py +83 -0
- lfx/components/langchain_utilities/runnable_executor.py +137 -0
- lfx/components/langchain_utilities/self_query.py +80 -0
- lfx/components/langchain_utilities/spider.py +142 -0
- lfx/components/langchain_utilities/sql.py +40 -0
- lfx/components/langchain_utilities/sql_database.py +35 -0
- lfx/components/langchain_utilities/sql_generator.py +78 -0
- lfx/components/langchain_utilities/tool_calling.py +59 -0
- lfx/components/langchain_utilities/vector_store_info.py +49 -0
- lfx/components/langchain_utilities/vector_store_router.py +33 -0
- lfx/components/langchain_utilities/xml_agent.py +71 -0
- lfx/components/langwatch/__init__.py +3 -0
- lfx/components/langwatch/langwatch.py +278 -0
- lfx/components/link_extractors/__init__.py +3 -0
- lfx/components/llm_operations/__init__.py +46 -0
- lfx/components/llm_operations/batch_run.py +205 -0
- lfx/components/llm_operations/lambda_filter.py +218 -0
- lfx/components/llm_operations/llm_conditional_router.py +421 -0
- lfx/components/llm_operations/llm_selector.py +499 -0
- lfx/components/llm_operations/structured_output.py +244 -0
- lfx/components/lmstudio/__init__.py +34 -0
- lfx/components/lmstudio/lmstudioembeddings.py +89 -0
- lfx/components/lmstudio/lmstudiomodel.py +133 -0
- lfx/components/logic/__init__.py +181 -0
- lfx/components/maritalk/__init__.py +32 -0
- lfx/components/maritalk/maritalk.py +52 -0
- lfx/components/mem0/__init__.py +3 -0
- lfx/components/mem0/mem0_chat_memory.py +147 -0
- lfx/components/milvus/__init__.py +34 -0
- lfx/components/milvus/milvus.py +115 -0
- lfx/components/mistral/__init__.py +37 -0
- lfx/components/mistral/mistral.py +114 -0
- lfx/components/mistral/mistral_embeddings.py +58 -0
- lfx/components/models/__init__.py +89 -0
- lfx/components/models_and_agents/__init__.py +49 -0
- lfx/components/models_and_agents/agent.py +644 -0
- lfx/components/models_and_agents/embedding_model.py +423 -0
- lfx/components/models_and_agents/language_model.py +398 -0
- lfx/components/models_and_agents/mcp_component.py +594 -0
- lfx/components/models_and_agents/memory.py +268 -0
- lfx/components/models_and_agents/prompt.py +67 -0
- lfx/components/mongodb/__init__.py +34 -0
- lfx/components/mongodb/mongodb_atlas.py +213 -0
- lfx/components/needle/__init__.py +3 -0
- lfx/components/needle/needle.py +104 -0
- lfx/components/notdiamond/__init__.py +34 -0
- lfx/components/notdiamond/notdiamond.py +228 -0
- lfx/components/novita/__init__.py +32 -0
- lfx/components/novita/novita.py +130 -0
- lfx/components/nvidia/__init__.py +57 -0
- lfx/components/nvidia/nvidia.py +151 -0
- lfx/components/nvidia/nvidia_embedding.py +77 -0
- lfx/components/nvidia/nvidia_ingest.py +317 -0
- lfx/components/nvidia/nvidia_rerank.py +63 -0
- lfx/components/nvidia/system_assist.py +65 -0
- lfx/components/olivya/__init__.py +3 -0
- lfx/components/olivya/olivya.py +116 -0
- lfx/components/ollama/__init__.py +37 -0
- lfx/components/ollama/ollama.py +548 -0
- lfx/components/ollama/ollama_embeddings.py +103 -0
- lfx/components/openai/__init__.py +37 -0
- lfx/components/openai/openai.py +100 -0
- lfx/components/openai/openai_chat_model.py +176 -0
- lfx/components/openrouter/__init__.py +32 -0
- lfx/components/openrouter/openrouter.py +104 -0
- lfx/components/output_parsers/__init__.py +3 -0
- lfx/components/perplexity/__init__.py +34 -0
- lfx/components/perplexity/perplexity.py +75 -0
- lfx/components/pgvector/__init__.py +34 -0
- lfx/components/pgvector/pgvector.py +72 -0
- lfx/components/pinecone/__init__.py +34 -0
- lfx/components/pinecone/pinecone.py +134 -0
- lfx/components/processing/__init__.py +72 -0
- lfx/components/processing/alter_metadata.py +109 -0
- lfx/components/processing/combine_text.py +40 -0
- lfx/components/processing/converter.py +248 -0
- lfx/components/processing/create_data.py +111 -0
- lfx/components/processing/create_list.py +40 -0
- lfx/components/processing/data_operations.py +528 -0
- lfx/components/processing/data_to_dataframe.py +71 -0
- lfx/components/processing/dataframe_operations.py +313 -0
- lfx/components/processing/dataframe_to_toolset.py +259 -0
- lfx/components/processing/dynamic_create_data.py +357 -0
- lfx/components/processing/extract_key.py +54 -0
- lfx/components/processing/filter_data.py +43 -0
- lfx/components/processing/filter_data_values.py +89 -0
- lfx/components/processing/json_cleaner.py +104 -0
- lfx/components/processing/merge_data.py +91 -0
- lfx/components/processing/message_to_data.py +37 -0
- lfx/components/processing/output_parser.py +46 -0
- lfx/components/processing/parse_data.py +71 -0
- lfx/components/processing/parse_dataframe.py +69 -0
- lfx/components/processing/parse_json_data.py +91 -0
- lfx/components/processing/parser.py +148 -0
- lfx/components/processing/regex.py +83 -0
- lfx/components/processing/select_data.py +49 -0
- lfx/components/processing/split_text.py +141 -0
- lfx/components/processing/store_message.py +91 -0
- lfx/components/processing/update_data.py +161 -0
- lfx/components/prototypes/__init__.py +35 -0
- lfx/components/prototypes/python_function.py +73 -0
- lfx/components/qdrant/__init__.py +34 -0
- lfx/components/qdrant/qdrant.py +109 -0
- lfx/components/redis/__init__.py +37 -0
- lfx/components/redis/redis.py +89 -0
- lfx/components/redis/redis_chat.py +43 -0
- lfx/components/sambanova/__init__.py +32 -0
- lfx/components/sambanova/sambanova.py +84 -0
- lfx/components/scrapegraph/__init__.py +40 -0
- lfx/components/scrapegraph/scrapegraph_markdownify_api.py +64 -0
- lfx/components/scrapegraph/scrapegraph_search_api.py +64 -0
- lfx/components/scrapegraph/scrapegraph_smart_scraper_api.py +71 -0
- lfx/components/searchapi/__init__.py +34 -0
- lfx/components/searchapi/search.py +79 -0
- lfx/components/serpapi/__init__.py +3 -0
- lfx/components/serpapi/serp.py +115 -0
- lfx/components/supabase/__init__.py +34 -0
- lfx/components/supabase/supabase.py +76 -0
- lfx/components/tavily/__init__.py +4 -0
- lfx/components/tavily/tavily_extract.py +117 -0
- lfx/components/tavily/tavily_search.py +212 -0
- lfx/components/textsplitters/__init__.py +3 -0
- lfx/components/toolkits/__init__.py +3 -0
- lfx/components/tools/__init__.py +66 -0
- lfx/components/tools/calculator.py +109 -0
- lfx/components/tools/google_search_api.py +45 -0
- lfx/components/tools/google_serper_api.py +115 -0
- lfx/components/tools/python_code_structured_tool.py +328 -0
- lfx/components/tools/python_repl.py +98 -0
- lfx/components/tools/search_api.py +88 -0
- lfx/components/tools/searxng.py +145 -0
- lfx/components/tools/serp_api.py +120 -0
- lfx/components/tools/tavily_search_tool.py +345 -0
- lfx/components/tools/wikidata_api.py +103 -0
- lfx/components/tools/wikipedia_api.py +50 -0
- lfx/components/tools/yahoo_finance.py +130 -0
- lfx/components/twelvelabs/__init__.py +52 -0
- lfx/components/twelvelabs/convert_astra_results.py +84 -0
- lfx/components/twelvelabs/pegasus_index.py +311 -0
- lfx/components/twelvelabs/split_video.py +301 -0
- lfx/components/twelvelabs/text_embeddings.py +57 -0
- lfx/components/twelvelabs/twelvelabs_pegasus.py +408 -0
- lfx/components/twelvelabs/video_embeddings.py +100 -0
- lfx/components/twelvelabs/video_file.py +191 -0
- lfx/components/unstructured/__init__.py +3 -0
- lfx/components/unstructured/unstructured.py +121 -0
- lfx/components/upstash/__init__.py +34 -0
- lfx/components/upstash/upstash.py +124 -0
- lfx/components/utilities/__init__.py +43 -0
- lfx/components/utilities/calculator_core.py +89 -0
- lfx/components/utilities/current_date.py +42 -0
- lfx/components/utilities/id_generator.py +42 -0
- lfx/components/utilities/python_repl_core.py +98 -0
- lfx/components/vectara/__init__.py +37 -0
- lfx/components/vectara/vectara.py +97 -0
- lfx/components/vectara/vectara_rag.py +164 -0
- lfx/components/vectorstores/__init__.py +34 -0
- lfx/components/vectorstores/local_db.py +270 -0
- lfx/components/vertexai/__init__.py +37 -0
- lfx/components/vertexai/vertexai.py +71 -0
- lfx/components/vertexai/vertexai_embeddings.py +67 -0
- lfx/components/vlmrun/__init__.py +34 -0
- lfx/components/vlmrun/vlmrun_transcription.py +224 -0
- lfx/components/weaviate/__init__.py +34 -0
- lfx/components/weaviate/weaviate.py +89 -0
- lfx/components/wikipedia/__init__.py +4 -0
- lfx/components/wikipedia/wikidata.py +86 -0
- lfx/components/wikipedia/wikipedia.py +53 -0
- lfx/components/wolframalpha/__init__.py +3 -0
- lfx/components/wolframalpha/wolfram_alpha_api.py +54 -0
- lfx/components/xai/__init__.py +32 -0
- lfx/components/xai/xai.py +167 -0
- lfx/components/yahoosearch/__init__.py +3 -0
- lfx/components/yahoosearch/yahoo.py +137 -0
- lfx/components/youtube/__init__.py +52 -0
- lfx/components/youtube/channel.py +227 -0
- lfx/components/youtube/comments.py +231 -0
- lfx/components/youtube/playlist.py +33 -0
- lfx/components/youtube/search.py +120 -0
- lfx/components/youtube/trending.py +285 -0
- lfx/components/youtube/video_details.py +263 -0
- lfx/components/youtube/youtube_transcripts.py +206 -0
- lfx/components/zep/__init__.py +3 -0
- lfx/components/zep/zep.py +45 -0
- lfx/constants.py +6 -0
- lfx/custom/__init__.py +7 -0
- lfx/custom/attributes.py +87 -0
- lfx/custom/code_parser/__init__.py +3 -0
- lfx/custom/code_parser/code_parser.py +361 -0
- lfx/custom/custom_component/__init__.py +0 -0
- lfx/custom/custom_component/base_component.py +128 -0
- lfx/custom/custom_component/component.py +1890 -0
- lfx/custom/custom_component/component_with_cache.py +8 -0
- lfx/custom/custom_component/custom_component.py +650 -0
- lfx/custom/dependency_analyzer.py +165 -0
- lfx/custom/directory_reader/__init__.py +3 -0
- lfx/custom/directory_reader/directory_reader.py +359 -0
- lfx/custom/directory_reader/utils.py +171 -0
- lfx/custom/eval.py +12 -0
- lfx/custom/schema.py +32 -0
- lfx/custom/tree_visitor.py +21 -0
- lfx/custom/utils.py +877 -0
- lfx/custom/validate.py +523 -0
- lfx/events/__init__.py +1 -0
- lfx/events/event_manager.py +110 -0
- lfx/exceptions/__init__.py +0 -0
- lfx/exceptions/component.py +15 -0
- lfx/field_typing/__init__.py +91 -0
- lfx/field_typing/constants.py +216 -0
- lfx/field_typing/range_spec.py +35 -0
- lfx/graph/__init__.py +6 -0
- lfx/graph/edge/__init__.py +0 -0
- lfx/graph/edge/base.py +300 -0
- lfx/graph/edge/schema.py +119 -0
- lfx/graph/edge/utils.py +0 -0
- lfx/graph/graph/__init__.py +0 -0
- lfx/graph/graph/ascii.py +202 -0
- lfx/graph/graph/base.py +2298 -0
- lfx/graph/graph/constants.py +63 -0
- lfx/graph/graph/runnable_vertices_manager.py +133 -0
- lfx/graph/graph/schema.py +53 -0
- lfx/graph/graph/state_model.py +66 -0
- lfx/graph/graph/utils.py +1024 -0
- lfx/graph/schema.py +75 -0
- lfx/graph/state/__init__.py +0 -0
- lfx/graph/state/model.py +250 -0
- lfx/graph/utils.py +206 -0
- lfx/graph/vertex/__init__.py +0 -0
- lfx/graph/vertex/base.py +826 -0
- lfx/graph/vertex/constants.py +0 -0
- lfx/graph/vertex/exceptions.py +4 -0
- lfx/graph/vertex/param_handler.py +316 -0
- lfx/graph/vertex/schema.py +26 -0
- lfx/graph/vertex/utils.py +19 -0
- lfx/graph/vertex/vertex_types.py +489 -0
- lfx/helpers/__init__.py +141 -0
- lfx/helpers/base_model.py +71 -0
- lfx/helpers/custom.py +13 -0
- lfx/helpers/data.py +167 -0
- lfx/helpers/flow.py +308 -0
- lfx/inputs/__init__.py +68 -0
- lfx/inputs/constants.py +2 -0
- lfx/inputs/input_mixin.py +352 -0
- lfx/inputs/inputs.py +718 -0
- lfx/inputs/validators.py +19 -0
- lfx/interface/__init__.py +6 -0
- lfx/interface/components.py +897 -0
- lfx/interface/importing/__init__.py +5 -0
- lfx/interface/importing/utils.py +39 -0
- lfx/interface/initialize/__init__.py +3 -0
- lfx/interface/initialize/loading.py +317 -0
- lfx/interface/listing.py +26 -0
- lfx/interface/run.py +16 -0
- lfx/interface/utils.py +111 -0
- lfx/io/__init__.py +63 -0
- lfx/io/schema.py +295 -0
- lfx/load/__init__.py +8 -0
- lfx/load/load.py +256 -0
- lfx/load/utils.py +99 -0
- lfx/log/__init__.py +5 -0
- lfx/log/logger.py +411 -0
- lfx/logging/__init__.py +11 -0
- lfx/logging/logger.py +24 -0
- lfx/memory/__init__.py +70 -0
- lfx/memory/stubs.py +302 -0
- lfx/processing/__init__.py +1 -0
- lfx/processing/process.py +238 -0
- lfx/processing/utils.py +25 -0
- lfx/py.typed +0 -0
- lfx/schema/__init__.py +66 -0
- lfx/schema/artifact.py +83 -0
- lfx/schema/content_block.py +62 -0
- lfx/schema/content_types.py +91 -0
- lfx/schema/cross_module.py +80 -0
- lfx/schema/data.py +309 -0
- lfx/schema/dataframe.py +210 -0
- lfx/schema/dotdict.py +74 -0
- lfx/schema/encoders.py +13 -0
- lfx/schema/graph.py +47 -0
- lfx/schema/image.py +184 -0
- lfx/schema/json_schema.py +186 -0
- lfx/schema/log.py +62 -0
- lfx/schema/message.py +493 -0
- lfx/schema/openai_responses_schemas.py +74 -0
- lfx/schema/properties.py +41 -0
- lfx/schema/schema.py +180 -0
- lfx/schema/serialize.py +13 -0
- lfx/schema/table.py +142 -0
- lfx/schema/validators.py +114 -0
- lfx/serialization/__init__.py +5 -0
- lfx/serialization/constants.py +2 -0
- lfx/serialization/serialization.py +314 -0
- lfx/services/__init__.py +26 -0
- lfx/services/base.py +28 -0
- lfx/services/cache/__init__.py +6 -0
- lfx/services/cache/base.py +183 -0
- lfx/services/cache/service.py +166 -0
- lfx/services/cache/utils.py +169 -0
- lfx/services/chat/__init__.py +1 -0
- lfx/services/chat/config.py +2 -0
- lfx/services/chat/schema.py +10 -0
- lfx/services/database/__init__.py +5 -0
- lfx/services/database/service.py +25 -0
- lfx/services/deps.py +194 -0
- lfx/services/factory.py +19 -0
- lfx/services/initialize.py +19 -0
- lfx/services/interfaces.py +103 -0
- lfx/services/manager.py +185 -0
- lfx/services/mcp_composer/__init__.py +6 -0
- lfx/services/mcp_composer/factory.py +16 -0
- lfx/services/mcp_composer/service.py +1441 -0
- lfx/services/schema.py +21 -0
- lfx/services/session.py +87 -0
- lfx/services/settings/__init__.py +3 -0
- lfx/services/settings/auth.py +133 -0
- lfx/services/settings/base.py +668 -0
- lfx/services/settings/constants.py +43 -0
- lfx/services/settings/factory.py +23 -0
- lfx/services/settings/feature_flags.py +11 -0
- lfx/services/settings/service.py +35 -0
- lfx/services/settings/utils.py +40 -0
- lfx/services/shared_component_cache/__init__.py +1 -0
- lfx/services/shared_component_cache/factory.py +30 -0
- lfx/services/shared_component_cache/service.py +9 -0
- lfx/services/storage/__init__.py +5 -0
- lfx/services/storage/local.py +185 -0
- lfx/services/storage/service.py +177 -0
- lfx/services/tracing/__init__.py +1 -0
- lfx/services/tracing/service.py +21 -0
- lfx/settings.py +6 -0
- lfx/template/__init__.py +6 -0
- lfx/template/field/__init__.py +0 -0
- lfx/template/field/base.py +260 -0
- lfx/template/field/prompt.py +15 -0
- lfx/template/frontend_node/__init__.py +6 -0
- lfx/template/frontend_node/base.py +214 -0
- lfx/template/frontend_node/constants.py +65 -0
- lfx/template/frontend_node/custom_components.py +79 -0
- lfx/template/template/__init__.py +0 -0
- lfx/template/template/base.py +100 -0
- lfx/template/utils.py +217 -0
- lfx/type_extraction/__init__.py +19 -0
- lfx/type_extraction/type_extraction.py +75 -0
- lfx/type_extraction.py +80 -0
- lfx/utils/__init__.py +1 -0
- lfx/utils/async_helpers.py +42 -0
- lfx/utils/component_utils.py +154 -0
- lfx/utils/concurrency.py +60 -0
- lfx/utils/connection_string_parser.py +11 -0
- lfx/utils/constants.py +233 -0
- lfx/utils/data_structure.py +212 -0
- lfx/utils/exceptions.py +22 -0
- lfx/utils/helpers.py +34 -0
- lfx/utils/image.py +79 -0
- lfx/utils/langflow_utils.py +52 -0
- lfx/utils/lazy_load.py +15 -0
- lfx/utils/request_utils.py +18 -0
- lfx/utils/schemas.py +139 -0
- lfx/utils/ssrf_protection.py +384 -0
- lfx/utils/util.py +626 -0
- lfx/utils/util_strings.py +56 -0
- lfx/utils/validate_cloud.py +26 -0
- lfx/utils/version.py +24 -0
- lfx_nightly-0.2.0.dev25.dist-info/METADATA +312 -0
- lfx_nightly-0.2.0.dev25.dist-info/RECORD +769 -0
- lfx_nightly-0.2.0.dev25.dist-info/WHEEL +4 -0
- lfx_nightly-0.2.0.dev25.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
from langchain_openai import ChatOpenAI
|
|
2
|
+
from pydantic.v1 import SecretStr
|
|
3
|
+
from typing_extensions import override
|
|
4
|
+
|
|
5
|
+
from lfx.base.models.aiml_constants import AimlModels
|
|
6
|
+
from lfx.base.models.model import LCModelComponent
|
|
7
|
+
from lfx.field_typing import LanguageModel
|
|
8
|
+
from lfx.field_typing.range_spec import RangeSpec
|
|
9
|
+
from lfx.inputs.inputs import (
|
|
10
|
+
DictInput,
|
|
11
|
+
DropdownInput,
|
|
12
|
+
IntInput,
|
|
13
|
+
SecretStrInput,
|
|
14
|
+
SliderInput,
|
|
15
|
+
StrInput,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class AIMLModelComponent(LCModelComponent):
|
|
20
|
+
display_name = "AI/ML API"
|
|
21
|
+
description = "Generates text using AI/ML API LLMs."
|
|
22
|
+
icon = "AIML"
|
|
23
|
+
name = "AIMLModel"
|
|
24
|
+
documentation = "https://docs.aimlapi.com/api-reference"
|
|
25
|
+
|
|
26
|
+
inputs = [
|
|
27
|
+
*LCModelComponent.get_base_inputs(),
|
|
28
|
+
IntInput(
|
|
29
|
+
name="max_tokens",
|
|
30
|
+
display_name="Max Tokens",
|
|
31
|
+
advanced=True,
|
|
32
|
+
info="The maximum number of tokens to generate. Set to 0 for unlimited tokens.",
|
|
33
|
+
range_spec=RangeSpec(min=0, max=128000),
|
|
34
|
+
),
|
|
35
|
+
DictInput(name="model_kwargs", display_name="Model Kwargs", advanced=True),
|
|
36
|
+
DropdownInput(
|
|
37
|
+
name="model_name",
|
|
38
|
+
display_name="Model Name",
|
|
39
|
+
advanced=False,
|
|
40
|
+
options=[],
|
|
41
|
+
refresh_button=True,
|
|
42
|
+
),
|
|
43
|
+
StrInput(
|
|
44
|
+
name="aiml_api_base",
|
|
45
|
+
display_name="AI/ML API Base",
|
|
46
|
+
advanced=True,
|
|
47
|
+
info="The base URL of the API. Defaults to https://api.aimlapi.com . "
|
|
48
|
+
"You can change this to use other APIs like JinaChat, LocalAI and Prem.",
|
|
49
|
+
),
|
|
50
|
+
SecretStrInput(
|
|
51
|
+
name="api_key",
|
|
52
|
+
display_name="AI/ML API Key",
|
|
53
|
+
info="The AI/ML API Key to use for the OpenAI model.",
|
|
54
|
+
advanced=False,
|
|
55
|
+
value="AIML_API_KEY",
|
|
56
|
+
required=True,
|
|
57
|
+
),
|
|
58
|
+
SliderInput(
|
|
59
|
+
name="temperature",
|
|
60
|
+
display_name="Temperature",
|
|
61
|
+
value=0.1,
|
|
62
|
+
range_spec=RangeSpec(min=0, max=2, step=0.01),
|
|
63
|
+
),
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
@override
|
|
67
|
+
def update_build_config(self, build_config: dict, field_value: str, field_name: str | None = None):
|
|
68
|
+
if field_name in {"api_key", "aiml_api_base", "model_name"}:
|
|
69
|
+
aiml = AimlModels()
|
|
70
|
+
aiml.get_aiml_models()
|
|
71
|
+
build_config["model_name"]["options"] = aiml.chat_models
|
|
72
|
+
return build_config
|
|
73
|
+
|
|
74
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
|
75
|
+
aiml_api_key = self.api_key
|
|
76
|
+
temperature = self.temperature
|
|
77
|
+
model_name: str = self.model_name
|
|
78
|
+
max_tokens = self.max_tokens
|
|
79
|
+
model_kwargs = self.model_kwargs or {}
|
|
80
|
+
aiml_api_base = self.aiml_api_base or "https://api.aimlapi.com/v2"
|
|
81
|
+
|
|
82
|
+
openai_api_key = aiml_api_key.get_secret_value() if isinstance(aiml_api_key, SecretStr) else aiml_api_key
|
|
83
|
+
|
|
84
|
+
# TODO: Once OpenAI fixes their o1 models, this part will need to be removed
|
|
85
|
+
# to work correctly with o1 temperature settings.
|
|
86
|
+
if "o1" in model_name:
|
|
87
|
+
temperature = 1
|
|
88
|
+
|
|
89
|
+
return ChatOpenAI(
|
|
90
|
+
model=model_name,
|
|
91
|
+
temperature=temperature,
|
|
92
|
+
api_key=openai_api_key,
|
|
93
|
+
base_url=aiml_api_base,
|
|
94
|
+
max_tokens=max_tokens or None,
|
|
95
|
+
**model_kwargs,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
def _get_exception_message(self, e: Exception):
|
|
99
|
+
"""Get a message from an OpenAI exception.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
e (Exception): The exception to get the message from.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
str: The message from the exception.
|
|
106
|
+
"""
|
|
107
|
+
try:
|
|
108
|
+
from openai.error import BadRequestError
|
|
109
|
+
except ImportError:
|
|
110
|
+
return None
|
|
111
|
+
if isinstance(e, BadRequestError):
|
|
112
|
+
message = e.json_body.get("error", {}).get("message", "")
|
|
113
|
+
if message:
|
|
114
|
+
return message
|
|
115
|
+
return None
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from lfx.base.embeddings.aiml_embeddings import AIMLEmbeddingsImpl
|
|
2
|
+
from lfx.base.embeddings.model import LCEmbeddingsModel
|
|
3
|
+
from lfx.field_typing import Embeddings
|
|
4
|
+
from lfx.inputs.inputs import DropdownInput
|
|
5
|
+
from lfx.io import SecretStrInput
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AIMLEmbeddingsComponent(LCEmbeddingsModel):
|
|
9
|
+
display_name = "AI/ML API Embeddings"
|
|
10
|
+
description = "Generate embeddings using the AI/ML API."
|
|
11
|
+
icon = "AIML"
|
|
12
|
+
name = "AIMLEmbeddings"
|
|
13
|
+
|
|
14
|
+
inputs = [
|
|
15
|
+
DropdownInput(
|
|
16
|
+
name="model_name",
|
|
17
|
+
display_name="Model Name",
|
|
18
|
+
options=[
|
|
19
|
+
"text-embedding-3-small",
|
|
20
|
+
"text-embedding-3-large",
|
|
21
|
+
"text-embedding-ada-002",
|
|
22
|
+
],
|
|
23
|
+
required=True,
|
|
24
|
+
),
|
|
25
|
+
SecretStrInput(
|
|
26
|
+
name="aiml_api_key",
|
|
27
|
+
display_name="AI/ML API Key",
|
|
28
|
+
value="AIML_API_KEY",
|
|
29
|
+
required=True,
|
|
30
|
+
),
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
def build_embeddings(self) -> Embeddings:
|
|
34
|
+
return AIMLEmbeddingsImpl(
|
|
35
|
+
api_key=self.aiml_api_key,
|
|
36
|
+
model=self.model_name,
|
|
37
|
+
)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from .altk_agent import ALTKAgentComponent
|
|
9
|
+
|
|
10
|
+
_dynamic_imports = {
|
|
11
|
+
"ALTKAgentComponent": "altk_agent",
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"ALTKAgentComponent",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def __getattr__(attr_name: str) -> Any:
|
|
20
|
+
"""Lazily import altk components on attribute access."""
|
|
21
|
+
if attr_name not in _dynamic_imports:
|
|
22
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
23
|
+
raise AttributeError(msg)
|
|
24
|
+
try:
|
|
25
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
26
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
27
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
28
|
+
raise AttributeError(msg) from e
|
|
29
|
+
globals()[attr_name] = result
|
|
30
|
+
return result
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def __dir__() -> list[str]:
|
|
34
|
+
return list(__all__)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"""ALTK Agent Component that combines pre-tool validation and post-tool processing capabilities."""
|
|
2
|
+
|
|
3
|
+
from lfx.base.agents.altk_base_agent import ALTKBaseAgentComponent
|
|
4
|
+
from lfx.base.agents.altk_tool_wrappers import (
|
|
5
|
+
PostToolProcessingWrapper,
|
|
6
|
+
PreToolValidationWrapper,
|
|
7
|
+
)
|
|
8
|
+
from lfx.base.models.model_input_constants import MODEL_PROVIDERS_DICT, MODELS_METADATA
|
|
9
|
+
from lfx.components.models_and_agents.memory import MemoryComponent
|
|
10
|
+
from lfx.inputs.inputs import BoolInput
|
|
11
|
+
from lfx.io import DropdownInput, IntInput, Output
|
|
12
|
+
from lfx.log.logger import logger
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def set_advanced_true(component_input):
|
|
16
|
+
"""Set the advanced flag to True for a component input."""
|
|
17
|
+
component_input.advanced = True
|
|
18
|
+
return component_input
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
MODEL_PROVIDERS_LIST = ["Anthropic", "OpenAI"]
|
|
22
|
+
INPUT_NAMES_TO_BE_OVERRIDDEN = ["agent_llm"]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_parent_agent_inputs():
|
|
26
|
+
return [
|
|
27
|
+
input_field
|
|
28
|
+
for input_field in ALTKBaseAgentComponent.inputs
|
|
29
|
+
if input_field.name not in INPUT_NAMES_TO_BE_OVERRIDDEN
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# === Combined ALTK Agent Component ===
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class ALTKAgentComponent(ALTKBaseAgentComponent):
|
|
37
|
+
"""ALTK Agent with both pre-tool validation and post-tool processing capabilities.
|
|
38
|
+
|
|
39
|
+
This agent combines the functionality of both ALTKAgent and AgentReflection components,
|
|
40
|
+
implementing a modular pipeline for tool processing that can be extended with
|
|
41
|
+
additional capabilities in the future.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
display_name: str = "ALTK Agent"
|
|
45
|
+
description: str = "Advanced agent with both pre-tool validation and post-tool processing capabilities."
|
|
46
|
+
documentation: str = "https://docs.langflow.org/bundles-altk"
|
|
47
|
+
icon = "zap"
|
|
48
|
+
beta = True
|
|
49
|
+
name = "ALTK Agent"
|
|
50
|
+
|
|
51
|
+
memory_inputs = [set_advanced_true(component_input) for component_input in MemoryComponent().inputs]
|
|
52
|
+
|
|
53
|
+
# Filter out json_mode from OpenAI inputs since we handle structured output differently
|
|
54
|
+
if "OpenAI" in MODEL_PROVIDERS_DICT:
|
|
55
|
+
openai_inputs_filtered = [
|
|
56
|
+
input_field
|
|
57
|
+
for input_field in MODEL_PROVIDERS_DICT["OpenAI"]["inputs"]
|
|
58
|
+
if not (hasattr(input_field, "name") and input_field.name == "json_mode")
|
|
59
|
+
]
|
|
60
|
+
else:
|
|
61
|
+
openai_inputs_filtered = []
|
|
62
|
+
|
|
63
|
+
inputs = [
|
|
64
|
+
DropdownInput(
|
|
65
|
+
name="agent_llm",
|
|
66
|
+
display_name="Model Provider",
|
|
67
|
+
info="The provider of the language model that the agent will use to generate responses.",
|
|
68
|
+
options=[*MODEL_PROVIDERS_LIST],
|
|
69
|
+
value="OpenAI",
|
|
70
|
+
real_time_refresh=True,
|
|
71
|
+
refresh_button=False,
|
|
72
|
+
input_types=[],
|
|
73
|
+
options_metadata=[MODELS_METADATA[key] for key in MODEL_PROVIDERS_LIST if key in MODELS_METADATA],
|
|
74
|
+
),
|
|
75
|
+
*get_parent_agent_inputs(),
|
|
76
|
+
BoolInput(
|
|
77
|
+
name="enable_tool_validation",
|
|
78
|
+
display_name="Tool Validation",
|
|
79
|
+
info="Validates tool calls using SPARC before execution.",
|
|
80
|
+
value=True,
|
|
81
|
+
),
|
|
82
|
+
BoolInput(
|
|
83
|
+
name="enable_post_tool_reflection",
|
|
84
|
+
display_name="Post Tool JSON Processing",
|
|
85
|
+
info="Processes tool output through JSON analysis.",
|
|
86
|
+
value=True,
|
|
87
|
+
),
|
|
88
|
+
IntInput(
|
|
89
|
+
name="response_processing_size_threshold",
|
|
90
|
+
display_name="Response Processing Size Threshold",
|
|
91
|
+
value=100,
|
|
92
|
+
info="Tool output is post-processed only if response exceeds this character threshold.",
|
|
93
|
+
advanced=True,
|
|
94
|
+
),
|
|
95
|
+
]
|
|
96
|
+
outputs = [
|
|
97
|
+
Output(name="response", display_name="Response", method="message_response"),
|
|
98
|
+
]
|
|
99
|
+
|
|
100
|
+
def configure_tool_pipeline(self) -> None:
|
|
101
|
+
"""Configure the tool pipeline with wrappers based on enabled features."""
|
|
102
|
+
wrappers = []
|
|
103
|
+
|
|
104
|
+
# Add post-tool processing first (innermost wrapper)
|
|
105
|
+
if self.enable_post_tool_reflection:
|
|
106
|
+
logger.info("Enabling Post-Tool Processing Wrapper!")
|
|
107
|
+
post_processor = PostToolProcessingWrapper(
|
|
108
|
+
response_processing_size_threshold=self.response_processing_size_threshold
|
|
109
|
+
)
|
|
110
|
+
wrappers.append(post_processor)
|
|
111
|
+
|
|
112
|
+
# Add pre-tool validation last (outermost wrapper)
|
|
113
|
+
if self.enable_tool_validation:
|
|
114
|
+
logger.info("Enabling Pre-Tool Validation Wrapper!")
|
|
115
|
+
pre_validator = PreToolValidationWrapper()
|
|
116
|
+
wrappers.append(pre_validator)
|
|
117
|
+
|
|
118
|
+
self.pipeline_manager.configure_wrappers(wrappers)
|
|
119
|
+
|
|
120
|
+
def update_runnable_instance(self, agent, runnable, tools):
|
|
121
|
+
"""Override to add tool specs update for validation wrappers."""
|
|
122
|
+
# Get context info (copied from parent)
|
|
123
|
+
user_query = self.get_user_query()
|
|
124
|
+
conversation_context = self.build_conversation_context()
|
|
125
|
+
|
|
126
|
+
# Initialize pipeline (this ensures configure_tool_pipeline is called)
|
|
127
|
+
self._initialize_tool_pipeline()
|
|
128
|
+
|
|
129
|
+
# Update tool specs for validation wrappers BEFORE processing
|
|
130
|
+
for wrapper in self.pipeline_manager.wrappers:
|
|
131
|
+
if isinstance(wrapper, PreToolValidationWrapper) and tools:
|
|
132
|
+
wrapper.tool_specs = wrapper.convert_langchain_tools_to_sparc_tool_specs_format(tools)
|
|
133
|
+
|
|
134
|
+
# Process tools with updated specs
|
|
135
|
+
processed_tools = self.pipeline_manager.process_tools(
|
|
136
|
+
list(tools or []),
|
|
137
|
+
agent=agent,
|
|
138
|
+
user_query=user_query,
|
|
139
|
+
conversation_context=conversation_context,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
runnable.tools = processed_tools
|
|
143
|
+
return runnable
|
|
144
|
+
|
|
145
|
+
def __init__(self, **kwargs):
|
|
146
|
+
"""Initialize ALTK agent with input normalization for Data.to_lc_message() inconsistencies."""
|
|
147
|
+
super().__init__(**kwargs)
|
|
148
|
+
|
|
149
|
+
# If input_value uses Data.to_lc_message(), wrap it to provide consistent content
|
|
150
|
+
if hasattr(self.input_value, "to_lc_message") and callable(self.input_value.to_lc_message):
|
|
151
|
+
self.input_value = self._create_normalized_input_proxy(self.input_value)
|
|
152
|
+
|
|
153
|
+
def _create_normalized_input_proxy(self, original_input):
|
|
154
|
+
"""Create a proxy that normalizes to_lc_message() content format."""
|
|
155
|
+
|
|
156
|
+
class NormalizedInputProxy:
|
|
157
|
+
def __init__(self, original):
|
|
158
|
+
self._original = original
|
|
159
|
+
|
|
160
|
+
def __getattr__(self, name):
|
|
161
|
+
if name == "to_lc_message":
|
|
162
|
+
return self._normalized_to_lc_message
|
|
163
|
+
return getattr(self._original, name)
|
|
164
|
+
|
|
165
|
+
def _normalized_to_lc_message(self):
|
|
166
|
+
"""Return a message with normalized string content."""
|
|
167
|
+
original_msg = self._original.to_lc_message()
|
|
168
|
+
|
|
169
|
+
# If content is in list format, normalize it to string
|
|
170
|
+
if hasattr(original_msg, "content") and isinstance(original_msg.content, list):
|
|
171
|
+
from langchain_core.messages import AIMessage, HumanMessage
|
|
172
|
+
|
|
173
|
+
from lfx.base.agents.altk_base_agent import (
|
|
174
|
+
normalize_message_content,
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
normalized_content = normalize_message_content(original_msg)
|
|
178
|
+
|
|
179
|
+
# Create new message with string content
|
|
180
|
+
if isinstance(original_msg, HumanMessage):
|
|
181
|
+
return HumanMessage(content=normalized_content)
|
|
182
|
+
return AIMessage(content=normalized_content)
|
|
183
|
+
|
|
184
|
+
# Return original if already string format
|
|
185
|
+
return original_msg
|
|
186
|
+
|
|
187
|
+
def __str__(self):
|
|
188
|
+
return str(self._original)
|
|
189
|
+
|
|
190
|
+
def __repr__(self):
|
|
191
|
+
return f"NormalizedInputProxy({self._original!r})"
|
|
192
|
+
|
|
193
|
+
return NormalizedInputProxy(original_input)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from lfx.components._importing import import_mod
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from lfx.components.amazon.amazon_bedrock_embedding import AmazonBedrockEmbeddingsComponent
|
|
9
|
+
from lfx.components.amazon.amazon_bedrock_model import AmazonBedrockComponent
|
|
10
|
+
from lfx.components.amazon.s3_bucket_uploader import S3BucketUploaderComponent
|
|
11
|
+
|
|
12
|
+
_dynamic_imports = {
|
|
13
|
+
"AmazonBedrockEmbeddingsComponent": "amazon_bedrock_embedding",
|
|
14
|
+
"AmazonBedrockComponent": "amazon_bedrock_model",
|
|
15
|
+
"S3BucketUploaderComponent": "s3_bucket_uploader",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
__all__ = ["AmazonBedrockComponent", "AmazonBedrockEmbeddingsComponent", "S3BucketUploaderComponent"]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def __getattr__(attr_name: str) -> Any:
|
|
22
|
+
"""Lazily import amazon components on attribute access."""
|
|
23
|
+
if attr_name not in _dynamic_imports:
|
|
24
|
+
msg = f"module '{__name__}' has no attribute '{attr_name}'"
|
|
25
|
+
raise AttributeError(msg)
|
|
26
|
+
try:
|
|
27
|
+
result = import_mod(attr_name, _dynamic_imports[attr_name], __spec__.parent)
|
|
28
|
+
except (ModuleNotFoundError, ImportError, AttributeError) as e:
|
|
29
|
+
msg = f"Could not import '{attr_name}' from '{__name__}': {e}"
|
|
30
|
+
raise AttributeError(msg) from e
|
|
31
|
+
globals()[attr_name] = result
|
|
32
|
+
return result
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def __dir__() -> list[str]:
|
|
36
|
+
return list(__all__)
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
from langflow.field_typing import LanguageModel
|
|
2
|
+
from langflow.inputs.inputs import BoolInput, FloatInput, IntInput, MessageTextInput, SecretStrInput
|
|
3
|
+
from langflow.io import DictInput, DropdownInput
|
|
4
|
+
|
|
5
|
+
from lfx.base.models.aws_constants import AWS_REGIONS, AWS_MODEL_IDs
|
|
6
|
+
from lfx.base.models.model import LCModelComponent
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AmazonBedrockConverseComponent(LCModelComponent):
|
|
10
|
+
display_name: str = "Amazon Bedrock Converse"
|
|
11
|
+
description: str = (
|
|
12
|
+
"Generate text using Amazon Bedrock LLMs with the modern Converse API for improved conversation handling."
|
|
13
|
+
)
|
|
14
|
+
icon = "Amazon"
|
|
15
|
+
name = "AmazonBedrockConverseModel"
|
|
16
|
+
beta = True
|
|
17
|
+
|
|
18
|
+
inputs = [
|
|
19
|
+
*LCModelComponent.get_base_inputs(),
|
|
20
|
+
DropdownInput(
|
|
21
|
+
name="model_id",
|
|
22
|
+
display_name="Model ID",
|
|
23
|
+
options=AWS_MODEL_IDs,
|
|
24
|
+
value="anthropic.claude-3-5-sonnet-20241022-v2:0",
|
|
25
|
+
info="List of available model IDs to choose from.",
|
|
26
|
+
),
|
|
27
|
+
SecretStrInput(
|
|
28
|
+
name="aws_access_key_id",
|
|
29
|
+
display_name="AWS Access Key ID",
|
|
30
|
+
info="The access key for your AWS account. "
|
|
31
|
+
"Usually set in Python code as the environment variable 'AWS_ACCESS_KEY_ID'.",
|
|
32
|
+
value="AWS_ACCESS_KEY_ID",
|
|
33
|
+
required=True,
|
|
34
|
+
),
|
|
35
|
+
SecretStrInput(
|
|
36
|
+
name="aws_secret_access_key",
|
|
37
|
+
display_name="AWS Secret Access Key",
|
|
38
|
+
info="The secret key for your AWS account. "
|
|
39
|
+
"Usually set in Python code as the environment variable 'AWS_SECRET_ACCESS_KEY'.",
|
|
40
|
+
value="AWS_SECRET_ACCESS_KEY",
|
|
41
|
+
required=True,
|
|
42
|
+
),
|
|
43
|
+
SecretStrInput(
|
|
44
|
+
name="aws_session_token",
|
|
45
|
+
display_name="AWS Session Token",
|
|
46
|
+
advanced=True,
|
|
47
|
+
info="The session key for your AWS account. "
|
|
48
|
+
"Only needed for temporary credentials. "
|
|
49
|
+
"Usually set in Python code as the environment variable 'AWS_SESSION_TOKEN'.",
|
|
50
|
+
load_from_db=False,
|
|
51
|
+
),
|
|
52
|
+
SecretStrInput(
|
|
53
|
+
name="credentials_profile_name",
|
|
54
|
+
display_name="Credentials Profile Name",
|
|
55
|
+
advanced=True,
|
|
56
|
+
info="The name of the profile to use from your "
|
|
57
|
+
"~/.aws/credentials file. "
|
|
58
|
+
"If not provided, the default profile will be used.",
|
|
59
|
+
load_from_db=False,
|
|
60
|
+
),
|
|
61
|
+
DropdownInput(
|
|
62
|
+
name="region_name",
|
|
63
|
+
display_name="Region Name",
|
|
64
|
+
value="us-east-1",
|
|
65
|
+
options=AWS_REGIONS,
|
|
66
|
+
info="The AWS region where your Bedrock resources are located.",
|
|
67
|
+
),
|
|
68
|
+
MessageTextInput(
|
|
69
|
+
name="endpoint_url",
|
|
70
|
+
display_name="Endpoint URL",
|
|
71
|
+
advanced=True,
|
|
72
|
+
info="The URL of the Bedrock endpoint to use.",
|
|
73
|
+
),
|
|
74
|
+
# Model-specific parameters for fine control
|
|
75
|
+
FloatInput(
|
|
76
|
+
name="temperature",
|
|
77
|
+
display_name="Temperature",
|
|
78
|
+
value=0.7,
|
|
79
|
+
info="Controls randomness in output. Higher values make output more random.",
|
|
80
|
+
advanced=True,
|
|
81
|
+
),
|
|
82
|
+
IntInput(
|
|
83
|
+
name="max_tokens",
|
|
84
|
+
display_name="Max Tokens",
|
|
85
|
+
value=4096,
|
|
86
|
+
info="Maximum number of tokens to generate.",
|
|
87
|
+
advanced=True,
|
|
88
|
+
),
|
|
89
|
+
FloatInput(
|
|
90
|
+
name="top_p",
|
|
91
|
+
display_name="Top P",
|
|
92
|
+
value=0.9,
|
|
93
|
+
info="Nucleus sampling parameter. Controls diversity of output.",
|
|
94
|
+
advanced=True,
|
|
95
|
+
),
|
|
96
|
+
IntInput(
|
|
97
|
+
name="top_k",
|
|
98
|
+
display_name="Top K",
|
|
99
|
+
value=250,
|
|
100
|
+
info="Limits the number of highest probability vocabulary tokens to consider. "
|
|
101
|
+
"Note: Not all models support top_k. Use 'Additional Model Fields' for manual configuration if needed.",
|
|
102
|
+
advanced=True,
|
|
103
|
+
),
|
|
104
|
+
BoolInput(
|
|
105
|
+
name="disable_streaming",
|
|
106
|
+
display_name="Disable Streaming",
|
|
107
|
+
value=False,
|
|
108
|
+
info="If True, disables streaming responses. Useful for batch processing.",
|
|
109
|
+
advanced=True,
|
|
110
|
+
),
|
|
111
|
+
DictInput(
|
|
112
|
+
name="additional_model_fields",
|
|
113
|
+
display_name="Additional Model Fields",
|
|
114
|
+
advanced=True,
|
|
115
|
+
is_list=True,
|
|
116
|
+
info="Additional model-specific parameters for fine-tuning behavior.",
|
|
117
|
+
),
|
|
118
|
+
]
|
|
119
|
+
|
|
120
|
+
def build_model(self) -> LanguageModel: # type: ignore[type-var]
|
|
121
|
+
try:
|
|
122
|
+
from langchain_aws.chat_models.bedrock_converse import ChatBedrockConverse
|
|
123
|
+
except ImportError as e:
|
|
124
|
+
msg = "langchain_aws is not installed. Please install it with `pip install langchain_aws`."
|
|
125
|
+
raise ImportError(msg) from e
|
|
126
|
+
|
|
127
|
+
# Prepare initialization parameters
|
|
128
|
+
init_params = {
|
|
129
|
+
"model": self.model_id,
|
|
130
|
+
"region_name": self.region_name,
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
# Add AWS credentials if provided
|
|
134
|
+
if self.aws_access_key_id:
|
|
135
|
+
init_params["aws_access_key_id"] = self.aws_access_key_id
|
|
136
|
+
if self.aws_secret_access_key:
|
|
137
|
+
init_params["aws_secret_access_key"] = self.aws_secret_access_key
|
|
138
|
+
if self.aws_session_token:
|
|
139
|
+
init_params["aws_session_token"] = self.aws_session_token
|
|
140
|
+
if self.credentials_profile_name:
|
|
141
|
+
init_params["credentials_profile_name"] = self.credentials_profile_name
|
|
142
|
+
if self.endpoint_url:
|
|
143
|
+
init_params["endpoint_url"] = self.endpoint_url
|
|
144
|
+
|
|
145
|
+
# Add model parameters directly as supported by ChatBedrockConverse
|
|
146
|
+
if hasattr(self, "temperature") and self.temperature is not None:
|
|
147
|
+
init_params["temperature"] = self.temperature
|
|
148
|
+
if hasattr(self, "max_tokens") and self.max_tokens is not None:
|
|
149
|
+
init_params["max_tokens"] = self.max_tokens
|
|
150
|
+
if hasattr(self, "top_p") and self.top_p is not None:
|
|
151
|
+
init_params["top_p"] = self.top_p
|
|
152
|
+
|
|
153
|
+
# Handle streaming - only disable if explicitly requested
|
|
154
|
+
if hasattr(self, "disable_streaming") and self.disable_streaming:
|
|
155
|
+
init_params["disable_streaming"] = True
|
|
156
|
+
|
|
157
|
+
# Handle additional model request fields carefully
|
|
158
|
+
# Based on the error, inferenceConfig should not be passed as additional fields for some models
|
|
159
|
+
additional_model_request_fields = {}
|
|
160
|
+
|
|
161
|
+
# Only add top_k if user explicitly provided additional fields or if needed for specific models
|
|
162
|
+
if hasattr(self, "additional_model_fields") and self.additional_model_fields:
|
|
163
|
+
for field in self.additional_model_fields:
|
|
164
|
+
if isinstance(field, dict):
|
|
165
|
+
additional_model_request_fields.update(field)
|
|
166
|
+
|
|
167
|
+
# For now, don't automatically add inferenceConfig for top_k to avoid validation errors
|
|
168
|
+
# Users can manually add it via additional_model_fields if their model supports it
|
|
169
|
+
|
|
170
|
+
# Only add if we have actual additional fields
|
|
171
|
+
if additional_model_request_fields:
|
|
172
|
+
init_params["additional_model_request_fields"] = additional_model_request_fields
|
|
173
|
+
|
|
174
|
+
try:
|
|
175
|
+
output = ChatBedrockConverse(**init_params)
|
|
176
|
+
except Exception as e:
|
|
177
|
+
# Provide helpful error message with fallback suggestions
|
|
178
|
+
error_details = str(e)
|
|
179
|
+
if "validation error" in error_details.lower():
|
|
180
|
+
msg = (
|
|
181
|
+
f"ChatBedrockConverse validation error: {error_details}. "
|
|
182
|
+
f"This may be due to incompatible parameters for model '{self.model_id}'. "
|
|
183
|
+
f"Consider adjusting the model parameters or trying the legacy Amazon Bedrock component."
|
|
184
|
+
)
|
|
185
|
+
elif "converse api" in error_details.lower():
|
|
186
|
+
msg = (
|
|
187
|
+
f"Converse API error: {error_details}. "
|
|
188
|
+
f"The model '{self.model_id}' may not support the Converse API. "
|
|
189
|
+
f"Try using the legacy Amazon Bedrock component instead."
|
|
190
|
+
)
|
|
191
|
+
else:
|
|
192
|
+
msg = f"Could not initialize ChatBedrockConverse: {error_details}"
|
|
193
|
+
raise ValueError(msg) from e
|
|
194
|
+
|
|
195
|
+
return output
|