Skip to content

Setter and getter for BaseURL config #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

Conversation

rjcorwin
Copy link
Member

Describe the change
In some systems, between when a client is instantiated and when the client is used, the baseURL may need to be refreshed. This change exposes SetBaseURL and GetBaseURL methods on Client to set the internal BaseURL config.

Issue: #XXXX

chenhhA and others added 7 commits November 10, 2024 20:29
…lity

**Describe the change**
This PR refactors the `ChatCompletionStream` to use dependency injection by introducing a `ChatStreamReader` interface. This allows for injecting custom stream readers, primarily for testing purposes, making the streaming functionality more testable and maintainable.

**Provide OpenAI documentation link**
https://platform.openai.com/docs/api-reference/chat/create

**Describe your solution**
The changes include:
- Added a `ChatStreamReader` interface that defines the contract for reading chat completion streams
- Refactored `ChatCompletionStream` to use composition with a `ChatStreamReader` instead of embedding `streamReader`
- Added `NewChatCompletionStream()` constructor function to enable dependency injection
- Implemented explicit delegation methods (`Recv()`, `Close()`, `Header()`, `GetRateLimitHeaders()`) on `ChatCompletionStream`
- Added interface compliance check via `var _ ChatStreamReader = (*streamReader[ChatCompletionStreamResponse])(nil)`

This approach maintains backward compatibility while enabling easier mocking and testing of streaming functionality.

**Tests**
Added comprehensive tests demonstrating the new functionality:
- `TestChatCompletionStream_MockInjection`: Tests basic mock injection with the new constructor
- `mock_streaming_demo_test.go`: A complete demonstration file showing how to create mock clients and stream readers for testing, including:
  - `MockOpenAIStreamClient`: Full mock client implementation
  - `mockStreamReader`: Custom stream reader for controlled test responses
  - `TestMockOpenAIStreamClient_Demo`: Demonstrates assembling multiple stream chunks
  - `TestMockOpenAIStreamClient_ErrorHandling`: Shows error handling patterns

**Additional context**
This refactoring improves the testability of code that depends on go-openai streaming without introducing breaking changes. The existing public API remains unchanged, but now supports dependency injection for testing scenarios. The new demo test file serves as documentation for users who want to mock streaming responses in their own tests.

Lint fix
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants