Skip to content

OAI_CONFIG_LIST details in documentation #3

Closed

Description

@BeibinLi

It would be helpful to add details about the OAI_CONFIG_LIST in documentation so that users can quickly starts with the OAI functions.

Activity

  1. sonichi commented on Sep 20, 2023

    @sonichi
    Contributor
  2. rustyorb commented on Sep 27, 2023

    @rustyorb

    Is there a working example of this file, in JSON format? I can get this file to work or parse right when I create it.

  3. AaronWard commented on Sep 27, 2023

    @AaronWard
    Contributor

    I was a bit confused on how this works. It would be nice to just have something like load_dotenv() to handle the keys. But anyways - Just going off the examples in the /notebooks directory i made a file called OAI_CONFIG_LIST (with no filetype)

    [
        {
            "model": "gpt-4",
            "api_key": "***"
        },
        {
            "model": "gpt-3.5-turbo",
            "api_key": "***"
        }
    ]

    In my notebook:

    # Setting configurations for autogen
    config_list = autogen.config_list_from_json(
        env_or_file="OAI_CONFIG_LIST",
        file_location=".",
        filter_dict={
            "model": {
                "gpt-4",
                "gpt4",
                "gpt-4-32k",
                "gpt-4-32k-0314",
                "gpt-4-32k-v0314",
                "gpt-3.5-turbo",
                "gpt-3.5-turbo-16k",
                "gpt-3.5-turbo-0301",
                "chatgpt-35-turbo-0301",
                "gpt-35-turbo-v0301",
                "gpt",
            }
        }
    )
    
    config_list

    When printing config_list

    [{'model': 'gpt-4',
      'api_key': '***'},
     {'model': 'gpt-3.5-turbo',
      'api_key': '***}]

    And then i pass the config_list to the initiate_chat function.

    assistant = AssistantAgent("assistant")
    user_proxy = UserProxyAgent("user_proxy")
    user_proxy.initiate_chat(assistant, 
        message="Plot a chart of META and TESLA stock price change YTD.", 
        config_list=config_list
    )

    This worked for me


    Update

    If you'd rather use load_dotenv() this worked for me.

    import json
    from dotenv import find_dotenv, load_dotenv
    load_dotenv(Path('../../.env'))
    
    env_var = [
        {
            'model': 'gpt-4',
            'api_key': os.environ['OPENAI_API_KEY']
        },
        {
            'model': 'gpt-3.5-turbo',
            'api_key': os.environ['OPENAI_API_KEY']
        }
    ]
    
    # needed to convert to str
    env_var = json.dumps(env_var)
    
    # Setting configurations for autogen
    config_list = autogen.config_list_from_json(
        env_or_file=env_var,
        filter_dict={
            "model": {
                "gpt-4",
                "gpt4",
                "gpt-4-32k",
                "gpt-4-32k-0314",
                "gpt-4-32k-v0314",
                "gpt-3.5-turbo",
                "gpt-3.5-turbo-16k",
                "gpt-3.5-turbo-0301",
                "chatgpt-35-turbo-0301",
                "gpt-35-turbo-v0301",
                "gpt",
            }
        }
    )
  4. rustyorb commented on Sep 27, 2023

    @rustyorb

    This is tremendously helpful, thank you.

  5. sonichi commented on Sep 27, 2023

    @sonichi
    Contributor

    I was a bit confused on how this works. It would be nice to just have something like load_dotenv() to handle the keys. But anyways - Just going off the examples in the /notebooks directory i made a file called OAI_CONFIG_LIST (with no filetype)

    [
        {
            "model": "gpt-4",
            "api_key": "***"
        },
        {
            "model": "gpt-3.5-turbo",
            "api_key": "***"
        }
    ]

    In my notebook:

    # Setting configurations for autogen
    config_list = autogen.config_list_from_json(
        env_or_file="OAI_CONFIG_LIST",
        file_location=".",
        filter_dict={
            "model": {
                "gpt-4",
                "gpt4",
                "gpt-4-32k",
                "gpt-4-32k-0314",
                "gpt-4-32k-v0314",
                "gpt-3.5-turbo",
                "gpt-3.5-turbo-16k",
                "gpt-3.5-turbo-0301",
                "chatgpt-35-turbo-0301",
                "gpt-35-turbo-v0301",
                "gpt",
            }
        }
    )
    
    config_list

    When printing config_list

    [{'model': 'gpt-4',
      'api_key': '***'},
     {'model': 'gpt-3.5-turbo',
      'api_key': '***}]

    And then i pass the config_list to the initiate_chat function.

    assistant = AssistantAgent("assistant")
    user_proxy = UserProxyAgent("user_proxy")
    user_proxy.initiate_chat(assistant, 
        message="Plot a chart of META and TESLA stock price change YTD.", 
        config_list=config_list
    )

    This worked for me

    Update

    If you'd rather use load_dotenv() this worked for me.

    import json
    from dotenv import find_dotenv, load_dotenv
    load_dotenv(Path('../../.env'))
    
    env_var = [
        {
            'model': 'gpt-4',
            'api_key': os.environ['OPENAI_API_KEY']
        },
        {
            'model': 'gpt-3.5-turbo',
            'api_key': os.environ['OPENAI_API_KEY']
        }
    ]
    
    # needed to convert to str
    env_var = json.dumps(env_var)
    
    # Setting configurations for autogen
    config_list = autogen.config_list_from_json(
        env_or_file=env_var,
        filter_dict={
            "model": {
                "gpt-4",
                "gpt4",
                "gpt-4-32k",
                "gpt-4-32k-0314",
                "gpt-4-32k-v0314",
                "gpt-3.5-turbo",
                "gpt-3.5-turbo-16k",
                "gpt-3.5-turbo-0301",
                "chatgpt-35-turbo-0301",
                "gpt-35-turbo-v0301",
                "gpt",
            }
        }
    )

    Thanks. You can also have a single env var which contains the entire json and load it directly:

    load_dotenv(Path('../../.env'))
    config_list = autogen.config_list_from_json(YOUR_ENV_VAR_NAME_FOR_JSON)
  6. EdFries commented on Sep 27, 2023

    @EdFries

    I'm trying to solve the same problem using fastchat with a local llm as in the documentation but it fails because I don't provide an openai key:

    from autogen import AssistantAgent, UserProxyAgent, oai
    config_list=[
        {
            "model": "chatglm2-6b",
            "api_base": "http://localhost:8000/v1",
            "api_type": "open_ai",
            "api_key": "NULL", # just a placeholder
        }
    ]
    
    response = oai.Completion.create(config_list=config_list, prompt="Hi")
    print(response) # works fine
    
    assistant = AssistantAgent("assistant")
    user_proxy = UserProxyAgent("user_proxy")
    user_proxy.initiate_chat(assistant, message="Plot a chart of META and TESLA stock price change YTD.", config_list=config_list)
    # fails with the error: openai.error.AuthenticationError: No API key provided.
    
  7. sonichi commented on Sep 27, 2023

    @sonichi
    Contributor

    I'm trying to solve the same problem using fastchat with a local llm as in the documentation but it fails because I don't provide an openai key:

    from autogen import AssistantAgent, UserProxyAgent, oai
    config_list=[
        {
            "model": "chatglm2-6b",
            "api_base": "http://localhost:8000/v1",
            "api_type": "open_ai",
            "api_key": "NULL", # just a placeholder
        }
    ]
    
    response = oai.Completion.create(config_list=config_list, prompt="Hi")
    print(response) # works fine
    
    assistant = AssistantAgent("assistant")
    user_proxy = UserProxyAgent("user_proxy")
    user_proxy.initiate_chat(assistant, message="Plot a chart of META and TESLA stock price change YTD.", config_list=config_list)
    # fails with the error: openai.error.AuthenticationError: No API key provided.
    

    Please add llm_config={"config_list": config_list} in the constructor of AssistantAgent

  8. EdFries commented on Sep 27, 2023

    @EdFries

    Thanks, that worked!

  9. sonichi commented on Sep 27, 2023

    @sonichi
    Contributor
  10. AaronWard commented on Sep 28, 2023

    @AaronWard
    Contributor

    Update: i found that my previous example was throwing an error because the json was being parsed as a string. Here is working example of setting up your config list using dotenv. This will allow you to dynamically create the json file required by autogen.config_list_from_json() when you're using a .env file

    import tempfile
    from dotenv import find_dotenv, load_dotenv
    load_dotenv(find_dotenv())
    
    env_var = [
        {
            'model': 'gpt-4',
            'api_key': os.getenv('OPENAI_API_KEY')
        },
        {
            'model': 'gpt-3.5-turbo',
            'api_key': os.getenv('OPENAI_API_KEY')
        }
    ]
    
    # Create a temporary file
    # Write the JSON structure to a temporary file and pass it to config_list_from_json
    with tempfile.NamedTemporaryFile(mode='w+', delete=True) as temp:
        env_var = json.dumps(env_var)
        temp.write(env_var)
        temp.flush()
    
        # Setting configurations for autogen
        config_list = autogen.config_list_from_json(
            env_or_file=temp.name,
            filter_dict={
                "model": {
                    "gpt-4",
                    "gpt-3.5-turbo",
                }
            }
        )
    
    assert len(config_list) > 0 
    print("models to use: ", [config_list[i]["model"] for i in range(len(config_list))])

    models to use: ['gpt-4', 'gpt-3.5-turbo']

  11. added a commit that references this issue on May 7, 2024
  12. cjy8s commented on Sep 26, 2024

    @cjy8s
    import autogen
    import getpass
    import tempfile
    from dotenv import load_dotenv
    import os
    import json
    
    load_dotenv(dotenv_path='../../API_KEYs.env')
    
    OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
    
    OAI_CONFIG_LIST = [{
            'model': 'gpt-4o-mini',
            'api_key': OPENAI_API_KEY
        }]
    
    with tempfile.NamedTemporaryFile(mode='w+', delete=True) as temp:
        env_var = json.dumps(OAI_CONFIG_LIST)
        temp.write(env_var)
        temp.flush()
    
        # Setting configurations for autogen
        config_list = autogen.config_list_from_json(
            env_or_file=temp.name,
            filter_dict={
                "model": {
                    "gpt-4o-mini",
                }
            }
        )
    
    gpt4_config = {"seed": 42, 
                   "config_list": config_list, 
                   "temperature": 0}
    

    Gives me this warning now:

    [autogen.oai.client: 09-26 14:19:56] {184} WARNING - The API key specified is not a valid OpenAI format; it won't work with the OpenAI-hosted model.
    
    
  13. AaronWard commented on Sep 27, 2024

    @AaronWard
    Contributor

    Christopher Yates (@cjy8s) You can just use the config_list_from_dotenv function instead of writing a temporary file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions