|
"""Configuration settings for the web search and report generation system.""" |
|
|
|
from phi.model.groq import Groq |
|
from phi.model.together import Together |
|
from phi.model.huggingface import HuggingFaceChat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SEARCHER_MODEL_CONFIG = { |
|
"id": "Trelis/Meta-Llama-3-70B-Instruct-function-calling", |
|
"temperature": 0.4, |
|
"top_p": 0.3, |
|
"repetition_penalty": 1 |
|
} |
|
|
|
|
|
WRITER_MODEL_CONFIG = { |
|
"id": "Trelis/Meta-Llama-3-70B-Instruct-function-calling", |
|
"temperature": 0.2, |
|
"top_p": 0.2, |
|
"repetition_penalty": 1 |
|
} |
|
|
|
|
|
REVIEW_THRESHOLDS = { |
|
"min_word_count": 2000, |
|
"min_score": 7, |
|
"min_avg_score": 8, |
|
"max_iterations": 5 |
|
} |
|
|
|
|
|
CRAWLER_CONFIG = { |
|
"max_pages_per_site": 10, |
|
"min_relevance_score": 0.5 |
|
} |
|
|
|
def get_hf_model(purpose: str) -> HuggingFaceChat: |
|
""" |
|
Factory function to create HuggingFaceChat models with specific configurations. |
|
|
|
Args: |
|
purpose: Either 'searcher' or 'writer' to determine which configuration to use |
|
|
|
Returns: |
|
Configured HuggingFaceChat model instance |
|
""" |
|
if purpose == 'searcher': |
|
return HuggingFaceChat( |
|
id=SEARCHER_MODEL_CONFIG["id"], |
|
api_key=os.getenv("HF_API_KEY"), |
|
temperature=SEARCHER_MODEL_CONFIG["temperature"], |
|
top_p=SEARCHER_MODEL_CONFIG["top_p"], |
|
) |
|
elif purpose == 'writer': |
|
return HuggingFaceChat( |
|
id=WRITER_MODEL_CONFIG["id"], |
|
api_key=os.getenv("HF_API_KEY"), |
|
temperature=WRITER_MODEL_CONFIG["temperature"], |
|
top_p=WRITER_MODEL_CONFIG["top_p"] |
|
) |
|
else: |
|
raise ValueError(f"Unknown purpose: {purpose}. Must be 'searcher' or 'writer'") |
|
|
|
def get_together_model(purpose: str) -> Together: |
|
""" |
|
Factory function to create Together models with specific configurations. |
|
|
|
Args: |
|
purpose: Either 'searcher' or 'writer' to determine which configuration to use |
|
|
|
Returns: |
|
Configured Together model instance |
|
""" |
|
if purpose == 'searcher': |
|
return Together( |
|
id=SEARCHER_MODEL_CONFIG["id"], |
|
api_key=TOGETHER_API_KEY, |
|
temperature=SEARCHER_MODEL_CONFIG["temperature"], |
|
top_p=SEARCHER_MODEL_CONFIG["top_p"], |
|
repetition_penalty=SEARCHER_MODEL_CONFIG["repetition_penalty"] |
|
) |
|
elif purpose == 'writer': |
|
return Together( |
|
id=WRITER_MODEL_CONFIG["id"], |
|
api_key=TOGETHER_API_KEY, |
|
temperature=WRITER_MODEL_CONFIG["temperature"], |
|
top_p=WRITER_MODEL_CONFIG["top_p"], |
|
repetition_penalty=WRITER_MODEL_CONFIG["repetition_penalty"] |
|
) |
|
else: |
|
raise ValueError(f"Unknown purpose: {purpose}. Must be 'searcher' or 'writer'") |
|
|
|
|
|
def get_groq_model(purpose: str) -> Groq: |
|
""" |
|
Factory function to create Groq models with specific configurations. |
|
|
|
Args: |
|
purpose: Either 'searcher' or 'writer' to determine which configuration to use |
|
|
|
Returns: |
|
Configured Groq model instance |
|
""" |
|
if purpose == 'searcher': |
|
return Groq( |
|
id=SEARCHER_MODEL_CONFIG["id"], |
|
api_key=GROQ_API_KEY, |
|
temperature=SEARCHER_MODEL_CONFIG["temperature"], |
|
top_p=SEARCHER_MODEL_CONFIG["top_p"] |
|
) |
|
elif purpose == 'writer': |
|
return Groq( |
|
id=WRITER_MODEL_CONFIG["id"], |
|
api_key=GROQ_API_KEY, |
|
temperature=WRITER_MODEL_CONFIG["temperature"], |
|
top_p=WRITER_MODEL_CONFIG["top_p"] |
|
) |
|
else: |
|
raise ValueError(f"Unknown purpose: {purpose}. Must be 'searcher' or 'writer'") |
|
|